import comment
git-svn-id: https://svn.code.sf.net/p/keepassx/code/trunk@1 b624d157-de02-0410-bad0-e51aec6abb33
|
@ -0,0 +1,9 @@
|
||||||
|
# Diese Datei wurde mit dem qmake-Manager von KDevelop erstellt.
|
||||||
|
# -------------------------------------------
|
||||||
|
# Unterverzeichnis relativ zum Projektverzeichnis: .
|
||||||
|
# Das Target ist Projekt im Unterverzeichnis
|
||||||
|
|
||||||
|
CONFIG += release \
|
||||||
|
warn_on
|
||||||
|
TEMPLATE = subdirs
|
||||||
|
SUBDIRS += src
|
After Width: | Height: | Size: 1.1 KiB |
After Width: | Height: | Size: 52 KiB |
After Width: | Height: | Size: 2.4 KiB |
After Width: | Height: | Size: 1.6 KiB |
|
@ -0,0 +1,340 @@
|
||||||
|
GNU GENERAL PUBLIC LICENSE
|
||||||
|
Version 2, June 1991
|
||||||
|
|
||||||
|
Copyright (C) 1989, 1991 Free Software Foundation, Inc.
|
||||||
|
59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
Everyone is permitted to copy and distribute verbatim copies
|
||||||
|
of this license document, but changing it is not allowed.
|
||||||
|
|
||||||
|
Preamble
|
||||||
|
|
||||||
|
The licenses for most software are designed to take away your
|
||||||
|
freedom to share and change it. By contrast, the GNU General Public
|
||||||
|
License is intended to guarantee your freedom to share and change free
|
||||||
|
software--to make sure the software is free for all its users. This
|
||||||
|
General Public License applies to most of the Free Software
|
||||||
|
Foundation's software and to any other program whose authors commit to
|
||||||
|
using it. (Some other Free Software Foundation software is covered by
|
||||||
|
the GNU Library General Public License instead.) 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
|
||||||
|
this service 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 make restrictions that forbid
|
||||||
|
anyone to deny you these rights or to ask you to surrender the rights.
|
||||||
|
These restrictions translate to certain responsibilities for you if you
|
||||||
|
distribute copies of the software, or if you modify it.
|
||||||
|
|
||||||
|
For example, if you distribute copies of such a program, whether
|
||||||
|
gratis or for a fee, you must give the recipients all the rights that
|
||||||
|
you have. 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.
|
||||||
|
|
||||||
|
We protect your rights with two steps: (1) copyright the software, and
|
||||||
|
(2) offer you this license which gives you legal permission to copy,
|
||||||
|
distribute and/or modify the software.
|
||||||
|
|
||||||
|
Also, for each author's protection and ours, we want to make certain
|
||||||
|
that everyone understands that there is no warranty for this free
|
||||||
|
software. If the software is modified by someone else and passed on, we
|
||||||
|
want its recipients to know that what they have is not the original, so
|
||||||
|
that any problems introduced by others will not reflect on the original
|
||||||
|
authors' reputations.
|
||||||
|
|
||||||
|
Finally, any free program is threatened constantly by software
|
||||||
|
patents. We wish to avoid the danger that redistributors of a free
|
||||||
|
program will individually obtain patent licenses, in effect making the
|
||||||
|
program proprietary. To prevent this, we have made it clear that any
|
||||||
|
patent must be licensed for everyone's free use or not licensed at all.
|
||||||
|
|
||||||
|
The precise terms and conditions for copying, distribution and
|
||||||
|
modification follow.
|
||||||
|
|
||||||
|
GNU GENERAL PUBLIC LICENSE
|
||||||
|
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
||||||
|
|
||||||
|
0. This License applies to any program or other work which contains
|
||||||
|
a notice placed by the copyright holder saying it may be distributed
|
||||||
|
under the terms of this General Public License. The "Program", below,
|
||||||
|
refers to any such program or work, and a "work based on the Program"
|
||||||
|
means either the Program or any derivative work under copyright law:
|
||||||
|
that is to say, a work containing the Program or a portion of it,
|
||||||
|
either verbatim or with modifications and/or translated into another
|
||||||
|
language. (Hereinafter, translation is included without limitation in
|
||||||
|
the term "modification".) Each licensee is addressed as "you".
|
||||||
|
|
||||||
|
Activities other than copying, distribution and modification are not
|
||||||
|
covered by this License; they are outside its scope. The act of
|
||||||
|
running the Program is not restricted, and the output from the Program
|
||||||
|
is covered only if its contents constitute a work based on the
|
||||||
|
Program (independent of having been made by running the Program).
|
||||||
|
Whether that is true depends on what the Program does.
|
||||||
|
|
||||||
|
1. You may copy and distribute 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 and disclaimer of warranty; keep intact all the
|
||||||
|
notices that refer to this License and to the absence of any warranty;
|
||||||
|
and give any other recipients of the Program a copy of this License
|
||||||
|
along with the Program.
|
||||||
|
|
||||||
|
You may charge a fee for the physical act of transferring a copy, and
|
||||||
|
you may at your option offer warranty protection in exchange for a fee.
|
||||||
|
|
||||||
|
2. You may modify your copy or copies of the Program or any portion
|
||||||
|
of it, thus forming a work based on the Program, and copy and
|
||||||
|
distribute such modifications or work under the terms of Section 1
|
||||||
|
above, provided that you also meet all of these conditions:
|
||||||
|
|
||||||
|
a) You must cause the modified files to carry prominent notices
|
||||||
|
stating that you changed the files and the date of any change.
|
||||||
|
|
||||||
|
b) You must cause any work that you distribute or publish, that in
|
||||||
|
whole or in part contains or is derived from the Program or any
|
||||||
|
part thereof, to be licensed as a whole at no charge to all third
|
||||||
|
parties under the terms of this License.
|
||||||
|
|
||||||
|
c) If the modified program normally reads commands interactively
|
||||||
|
when run, you must cause it, when started running for such
|
||||||
|
interactive use in the most ordinary way, to print or display an
|
||||||
|
announcement including an appropriate copyright notice and a
|
||||||
|
notice that there is no warranty (or else, saying that you provide
|
||||||
|
a warranty) and that users may redistribute the program under
|
||||||
|
these conditions, and telling the user how to view a copy of this
|
||||||
|
License. (Exception: if the Program itself is interactive but
|
||||||
|
does not normally print such an announcement, your work based on
|
||||||
|
the Program is not required to print an announcement.)
|
||||||
|
|
||||||
|
These requirements apply to the modified work as a whole. If
|
||||||
|
identifiable sections of that work are not derived from the Program,
|
||||||
|
and can be reasonably considered independent and separate works in
|
||||||
|
themselves, then this License, and its terms, do not apply to those
|
||||||
|
sections when you distribute them as separate works. But when you
|
||||||
|
distribute the same sections as part of a whole which is a work based
|
||||||
|
on the Program, the distribution of the whole must be on the terms of
|
||||||
|
this License, whose permissions for other licensees extend to the
|
||||||
|
entire whole, and thus to each and every part regardless of who wrote it.
|
||||||
|
|
||||||
|
Thus, it is not the intent of this section to claim rights or contest
|
||||||
|
your rights to work written entirely by you; rather, the intent is to
|
||||||
|
exercise the right to control the distribution of derivative or
|
||||||
|
collective works based on the Program.
|
||||||
|
|
||||||
|
In addition, mere aggregation of another work not based on the Program
|
||||||
|
with the Program (or with a work based on the Program) on a volume of
|
||||||
|
a storage or distribution medium does not bring the other work under
|
||||||
|
the scope of this License.
|
||||||
|
|
||||||
|
3. You may copy and distribute the Program (or a work based on it,
|
||||||
|
under Section 2) in object code or executable form under the terms of
|
||||||
|
Sections 1 and 2 above provided that you also do one of the following:
|
||||||
|
|
||||||
|
a) Accompany it with the complete corresponding machine-readable
|
||||||
|
source code, which must be distributed under the terms of Sections
|
||||||
|
1 and 2 above on a medium customarily used for software interchange; or,
|
||||||
|
|
||||||
|
b) Accompany it with a written offer, valid for at least three
|
||||||
|
years, to give any third party, for a charge no more than your
|
||||||
|
cost of physically performing source distribution, a complete
|
||||||
|
machine-readable copy of the corresponding source code, to be
|
||||||
|
distributed under the terms of Sections 1 and 2 above on a medium
|
||||||
|
customarily used for software interchange; or,
|
||||||
|
|
||||||
|
c) Accompany it with the information you received as to the offer
|
||||||
|
to distribute corresponding source code. (This alternative is
|
||||||
|
allowed only for noncommercial distribution and only if you
|
||||||
|
received the program in object code or executable form with such
|
||||||
|
an offer, in accord with Subsection b above.)
|
||||||
|
|
||||||
|
The source code for a work means the preferred form of the work for
|
||||||
|
making modifications to it. For an executable work, complete source
|
||||||
|
code means all the source code for all modules it contains, plus any
|
||||||
|
associated interface definition files, plus the scripts used to
|
||||||
|
control compilation and installation of the executable. However, as a
|
||||||
|
special exception, the source code distributed need not include
|
||||||
|
anything that is normally distributed (in either source or binary
|
||||||
|
form) with the major components (compiler, kernel, and so on) of the
|
||||||
|
operating system on which the executable runs, unless that component
|
||||||
|
itself accompanies the executable.
|
||||||
|
|
||||||
|
If distribution of executable or object code is made by offering
|
||||||
|
access to copy from a designated place, then offering equivalent
|
||||||
|
access to copy the source code from the same place counts as
|
||||||
|
distribution of the source code, even though third parties are not
|
||||||
|
compelled to copy the source along with the object code.
|
||||||
|
|
||||||
|
4. You may not copy, modify, sublicense, or distribute the Program
|
||||||
|
except as expressly provided under this License. Any attempt
|
||||||
|
otherwise to copy, modify, sublicense or distribute the Program is
|
||||||
|
void, and will automatically terminate your rights under this License.
|
||||||
|
However, parties who have received copies, or rights, from you under
|
||||||
|
this License will not have their licenses terminated so long as such
|
||||||
|
parties remain in full compliance.
|
||||||
|
|
||||||
|
5. You are not required to accept this License, since you have not
|
||||||
|
signed it. However, nothing else grants you permission to modify or
|
||||||
|
distribute the Program or its derivative works. These actions are
|
||||||
|
prohibited by law if you do not accept this License. Therefore, by
|
||||||
|
modifying or distributing the Program (or any work based on the
|
||||||
|
Program), you indicate your acceptance of this License to do so, and
|
||||||
|
all its terms and conditions for copying, distributing or modifying
|
||||||
|
the Program or works based on it.
|
||||||
|
|
||||||
|
6. Each time you redistribute the Program (or any work based on the
|
||||||
|
Program), the recipient automatically receives a license from the
|
||||||
|
original licensor to copy, distribute or modify the Program subject to
|
||||||
|
these terms and conditions. You may not impose any further
|
||||||
|
restrictions on the recipients' exercise of the rights granted herein.
|
||||||
|
You are not responsible for enforcing compliance by third parties to
|
||||||
|
this License.
|
||||||
|
|
||||||
|
7. If, as a consequence of a court judgment or allegation of patent
|
||||||
|
infringement or for any other reason (not limited to patent issues),
|
||||||
|
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
|
||||||
|
distribute so as to satisfy simultaneously your obligations under this
|
||||||
|
License and any other pertinent obligations, then as a consequence you
|
||||||
|
may not distribute the Program at all. For example, if a patent
|
||||||
|
license would not permit royalty-free redistribution of the Program by
|
||||||
|
all those who receive copies directly or indirectly through you, then
|
||||||
|
the only way you could satisfy both it and this License would be to
|
||||||
|
refrain entirely from distribution of the Program.
|
||||||
|
|
||||||
|
If any portion of this section is held invalid or unenforceable under
|
||||||
|
any particular circumstance, the balance of the section is intended to
|
||||||
|
apply and the section as a whole is intended to apply in other
|
||||||
|
circumstances.
|
||||||
|
|
||||||
|
It is not the purpose of this section to induce you to infringe any
|
||||||
|
patents or other property right claims or to contest validity of any
|
||||||
|
such claims; this section has the sole purpose of protecting the
|
||||||
|
integrity of the free software distribution system, which is
|
||||||
|
implemented by public license practices. Many people have made
|
||||||
|
generous contributions to the wide range of software distributed
|
||||||
|
through that system in reliance on consistent application of that
|
||||||
|
system; it is up to the author/donor to decide if he or she is willing
|
||||||
|
to distribute software through any other system and a licensee cannot
|
||||||
|
impose that choice.
|
||||||
|
|
||||||
|
This section is intended to make thoroughly clear what is believed to
|
||||||
|
be a consequence of the rest of this License.
|
||||||
|
|
||||||
|
8. If the distribution and/or use of the Program is restricted in
|
||||||
|
certain countries either by patents or by copyrighted interfaces, the
|
||||||
|
original copyright holder who places the Program under this License
|
||||||
|
may add an explicit geographical distribution limitation excluding
|
||||||
|
those countries, so that distribution is permitted only in or among
|
||||||
|
countries not thus excluded. In such case, this License incorporates
|
||||||
|
the limitation as if written in the body of this License.
|
||||||
|
|
||||||
|
9. The Free Software Foundation may publish revised and/or new versions
|
||||||
|
of the 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 a version number of this License which applies to it and "any
|
||||||
|
later version", you have the option of following the terms and conditions
|
||||||
|
either of that version or of any later version published by the Free
|
||||||
|
Software Foundation. If the Program does not specify a version number of
|
||||||
|
this License, you may choose any version ever published by the Free Software
|
||||||
|
Foundation.
|
||||||
|
|
||||||
|
10. If you wish to incorporate parts of the Program into other free
|
||||||
|
programs whose distribution conditions are different, write to the author
|
||||||
|
to ask for permission. For software which is copyrighted by the Free
|
||||||
|
Software Foundation, write to the Free Software Foundation; we sometimes
|
||||||
|
make exceptions for this. Our decision will be guided by the two goals
|
||||||
|
of preserving the free status of all derivatives of our free software and
|
||||||
|
of promoting the sharing and reuse of software generally.
|
||||||
|
|
||||||
|
NO WARRANTY
|
||||||
|
|
||||||
|
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, 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.
|
||||||
|
|
||||||
|
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
|
||||||
|
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
|
||||||
|
REDISTRIBUTE 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.
|
||||||
|
|
||||||
|
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
|
||||||
|
convey 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 2 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, write to the Free Software
|
||||||
|
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
|
||||||
|
|
||||||
|
Also add information on how to contact you by electronic and paper mail.
|
||||||
|
|
||||||
|
If the program is interactive, make it output a short notice like this
|
||||||
|
when it starts in an interactive mode:
|
||||||
|
|
||||||
|
Gnomovision version 69, Copyright (C) year name of author
|
||||||
|
Gnomovision 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, the commands you use may
|
||||||
|
be called something other than `show w' and `show c'; they could even be
|
||||||
|
mouse-clicks or menu items--whatever suits your program.
|
||||||
|
|
||||||
|
You should also get your employer (if you work as a programmer) or your
|
||||||
|
school, if any, to sign a "copyright disclaimer" for the program, if
|
||||||
|
necessary. Here is a sample; alter the names:
|
||||||
|
|
||||||
|
Yoyodyne, Inc., hereby disclaims all copyright interest in the program
|
||||||
|
`Gnomovision' (which makes passes at compilers) written by James Hacker.
|
||||||
|
|
||||||
|
<signature of Ty Coon>, 1 April 1989
|
||||||
|
Ty Coon, President of Vice
|
||||||
|
|
||||||
|
This 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 Library General
|
||||||
|
Public License instead of this License.
|
After Width: | Height: | Size: 634 B |
After Width: | Height: | Size: 1.9 KiB |
After Width: | Height: | Size: 2.3 KiB |
|
@ -0,0 +1,57 @@
|
||||||
|
/***************************************************************************
|
||||||
|
* Copyright (C) 2005 by Tarek Saidi *
|
||||||
|
* mail@tarek-saidi.de *
|
||||||
|
* *
|
||||||
|
* This program is free software; you can redistribute it and/or modify *
|
||||||
|
* it under the terms of the GNU General Public License as published by *
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or *
|
||||||
|
* (at your option) any later version. *
|
||||||
|
* *
|
||||||
|
* 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, write to the *
|
||||||
|
* Free Software Foundation, Inc., *
|
||||||
|
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
|
#include "Database.h"
|
||||||
|
|
||||||
|
|
||||||
|
CEntry::CEntry(){
|
||||||
|
ImageID=0;
|
||||||
|
GroupID=0;
|
||||||
|
Creation.SetToNow();
|
||||||
|
LastMod.SetToNow();
|
||||||
|
LastAccess.SetToNow();
|
||||||
|
Expire.Set(28,12,2999,0,0,0);
|
||||||
|
BinaryDataLength=0;
|
||||||
|
pBinaryData=NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CGroup::UI_ExpandByDefault=true;
|
||||||
|
|
||||||
|
CGroup::CGroup(){
|
||||||
|
Creation.SetToNow();
|
||||||
|
LastAccess.SetToNow();
|
||||||
|
LastMod.SetToNow();
|
||||||
|
Expire.Set(1,1,2999,0,0,0);
|
||||||
|
Level=0;
|
||||||
|
ImageID=0;
|
||||||
|
Name="<Group>";
|
||||||
|
UI_ItemIsExpanded=UI_ExpandByDefault;
|
||||||
|
}
|
||||||
|
|
||||||
|
CGroup::~CGroup(){
|
||||||
|
}
|
||||||
|
|
||||||
|
CEntry::~CEntry(){
|
||||||
|
if(pBinaryData) {
|
||||||
|
delete [] pBinaryData;
|
||||||
|
}
|
||||||
|
pBinaryData=NULL;
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,99 @@
|
||||||
|
/***************************************************************************
|
||||||
|
* Copyright (C) 2005 by Tarek Saidi *
|
||||||
|
* mail@tarek-saidi.de *
|
||||||
|
* *
|
||||||
|
* This program is free software; you can redistribute it and/or modify *
|
||||||
|
* it under the terms of the GNU General Public License as published by *
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or *
|
||||||
|
* (at your option) any later version. *
|
||||||
|
* *
|
||||||
|
* 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, write to the *
|
||||||
|
* Free Software Foundation, Inc., *
|
||||||
|
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
|
||||||
|
***************************************************************************/
|
||||||
|
#ifndef _DATABASE_H_
|
||||||
|
#define _DATABASE_H_
|
||||||
|
|
||||||
|
#include <vector.h>
|
||||||
|
#include "lib/PwmTime.h"
|
||||||
|
#include "lib/SecString.h"
|
||||||
|
|
||||||
|
class CEntry{
|
||||||
|
public:
|
||||||
|
CEntry();
|
||||||
|
~CEntry();
|
||||||
|
UINT8 ID[16];
|
||||||
|
UINT32 sID;
|
||||||
|
UINT32 GroupID;
|
||||||
|
UINT32 ImageID;
|
||||||
|
QString Title;
|
||||||
|
QString URL;
|
||||||
|
QString UserName;
|
||||||
|
SecString Password;
|
||||||
|
QString Additional;
|
||||||
|
QString BinaryDesc;
|
||||||
|
CPwmTime Creation;
|
||||||
|
CPwmTime LastMod;
|
||||||
|
CPwmTime LastAccess;
|
||||||
|
CPwmTime Expire;
|
||||||
|
UINT8 *pBinaryData;
|
||||||
|
UINT32 BinaryDataLength;
|
||||||
|
UINT32 PasswordLength;
|
||||||
|
bool ReadEntryField(UINT16 FieldType, UINT32 FieldSize, UINT8 *pData);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
class CGroup{
|
||||||
|
public:
|
||||||
|
CGroup();
|
||||||
|
~CGroup();
|
||||||
|
UINT32 ID;
|
||||||
|
UINT32 ImageID;
|
||||||
|
UINT32 NumEntries;
|
||||||
|
QString Name;
|
||||||
|
CPwmTime Creation;
|
||||||
|
CPwmTime LastMod;
|
||||||
|
CPwmTime LastAccess;
|
||||||
|
CPwmTime Expire;
|
||||||
|
UINT16 Level;
|
||||||
|
UINT32 Flags;
|
||||||
|
bool ReadGroupField(UINT16 FieldType, UINT32 FieldSize, UINT8 *pData);
|
||||||
|
|
||||||
|
bool UI_ItemIsExpanded;
|
||||||
|
static bool UI_ExpandByDefault;
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
typedef vector<CEntry>::iterator EntryItr;
|
||||||
|
typedef vector<CGroup>::iterator GroupItr;
|
||||||
|
|
||||||
|
|
||||||
|
class AbstractDatabase{
|
||||||
|
public:
|
||||||
|
vector<CGroup>Groups;
|
||||||
|
vector<CEntry>Entries;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
class Database:public AbstractDatabase{
|
||||||
|
public:
|
||||||
|
int CryptoAlgorithmus;
|
||||||
|
int KeyEncRounds;
|
||||||
|
QString filename;
|
||||||
|
bool modflag;
|
||||||
|
int SearchGroupID;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
UINT8 MasterKey[32];
|
||||||
|
UINT8 TransformedMasterKey[32];
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
|
@ -0,0 +1,155 @@
|
||||||
|
/***************************************************************************
|
||||||
|
* Copyright (C) 2005 by Tarek Saidi *
|
||||||
|
* mail@tarek-saidi.de *
|
||||||
|
* *
|
||||||
|
* This program is free software; you can redistribute it and/or modify *
|
||||||
|
* it under the terms of the GNU General Public License as published by *
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or *
|
||||||
|
* (at your option) any later version. *
|
||||||
|
* *
|
||||||
|
* 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, write to the *
|
||||||
|
* Free Software Foundation, Inc., *
|
||||||
|
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
|
||||||
|
***************************************************************************/
|
||||||
|
#include "ListViews.h"
|
||||||
|
#include "PwManager.h"
|
||||||
|
#include <qstring.h>
|
||||||
|
#include <qlistview.h>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
GroupItem::GroupItem(CGroup* group, QListView * parent ) : QListViewItem(parent)
|
||||||
|
{
|
||||||
|
pGroup=group;
|
||||||
|
setDropEnabled(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
GroupItem::GroupItem(CGroup* group, QListViewItem * parent ): QListViewItem(parent)
|
||||||
|
{
|
||||||
|
pGroup=group;
|
||||||
|
setDropEnabled(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
GroupItem::GroupItem(CGroup* group, QListView * parent, QListViewItem * after ): QListViewItem(parent,after)
|
||||||
|
{
|
||||||
|
pGroup=group;
|
||||||
|
setDropEnabled(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
GroupItem::GroupItem(CGroup* group, QListViewItem * parent, QListViewItem * after ): QListViewItem(parent,after)
|
||||||
|
{
|
||||||
|
pGroup=group;
|
||||||
|
setDropEnabled(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
GroupItem::GroupItem(CGroup* group, QListView* parent, QString l1,QString l2,QString l3,QString l4,
|
||||||
|
QString l5,QString l6,QString l7,QString l8)
|
||||||
|
:QListViewItem(parent,l1,l2,l3,l4,l5,l6,l7,l8)
|
||||||
|
{
|
||||||
|
pGroup=group;
|
||||||
|
setDropEnabled(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
GroupItem::GroupItem(CGroup* group, QListViewItem* parent, QString l1,QString l2,QString l3,QString l4,
|
||||||
|
QString l5,QString l6,QString l7,QString l8)
|
||||||
|
:QListViewItem(parent,l1,l2,l3,l4,l5,l6,l7,l8)
|
||||||
|
{
|
||||||
|
pGroup=group;
|
||||||
|
setDropEnabled(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
GroupItem::GroupItem(CGroup* group, QListView* parent,QListViewItem* after, QString l1,QString l2,QString l3,QString l4,
|
||||||
|
QString l5,QString l6,QString l7,QString l8)
|
||||||
|
:QListViewItem(parent,after,l1,l2,l3,l4,l5,l6,l7,l8)
|
||||||
|
{
|
||||||
|
pGroup=group;
|
||||||
|
setDropEnabled(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
GroupItem::GroupItem(CGroup* group, QListViewItem* parent,QListViewItem* after, QString l1,QString l2,QString l3,QString l4,
|
||||||
|
QString l5,QString l6,QString l7,QString l8)
|
||||||
|
:QListViewItem(parent,after,l1,l2,l3,l4,l5,l6,l7,l8)
|
||||||
|
{
|
||||||
|
pGroup=group;
|
||||||
|
setDropEnabled(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
GroupItem::~GroupItem(){}
|
||||||
|
|
||||||
|
|
||||||
|
bool GroupItem::acceptDrop(const QMimeSource* mime){
|
||||||
|
qDebug("DropEvent\n");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
///////////////////////////////
|
||||||
|
|
||||||
|
EntryItem::EntryItem(CEntry* entry, QListView * parent ) : QListViewItem(parent)
|
||||||
|
{
|
||||||
|
pEntry=entry;
|
||||||
|
setDragEnabled(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
EntryItem::EntryItem(CEntry* entry, QListViewItem * parent ): QListViewItem(parent)
|
||||||
|
{
|
||||||
|
pEntry=entry;
|
||||||
|
setDragEnabled(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
EntryItem::EntryItem(CEntry* entry, QListView * parent, QListViewItem * after ): QListViewItem(parent,after)
|
||||||
|
{
|
||||||
|
pEntry=entry;
|
||||||
|
setDragEnabled(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
EntryItem::EntryItem(CEntry* entry, QListViewItem * parent, QListViewItem * after ): QListViewItem(parent,after)
|
||||||
|
{
|
||||||
|
pEntry=entry;
|
||||||
|
setDragEnabled(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
EntryItem::EntryItem(CEntry* entry, QListView* parent, QString l1,QString l2,QString l3,QString l4,
|
||||||
|
QString l5,QString l6,QString l7,QString l8)
|
||||||
|
:QListViewItem(parent,l1,l2,l3,l4,l5,l6,l7,l8)
|
||||||
|
{
|
||||||
|
pEntry=entry;
|
||||||
|
setDragEnabled(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
EntryItem::EntryItem(CEntry* entry, QListViewItem* parent, QString l1,QString l2,QString l3,QString l4,
|
||||||
|
QString l5,QString l6,QString l7,QString l8)
|
||||||
|
:QListViewItem(parent,l1,l2,l3,l4,l5,l6,l7,l8)
|
||||||
|
{
|
||||||
|
pEntry=entry;
|
||||||
|
setDragEnabled(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
EntryItem::EntryItem(CEntry* entry, QListView* parent,QListViewItem* after, QString l1,QString l2,QString l3,QString l4,
|
||||||
|
QString l5,QString l6,QString l7,QString l8)
|
||||||
|
:QListViewItem(parent,after,l1,l2,l3,l4,l5,l6,l7,l8)
|
||||||
|
{
|
||||||
|
pEntry=entry;
|
||||||
|
setDragEnabled(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
EntryItem::EntryItem(CEntry* entry, QListViewItem* parent,QListViewItem* after, QString l1,QString l2,QString l3,QString l4,
|
||||||
|
QString l5,QString l6,QString l7,QString l8)
|
||||||
|
:QListViewItem(parent,after,l1,l2,l3,l4,l5,l6,l7,l8)
|
||||||
|
{
|
||||||
|
pEntry=entry;
|
||||||
|
setDragEnabled(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
CGroupView::CGroupView(QWidget * parent, const char * name, WFlags f):QListView(parent,name,f){
|
||||||
|
|
||||||
|
};
|
|
@ -0,0 +1,108 @@
|
||||||
|
/***************************************************************************
|
||||||
|
* Copyright (C) 2005 by Tarek Saidi *
|
||||||
|
* mail@tarek-saidi.de *
|
||||||
|
* *
|
||||||
|
* This program is free software; you can redistribute it and/or modify *
|
||||||
|
* it under the terms of the GNU General Public License as published by *
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or *
|
||||||
|
* (at your option) any later version. *
|
||||||
|
* *
|
||||||
|
* 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, write to the *
|
||||||
|
* Free Software Foundation, Inc., *
|
||||||
|
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
|
||||||
|
***************************************************************************/
|
||||||
|
#ifndef _LISTVIEWS_H_
|
||||||
|
#define _LISTVIEWS_H_
|
||||||
|
|
||||||
|
#include <qlistview.h>
|
||||||
|
#include <qmime.h>
|
||||||
|
#include "PwManager.h"
|
||||||
|
|
||||||
|
class GroupItem: public QListViewItem{
|
||||||
|
public:
|
||||||
|
CGroup* pGroup;
|
||||||
|
virtual bool acceptDrop(const QMimeSource * mime);
|
||||||
|
///////////////////////////////////////////////////////////////////////
|
||||||
|
GroupItem(CGroup*, QListView * parent );
|
||||||
|
GroupItem(CGroup*, QListViewItem * parent );
|
||||||
|
GroupItem(CGroup*, QListView * parent, QListViewItem * after );
|
||||||
|
GroupItem(CGroup*, QListViewItem * parent, QListViewItem * after );
|
||||||
|
|
||||||
|
GroupItem(CGroup*, QListView * parent,
|
||||||
|
QString, QString = QString::null,
|
||||||
|
QString = QString::null, QString = QString::null,
|
||||||
|
QString = QString::null, QString = QString::null,
|
||||||
|
QString = QString::null, QString = QString::null );
|
||||||
|
|
||||||
|
GroupItem(CGroup*, QListViewItem * parent,
|
||||||
|
QString, QString = QString::null,
|
||||||
|
QString = QString::null, QString = QString::null,
|
||||||
|
QString = QString::null, QString = QString::null,
|
||||||
|
QString = QString::null, QString = QString::null );
|
||||||
|
|
||||||
|
GroupItem(CGroup*, QListView * parent, QListViewItem * after,
|
||||||
|
QString, QString = QString::null,
|
||||||
|
QString = QString::null, QString = QString::null,
|
||||||
|
QString = QString::null, QString = QString::null,
|
||||||
|
QString = QString::null, QString = QString::null );
|
||||||
|
|
||||||
|
GroupItem(CGroup*, QListViewItem * parent, QListViewItem * after,
|
||||||
|
QString, QString = QString::null,
|
||||||
|
QString = QString::null, QString = QString::null,
|
||||||
|
QString = QString::null, QString = QString::null,
|
||||||
|
QString = QString::null, QString = QString::null );
|
||||||
|
~GroupItem();
|
||||||
|
/////////////////////////////////////////////////////////////////////////
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
class EntryItem: public QListViewItem{
|
||||||
|
public:
|
||||||
|
CEntry* pEntry;
|
||||||
|
///////////////////////////////////////////////////////////////////////
|
||||||
|
EntryItem(CEntry*, QListView * parent );
|
||||||
|
EntryItem(CEntry*, QListViewItem * parent );
|
||||||
|
EntryItem(CEntry*, QListView * parent, QListViewItem * after );
|
||||||
|
EntryItem(CEntry*, QListViewItem * parent, QListViewItem * after );
|
||||||
|
|
||||||
|
EntryItem(CEntry*, QListView * parent,
|
||||||
|
QString, QString = QString::null,
|
||||||
|
QString = QString::null, QString = QString::null,
|
||||||
|
QString = QString::null, QString = QString::null,
|
||||||
|
QString = QString::null, QString = QString::null );
|
||||||
|
|
||||||
|
EntryItem(CEntry*, QListViewItem * parent,
|
||||||
|
QString, QString = QString::null,
|
||||||
|
QString = QString::null, QString = QString::null,
|
||||||
|
QString = QString::null, QString = QString::null,
|
||||||
|
QString = QString::null, QString = QString::null );
|
||||||
|
|
||||||
|
EntryItem(CEntry*, QListView * parent, QListViewItem * after,
|
||||||
|
QString, QString = QString::null,
|
||||||
|
QString = QString::null, QString = QString::null,
|
||||||
|
QString = QString::null, QString = QString::null,
|
||||||
|
QString = QString::null, QString = QString::null );
|
||||||
|
|
||||||
|
EntryItem(CEntry*, QListViewItem * parent, QListViewItem * after,
|
||||||
|
QString, QString = QString::null,
|
||||||
|
QString = QString::null, QString = QString::null,
|
||||||
|
QString = QString::null, QString = QString::null,
|
||||||
|
QString = QString::null, QString = QString::null );
|
||||||
|
/////////////////////////////////////////////////////////////////////////
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
class CGroupView: public QListView{
|
||||||
|
public:
|
||||||
|
CGroupView(QWidget * parent = 0, const char * name = 0, WFlags f = 0 );
|
||||||
|
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
|
@ -0,0 +1,915 @@
|
||||||
|
/***************************************************************************
|
||||||
|
* Copyright (C) 2005 by Tarek Saidi *
|
||||||
|
* tarek@linux *
|
||||||
|
* *
|
||||||
|
* This program is free software; you can redistribute it and/or modify *
|
||||||
|
* it under the terms of the GNU General Public License as published by *
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or *
|
||||||
|
* (at your option) any later version. *
|
||||||
|
* *
|
||||||
|
* 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, write to the *
|
||||||
|
* Free Software Foundation, Inc., *
|
||||||
|
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
|
#include <iostream.h>
|
||||||
|
#include <time.h>
|
||||||
|
#include <qfile.h>
|
||||||
|
#include <qstringlist.h>
|
||||||
|
#include <qobject.h>
|
||||||
|
#include <qdatetime.h>
|
||||||
|
#include "crypto/sha256.h"
|
||||||
|
#include "crypto/rijndael.h"
|
||||||
|
#include "crypto/twoclass.h"
|
||||||
|
#include "lib/random.h"
|
||||||
|
|
||||||
|
#include "PwManager.h"
|
||||||
|
|
||||||
|
bool PwDatabase::loadDatabase(QString _filename, QString& err){
|
||||||
|
unsigned long total_size,crypto_size;
|
||||||
|
UINT32 Signature1,Signature2,Version,NumGroups,NumEntries,Flags;
|
||||||
|
UINT8 TrafoRandomSeed[32];
|
||||||
|
UINT8 FinalRandomSeed[16];
|
||||||
|
UINT8 ContentsHash[32];
|
||||||
|
UINT8 EncryptionIV[16];
|
||||||
|
|
||||||
|
filename=_filename;
|
||||||
|
QFile file(filename);
|
||||||
|
file.open(IO_ReadOnly);
|
||||||
|
total_size=file.size();
|
||||||
|
char* buffer = new char[total_size];
|
||||||
|
file.readBlock(buffer,total_size);
|
||||||
|
file.close();
|
||||||
|
|
||||||
|
if(total_size < DB_HEADER_SIZE){
|
||||||
|
err=trUtf8("Unerwartete Dateigröße (Dateigröße < DB_HEADER_SIZE)");
|
||||||
|
return false; }
|
||||||
|
|
||||||
|
memcpy(&Signature1,buffer,4);
|
||||||
|
memcpy(&Signature2,buffer+4,4);
|
||||||
|
memcpy(&Flags,buffer+8,4);
|
||||||
|
memcpy(&Version,buffer+12,4);
|
||||||
|
memcpy(FinalRandomSeed,buffer+16,16);
|
||||||
|
memcpy(EncryptionIV,buffer+32,16);
|
||||||
|
memcpy(&NumGroups,buffer+48,4);
|
||||||
|
memcpy(&NumEntries,buffer+52,4);
|
||||||
|
memcpy(ContentsHash,buffer+56,32);
|
||||||
|
memcpy(TrafoRandomSeed,buffer+88,32);
|
||||||
|
memcpy(&KeyEncRounds,buffer+120,4);
|
||||||
|
|
||||||
|
if((Signature1!=PWM_DBSIG_1) || (Signature2!=PWM_DBSIG_2)){
|
||||||
|
err=trUtf8("Falsche Signatur");
|
||||||
|
return false;}
|
||||||
|
|
||||||
|
|
||||||
|
if((Version & 0xFFFFFF00) != (PWM_DBVER_DW & 0xFFFFFF00)){
|
||||||
|
err=trUtf8("Nicht unterstüzte Dateiversion");
|
||||||
|
return false;}
|
||||||
|
|
||||||
|
if(Flags & PWM_FLAG_RIJNDAEL) CryptoAlgorithmus = ALGO_AES;
|
||||||
|
else if(Flags & PWM_FLAG_TWOFISH) CryptoAlgorithmus = ALGO_TWOFISH;
|
||||||
|
else {
|
||||||
|
err=trUtf8("Unbekannter Verschlüsselungsalgorithmus");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
transformKey(MasterKey,TransformedMasterKey,TrafoRandomSeed,KeyEncRounds);
|
||||||
|
UINT8 FinalKey[32];
|
||||||
|
sha256_context sha32;
|
||||||
|
sha256_starts(&sha32);
|
||||||
|
sha256_update(&sha32,FinalRandomSeed, 16);
|
||||||
|
sha256_update(&sha32,TransformedMasterKey, 32);
|
||||||
|
sha256_finish(&sha32,FinalKey);
|
||||||
|
|
||||||
|
if(CryptoAlgorithmus == ALGO_AES)
|
||||||
|
{
|
||||||
|
Rijndael aes;
|
||||||
|
// Initialize Rijndael algorithm
|
||||||
|
if(aes.init(Rijndael::CBC, Rijndael::Decrypt, FinalKey,
|
||||||
|
Rijndael::Key32Bytes, EncryptionIV) != RIJNDAEL_SUCCESS)
|
||||||
|
{return false;}
|
||||||
|
// Decrypt! The first bytes aren't encrypted (that's the header)
|
||||||
|
crypto_size = (unsigned long)aes.padDecrypt((UINT8 *)buffer + DB_HEADER_SIZE,
|
||||||
|
total_size - DB_HEADER_SIZE, (UINT8 *)buffer + DB_HEADER_SIZE);
|
||||||
|
}
|
||||||
|
else if(CryptoAlgorithmus == ALGO_TWOFISH)
|
||||||
|
{
|
||||||
|
CTwofish twofish;
|
||||||
|
if(twofish.init(FinalKey, 32, EncryptionIV) != true){return false;}
|
||||||
|
crypto_size = (unsigned long)twofish.padDecrypt((UINT8 *)buffer + DB_HEADER_SIZE,
|
||||||
|
total_size - DB_HEADER_SIZE, (UINT8 *)buffer + DB_HEADER_SIZE);
|
||||||
|
}
|
||||||
|
|
||||||
|
if((crypto_size > 2147483446) || (crypto_size == 0)){return false;}
|
||||||
|
|
||||||
|
sha256_starts(&sha32);
|
||||||
|
sha256_update(&sha32,(unsigned char *)buffer + DB_HEADER_SIZE,crypto_size);
|
||||||
|
sha256_finish(&sha32,(unsigned char *)FinalKey);
|
||||||
|
|
||||||
|
if(memcmp(ContentsHash, FinalKey, 32) != 0)
|
||||||
|
{
|
||||||
|
err=trUtf8("Hash-Test fehlgeschlage: der Schlüssl ist falsch oder die Datei ist beschädigt.");
|
||||||
|
return false;}
|
||||||
|
|
||||||
|
|
||||||
|
Groups.resize(NumGroups);
|
||||||
|
Entries.resize(NumEntries);
|
||||||
|
|
||||||
|
unsigned long tmp_id=0;
|
||||||
|
unsigned long pos = DB_HEADER_SIZE;
|
||||||
|
UINT16 FieldType;
|
||||||
|
UINT32 FieldSize;
|
||||||
|
char* pField;
|
||||||
|
bool bRet;
|
||||||
|
|
||||||
|
|
||||||
|
for(unsigned long CurGroup = 0; CurGroup < NumGroups; )
|
||||||
|
{
|
||||||
|
pField = buffer+pos;
|
||||||
|
|
||||||
|
memcpy(&FieldType, pField, 2);
|
||||||
|
pField += 2; pos += 2;
|
||||||
|
if(pos >= total_size) {
|
||||||
|
return false; }
|
||||||
|
|
||||||
|
memcpy(&FieldSize, pField, 4);
|
||||||
|
pField += 4; pos += 4;
|
||||||
|
if(pos >= (total_size + FieldSize)) {
|
||||||
|
return false;}
|
||||||
|
|
||||||
|
bRet = Groups[CurGroup].ReadGroupField(FieldType, FieldSize, (UINT8 *)pField);
|
||||||
|
if((FieldType == 0xFFFF) && (bRet == true)){
|
||||||
|
CurGroup++;} // Now and ONLY now the counter gets increased
|
||||||
|
|
||||||
|
pField += FieldSize;
|
||||||
|
pos += FieldSize;
|
||||||
|
if(pos >= total_size) { return false;}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
for(unsigned long CurEntry = 0; CurEntry < NumEntries;)
|
||||||
|
{
|
||||||
|
pField = buffer+pos;
|
||||||
|
|
||||||
|
memcpy(&FieldType, pField, 2);
|
||||||
|
pField += 2; pos += 2;
|
||||||
|
if(pos >= total_size){
|
||||||
|
return false;}
|
||||||
|
|
||||||
|
memcpy(&FieldSize, pField, 4);
|
||||||
|
pField += 4; pos += 4;
|
||||||
|
if(pos >= (total_size + FieldSize)) {
|
||||||
|
return false; }
|
||||||
|
|
||||||
|
bRet = Entries[CurEntry].ReadEntryField(FieldType,FieldSize,(UINT8*)pField);
|
||||||
|
if((FieldType == 0xFFFF) && (bRet == true)){
|
||||||
|
Entries[CurEntry].sID=tmp_id++;
|
||||||
|
CurEntry++;} // Now and ONLY now the counter gets increased
|
||||||
|
|
||||||
|
pField += FieldSize;
|
||||||
|
pos += FieldSize;
|
||||||
|
if(pos >= total_size) {
|
||||||
|
return false; }
|
||||||
|
}
|
||||||
|
|
||||||
|
unsigned long CurGID, g, e, z, num;
|
||||||
|
delete [] buffer;
|
||||||
|
|
||||||
|
for(vector<CEntry>::iterator i=Entries.begin();i!=Entries.end();i++){
|
||||||
|
if(IsMetaStream(*i)==true){
|
||||||
|
///@TODO Parse Metastreams
|
||||||
|
deleteEntry(i);
|
||||||
|
i--;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void PwDatabase::transformKey(UINT8* src,UINT8* dst,UINT8* KeySeed,int rounds){
|
||||||
|
UINT8* tmp=new UINT8[32];
|
||||||
|
Rijndael rijndael;
|
||||||
|
sha256_context sha2;
|
||||||
|
if(rijndael.init(Rijndael::ECB, Rijndael::Encrypt, (const UINT8 *)KeySeed,
|
||||||
|
Rijndael::Key32Bytes, 0) != RIJNDAEL_SUCCESS){
|
||||||
|
cout << QString("unexpected error in %1, line %2").arg(__FILE__).arg(__LINE__) << endl;
|
||||||
|
exit(1);}
|
||||||
|
|
||||||
|
memcpy(tmp,src,32);
|
||||||
|
for(int i=0;i<rounds;i++){
|
||||||
|
rijndael.blockEncrypt((const UINT8 *)tmp, 256, (UINT8 *)tmp);
|
||||||
|
}
|
||||||
|
|
||||||
|
sha256_starts(&sha2);
|
||||||
|
sha256_update(&sha2,tmp,32);
|
||||||
|
sha256_finish(&sha2,tmp);
|
||||||
|
|
||||||
|
memcpy(dst,tmp,32);
|
||||||
|
delete [] tmp;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool PwDatabase::CalcMasterKeyByPassword(QString& Password){
|
||||||
|
|
||||||
|
unsigned long KeyLen, FileSize, Read;
|
||||||
|
sha256_context sha32;
|
||||||
|
char *paKey = NULL;
|
||||||
|
|
||||||
|
if(Password == QString::null) return false;
|
||||||
|
|
||||||
|
paKey = new char[Password.length() + 1];
|
||||||
|
if(paKey == NULL) return false;
|
||||||
|
strcpy(paKey, Password);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if(paKey == NULL) return false;
|
||||||
|
|
||||||
|
KeyLen = strlen(paKey);
|
||||||
|
|
||||||
|
if(KeyLen == 0) {
|
||||||
|
SecString::overwrite(paKey,Password.length() + 1);
|
||||||
|
delete [] paKey;
|
||||||
|
return false; }
|
||||||
|
|
||||||
|
sha256_starts(&sha32);
|
||||||
|
sha256_update(&sha32,(unsigned char*) paKey, KeyLen);
|
||||||
|
sha256_finish(&sha32,MasterKey);
|
||||||
|
SecString::overwrite(paKey,Password.length() + 1);
|
||||||
|
delete [] paKey;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool PwDatabase::CalcMasterKeyByFile(QString filename){
|
||||||
|
|
||||||
|
QFile file(filename);
|
||||||
|
if(file.open(IO_ReadOnly) == false) return false;
|
||||||
|
unsigned long FileSize=file.size();
|
||||||
|
|
||||||
|
if(FileSize == 32){
|
||||||
|
if(file.readBlock((char*)MasterKey,32) != 32){
|
||||||
|
file.close();
|
||||||
|
return false;}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
sha256_context sha32;
|
||||||
|
sha256_starts(&sha32);
|
||||||
|
unsigned char* buffer = new unsigned char[2048];
|
||||||
|
while(1)
|
||||||
|
{
|
||||||
|
unsigned long read=file.readBlock((char*)buffer,2048);
|
||||||
|
if(read == 0) break;
|
||||||
|
sha256_update(&sha32,buffer,read);
|
||||||
|
if(read != 2048) break;
|
||||||
|
}
|
||||||
|
sha256_finish(&sha32,MasterKey);
|
||||||
|
delete [] buffer;
|
||||||
|
}
|
||||||
|
|
||||||
|
file.close();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
CEntry* PwDatabase::addEntry(){
|
||||||
|
CEntry NewEntry;
|
||||||
|
if(Entries.size()==0){
|
||||||
|
NewEntry.sID=0;
|
||||||
|
getRandomBytes(&NewEntry.ID,16,1,false);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
NewEntry.sID=(*(Entries.end()-1)).sID+1;
|
||||||
|
while(1){
|
||||||
|
bool used=false;
|
||||||
|
getRandomBytes(&NewEntry.ID,16,1,false);
|
||||||
|
for(int j=0;j<Entries.size();j++){
|
||||||
|
int k;
|
||||||
|
for(k=0;k<16;k++){if(Entries[j].ID[k]!=NewEntry.ID[k])k=0;break;}
|
||||||
|
if(k==15)used=true;}
|
||||||
|
if(used==false)break;
|
||||||
|
}}
|
||||||
|
Entries.push_back(NewEntry);
|
||||||
|
return &Entries.back();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool PwDatabase::CalcMasterKeyByFileAndPw(QString filename, QString& Password){
|
||||||
|
UINT8* FileKey;
|
||||||
|
UINT8* PasswordKey;
|
||||||
|
PasswordKey=new UINT8[32];
|
||||||
|
FileKey=new UINT8[32];
|
||||||
|
sha256_context sha32;
|
||||||
|
/////////////////////////
|
||||||
|
QFile file(filename);
|
||||||
|
if(file.open(IO_ReadOnly) == false) return false;
|
||||||
|
unsigned long FileSize=file.size();
|
||||||
|
if(FileSize == 32){
|
||||||
|
if(file.readBlock((char*)FileKey,32) != 32){
|
||||||
|
file.close();
|
||||||
|
return false;}
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
sha256_starts(&sha32);
|
||||||
|
unsigned char* buffer = new unsigned char[2048];
|
||||||
|
while(1)
|
||||||
|
{
|
||||||
|
unsigned long read=file.readBlock((char*)buffer,2048);
|
||||||
|
if(read == 0) break;
|
||||||
|
sha256_update(&sha32,buffer,read);
|
||||||
|
if(read != 2048) break;
|
||||||
|
}
|
||||||
|
sha256_finish(&sha32,FileKey);
|
||||||
|
delete [] buffer;
|
||||||
|
}
|
||||||
|
file.close();
|
||||||
|
|
||||||
|
//////////////////////
|
||||||
|
|
||||||
|
unsigned long KeyLen;
|
||||||
|
char *paKey = NULL;
|
||||||
|
if(Password == QString::null) return false;
|
||||||
|
paKey = new char[Password.length() + 1];
|
||||||
|
if(paKey == NULL) return false;
|
||||||
|
strcpy(paKey, Password);
|
||||||
|
if(paKey == NULL) return false;
|
||||||
|
KeyLen = strlen(paKey);
|
||||||
|
if(KeyLen == 0) {
|
||||||
|
delete [] paKey;
|
||||||
|
return false; }
|
||||||
|
sha256_starts(&sha32);
|
||||||
|
sha256_update(&sha32,(unsigned char*) paKey, KeyLen);
|
||||||
|
sha256_finish(&sha32,PasswordKey);
|
||||||
|
delete [] paKey;
|
||||||
|
////////////////////
|
||||||
|
sha256_starts(&sha32);
|
||||||
|
sha256_update(&sha32,(unsigned char*)PasswordKey,32);
|
||||||
|
sha256_update(&sha32,(unsigned char*)FileKey,32);
|
||||||
|
sha256_finish(&sha32,MasterKey);
|
||||||
|
delete[] PasswordKey;
|
||||||
|
delete[] FileKey;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
vector<CEntry>::iterator PwDatabase::deleteEntry(vector<CEntry>::iterator iterator){
|
||||||
|
return Entries.erase(iterator);
|
||||||
|
}
|
||||||
|
|
||||||
|
vector<CEntry>::iterator PwDatabase::deleteEntry(CEntry* entry){
|
||||||
|
return deleteEntry(getEntryIterator(entry));
|
||||||
|
}
|
||||||
|
|
||||||
|
bool PwDatabase::IsMetaStream(CEntry& p){
|
||||||
|
|
||||||
|
if(p.pBinaryData == NULL) return false;
|
||||||
|
if(p.Additional == NULL) return false;
|
||||||
|
if(p.BinaryDesc == NULL) return false;
|
||||||
|
if(p.BinaryDesc != "bin-stream") return false;
|
||||||
|
if(p.Title == NULL) return false;
|
||||||
|
if(p.Title != "Meta-Info") return false;
|
||||||
|
if(p.UserName == NULL) return false;
|
||||||
|
if(p.UserName != "SYSTEM") return false;
|
||||||
|
if(p.URL == NULL) return false;
|
||||||
|
if(p.URL != "$") return false;
|
||||||
|
if(p.ImageID != 0) return false;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void PwDatabase::moveEntry(CEntry* entry,CGroup* dst){
|
||||||
|
entry->GroupID=dst->ID;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
bool CGroup::ReadGroupField(UINT16 FieldType, UINT32 FieldSize, UINT8 *pData)
|
||||||
|
{
|
||||||
|
|
||||||
|
switch(FieldType)
|
||||||
|
{
|
||||||
|
case 0x0000:
|
||||||
|
// Ignore field
|
||||||
|
break;
|
||||||
|
case 0x0001:
|
||||||
|
memcpy(&ID, pData, 4);
|
||||||
|
break;
|
||||||
|
case 0x0002:
|
||||||
|
//Name.fromUtf8((char*)pData);
|
||||||
|
Name=QString::fromUtf8((char*)pData);
|
||||||
|
break;
|
||||||
|
case 0x0003:
|
||||||
|
Creation.Set(pData);
|
||||||
|
break;
|
||||||
|
case 0x0004:
|
||||||
|
LastMod.Set(pData);
|
||||||
|
break;
|
||||||
|
case 0x0005:
|
||||||
|
LastAccess.Set(pData);
|
||||||
|
break;
|
||||||
|
case 0x0006:
|
||||||
|
Expire.Set(pData);
|
||||||
|
break;
|
||||||
|
case 0x0007:
|
||||||
|
memcpy(&ImageID, pData, 4);
|
||||||
|
break;
|
||||||
|
case 0x0008:
|
||||||
|
memcpy(&Level, pData, 2);
|
||||||
|
break;
|
||||||
|
case 0x0009:
|
||||||
|
memcpy(&Flags, pData, 4);
|
||||||
|
break;
|
||||||
|
case 0xFFFF:
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
return false; // Field unsupported
|
||||||
|
}
|
||||||
|
|
||||||
|
return true; // Field supported
|
||||||
|
}
|
||||||
|
|
||||||
|
PwDatabase::PwDatabase(){
|
||||||
|
SearchGroupID=-1;
|
||||||
|
}
|
||||||
|
|
||||||
|
PwDatabase::~PwDatabase(){
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool CEntry::ReadEntryField(UINT16 FieldType, UINT32 FieldSize, UINT8 *pData){
|
||||||
|
|
||||||
|
|
||||||
|
switch(FieldType)
|
||||||
|
{
|
||||||
|
case 0x0000:
|
||||||
|
// Ignore field
|
||||||
|
break;
|
||||||
|
case 0x0001:
|
||||||
|
memcpy(ID, pData, 16);
|
||||||
|
break;
|
||||||
|
case 0x0002:
|
||||||
|
memcpy(&GroupID, pData, 4);
|
||||||
|
break;
|
||||||
|
case 0x0003:
|
||||||
|
memcpy(&ImageID, pData, 4);
|
||||||
|
break;
|
||||||
|
case 0x0004:
|
||||||
|
//Title=(char*)pData;
|
||||||
|
Title=QString::fromUtf8((char*)pData);
|
||||||
|
break;
|
||||||
|
case 0x0005:
|
||||||
|
URL=QString::fromUtf8((char*)pData);
|
||||||
|
break;
|
||||||
|
case 0x0006:
|
||||||
|
UserName=QString::fromUtf8((char*)pData);
|
||||||
|
break;
|
||||||
|
case 0x0007:{
|
||||||
|
QString s=QString::fromUtf8((char*)pData);
|
||||||
|
Password.setString(s,true);
|
||||||
|
break;}
|
||||||
|
case 0x0008:
|
||||||
|
Additional=QString::fromUtf8((char*)pData);
|
||||||
|
break;
|
||||||
|
case 0x0009:
|
||||||
|
Creation.Set(pData);
|
||||||
|
break;
|
||||||
|
case 0x000A:
|
||||||
|
LastMod.Set(pData);
|
||||||
|
break;
|
||||||
|
case 0x000B:
|
||||||
|
LastAccess.Set(pData);
|
||||||
|
break;
|
||||||
|
case 0x000C:
|
||||||
|
Expire.Set(pData);
|
||||||
|
break;
|
||||||
|
case 0x000D:
|
||||||
|
BinaryDesc=(char*)pData;
|
||||||
|
break;
|
||||||
|
case 0x000E:
|
||||||
|
if(FieldSize != 0)
|
||||||
|
{
|
||||||
|
///@TODO: im Destruktor löschen
|
||||||
|
///@TODO: im Konstruktor auf Null
|
||||||
|
pBinaryData = new UINT8[FieldSize];
|
||||||
|
memcpy(pBinaryData, pData, FieldSize);
|
||||||
|
BinaryDataLength = FieldSize;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{pBinaryData=0;}
|
||||||
|
break;
|
||||||
|
case 0xFFFF:
|
||||||
|
///@TODO: Alle Elemente geladen - Status setzen oder so was
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
return false; // Field unsupported
|
||||||
|
}
|
||||||
|
|
||||||
|
return true; // Field processed
|
||||||
|
}
|
||||||
|
|
||||||
|
bool PwDatabase::CloseDataBase(){
|
||||||
|
Groups.clear();
|
||||||
|
Entries.clear();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool PwDatabase::SaveDataBase(QString filename){
|
||||||
|
CGroup SearchGroup;
|
||||||
|
UINT32 NumGroups,NumEntries,Signature1,Signature2,Flags,Version;
|
||||||
|
UINT8 TrafoRandomSeed[32];
|
||||||
|
UINT8 FinalRandomSeed[16];
|
||||||
|
UINT8 ContentsHash[32];
|
||||||
|
UINT8 EncryptionIV[16];
|
||||||
|
|
||||||
|
if(SearchGroupID!=-1){
|
||||||
|
for(int i=0;i<Groups.size();i++){
|
||||||
|
if(Groups[i].ID==SearchGroupID){
|
||||||
|
SearchGroup=Groups[i];
|
||||||
|
Groups.erase(getGroupIterator(&Groups[i]));}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(filename==QString::null)return false;
|
||||||
|
QFile file(filename);
|
||||||
|
unsigned int FileSize;
|
||||||
|
|
||||||
|
//->Add Metastreams
|
||||||
|
FileSize=DB_HEADER_SIZE;
|
||||||
|
// Get the size of all groups (94 Byte + length of the name string)
|
||||||
|
for(int i = 0; i < Groups.size(); i++){
|
||||||
|
FileSize += 94 + Groups[i].Name.utf8().length()+1;
|
||||||
|
}
|
||||||
|
// Get the size of all entries
|
||||||
|
for(int i = 0; i < Entries.size(); i++){
|
||||||
|
FileSize += 134
|
||||||
|
+Entries[i].Title.utf8().length()+1
|
||||||
|
+Entries[i].UserName.utf8().length()+1
|
||||||
|
+Entries[i].URL.utf8().length()+1
|
||||||
|
+Entries[i].Password.length()+1
|
||||||
|
+Entries[i].Additional.utf8().length()+1
|
||||||
|
+Entries[i].BinaryDesc.utf8().length()+1
|
||||||
|
+Entries[i].BinaryDataLength;}
|
||||||
|
// Round up filesize to 16-byte boundary for Rijndael/Twofish
|
||||||
|
FileSize = (FileSize + 16) - (FileSize % 16);
|
||||||
|
char* buffer=new char[FileSize+16];
|
||||||
|
|
||||||
|
|
||||||
|
Signature1 = PWM_DBSIG_1;
|
||||||
|
Signature2 = PWM_DBSIG_2;
|
||||||
|
Flags = PWM_FLAG_SHA2;
|
||||||
|
if(CryptoAlgorithmus == ALGO_AES) Flags |= PWM_FLAG_RIJNDAEL;
|
||||||
|
else if(CryptoAlgorithmus == ALGO_TWOFISH) Flags |= PWM_FLAG_TWOFISH;
|
||||||
|
Version = PWM_DBVER_DW;
|
||||||
|
NumGroups = Groups.size(); //-> (+MetaStreams)
|
||||||
|
NumEntries = Entries.size();
|
||||||
|
|
||||||
|
getRandomBytes(FinalRandomSeed,1,16,false);
|
||||||
|
getRandomBytes(TrafoRandomSeed,1,32,false);
|
||||||
|
getRandomBytes(EncryptionIV,1,16,false);
|
||||||
|
|
||||||
|
UINT16 FieldType;
|
||||||
|
UINT32 FieldSize;
|
||||||
|
int pos=DB_HEADER_SIZE; // Skip the header, it will be written later
|
||||||
|
|
||||||
|
for(int i=0; i < Groups.size(); i++){
|
||||||
|
FieldType = 0x0001; FieldSize = 4;
|
||||||
|
memcpy(buffer+pos, &FieldType, 2); pos += 2;
|
||||||
|
memcpy(buffer+pos, &FieldSize, 4); pos += 4;
|
||||||
|
memcpy(buffer+pos, &Groups[i].ID, 4); pos += 4;
|
||||||
|
|
||||||
|
FieldType = 0x0002; FieldSize = Groups[i].Name.utf8().length() + 1;
|
||||||
|
memcpy(buffer+pos, &FieldType, 2); pos += 2;
|
||||||
|
memcpy(buffer+pos, &FieldSize, 4); pos += 4;
|
||||||
|
memcpy(buffer+pos, Groups[i].Name.utf8(),FieldSize); pos += FieldSize;
|
||||||
|
|
||||||
|
FieldType = 0x0003; FieldSize = 5;
|
||||||
|
memcpy(buffer+pos, &FieldType, 2); pos += 2;
|
||||||
|
memcpy(buffer+pos, &FieldSize, 4); pos += 4;
|
||||||
|
Groups[i].Creation.GetPackedTime((unsigned char*)buffer+pos);pos += 5;
|
||||||
|
|
||||||
|
FieldType = 0x0004; FieldSize = 5;
|
||||||
|
memcpy(buffer+pos, &FieldType, 2); pos += 2;
|
||||||
|
memcpy(buffer+pos, &FieldSize, 4); pos += 4;
|
||||||
|
Groups[i].LastMod.GetPackedTime((unsigned char*)buffer+pos);pos += 5;
|
||||||
|
|
||||||
|
FieldType = 0x0005; FieldSize = 5;
|
||||||
|
memcpy(buffer+pos, &FieldType, 2); pos += 2;
|
||||||
|
memcpy(buffer+pos, &FieldSize, 4); pos += 4;
|
||||||
|
Groups[i].LastAccess.GetPackedTime((unsigned char*)buffer+pos);pos += 5;
|
||||||
|
|
||||||
|
FieldType = 0x0006; FieldSize = 5;
|
||||||
|
memcpy(buffer+pos, &FieldType, 2); pos += 2;
|
||||||
|
memcpy(buffer+pos, &FieldSize, 4); pos += 4;
|
||||||
|
Groups[i].Expire.GetPackedTime((unsigned char*)buffer+pos);pos += 5;
|
||||||
|
|
||||||
|
FieldType = 0x0007; FieldSize = 4;
|
||||||
|
memcpy(buffer+pos, &FieldType, 2); pos += 2;
|
||||||
|
memcpy(buffer+pos, &FieldSize, 4); pos += 4;
|
||||||
|
memcpy(buffer+pos, &Groups[i].ImageID, 4); pos += 4;
|
||||||
|
|
||||||
|
FieldType = 0x0008; FieldSize = 2;
|
||||||
|
memcpy(buffer+pos, &FieldType, 2); pos += 2;
|
||||||
|
memcpy(buffer+pos, &FieldSize, 4); pos += 4;
|
||||||
|
memcpy(buffer+pos, &Groups[i].Level, 2); pos += 2;
|
||||||
|
|
||||||
|
FieldType = 0x0009; FieldSize = 4;
|
||||||
|
memcpy(buffer+pos, &FieldType, 2); pos += 2;
|
||||||
|
memcpy(buffer+pos, &FieldSize, 4); pos += 4;
|
||||||
|
memcpy(buffer+pos, &Groups[i].Flags, 4); pos += 4;
|
||||||
|
|
||||||
|
FieldType = 0xFFFF; FieldSize = 0;
|
||||||
|
memcpy(buffer+pos, &FieldType, 2); pos += 2;
|
||||||
|
memcpy(buffer+pos, &FieldSize, 4); pos += 4;
|
||||||
|
}
|
||||||
|
|
||||||
|
for(int i = 0; i < Entries.size(); i++){
|
||||||
|
FieldType = 0x0001; FieldSize = 16;
|
||||||
|
memcpy(buffer+pos, &FieldType, 2); pos += 2;
|
||||||
|
memcpy(buffer+pos, &FieldSize, 4); pos += 4;
|
||||||
|
memcpy(buffer+pos, &Entries[i].ID, 16); pos += 16;
|
||||||
|
|
||||||
|
FieldType = 0x0002; FieldSize = 4;
|
||||||
|
memcpy(buffer+pos, &FieldType, 2); pos += 2;
|
||||||
|
memcpy(buffer+pos, &FieldSize, 4); pos += 4;
|
||||||
|
memcpy(buffer+pos, &Entries[i].GroupID, 4); pos += 4;
|
||||||
|
|
||||||
|
FieldType = 0x0003; FieldSize = 4;
|
||||||
|
memcpy(buffer+pos, &FieldType, 2); pos += 2;
|
||||||
|
memcpy(buffer+pos, &FieldSize, 4); pos += 4;
|
||||||
|
memcpy(buffer+pos, &Entries[i].ImageID, 4); pos += 4;
|
||||||
|
|
||||||
|
|
||||||
|
FieldType = 0x0004;
|
||||||
|
FieldSize = Entries[i].Title.utf8().length() + 1; // Add terminating NULL character space
|
||||||
|
memcpy(buffer+pos, &FieldType, 2); pos += 2;
|
||||||
|
memcpy(buffer+pos, &FieldSize, 4); pos += 4;
|
||||||
|
memcpy(buffer+pos, Entries[i].Title.utf8(),FieldSize); pos += FieldSize;
|
||||||
|
|
||||||
|
FieldType = 0x0005;
|
||||||
|
FieldSize = Entries[i].URL.utf8().length() + 1; // Add terminating NULL character space
|
||||||
|
memcpy(buffer+pos, &FieldType, 2); pos += 2;
|
||||||
|
memcpy(buffer+pos, &FieldSize, 4); pos += 4;
|
||||||
|
memcpy(buffer+pos, Entries[i].URL.utf8(),FieldSize); pos += FieldSize;
|
||||||
|
|
||||||
|
FieldType = 0x0006;
|
||||||
|
FieldSize = Entries[i].UserName.utf8().length() + 1; // Add terminating NULL character space
|
||||||
|
memcpy(buffer+pos, &FieldType, 2); pos += 2;
|
||||||
|
memcpy(buffer+pos, &FieldSize, 4); pos += 4;
|
||||||
|
memcpy(buffer+pos, Entries[i].UserName.utf8(),FieldSize); pos += FieldSize;
|
||||||
|
|
||||||
|
FieldType = 0x0007;
|
||||||
|
FieldSize = Entries[i].Password.length() + 1; // Add terminating NULL character space
|
||||||
|
memcpy(buffer+pos, &FieldType, 2); pos += 2;
|
||||||
|
memcpy(buffer+pos, &FieldSize, 4); pos += 4;
|
||||||
|
memcpy(buffer+pos, Entries[i].Password.getString(),FieldSize); pos += FieldSize;
|
||||||
|
Entries[i].Password.delRef();
|
||||||
|
|
||||||
|
FieldType = 0x0008;
|
||||||
|
FieldSize = Entries[i].Additional.utf8().length() + 1; // Add terminating NULL character space
|
||||||
|
memcpy(buffer+pos, &FieldType, 2); pos += 2;
|
||||||
|
memcpy(buffer+pos, &FieldSize, 4); pos += 4;
|
||||||
|
memcpy(buffer+pos, Entries[i].Additional.utf8(),FieldSize); pos += FieldSize;
|
||||||
|
|
||||||
|
FieldType = 0x0009; FieldSize = 5;
|
||||||
|
memcpy(buffer+pos, &FieldType, 2); pos += 2;
|
||||||
|
memcpy(buffer+pos, &FieldSize, 4); pos += 4;
|
||||||
|
Entries[i].Creation.GetPackedTime((unsigned char*)buffer+pos); pos+=5;
|
||||||
|
|
||||||
|
|
||||||
|
FieldType = 0x000A; FieldSize = 5;
|
||||||
|
memcpy(buffer+pos, &FieldType, 2); pos += 2;
|
||||||
|
memcpy(buffer+pos, &FieldSize, 4); pos += 4;
|
||||||
|
Entries[i].LastMod.GetPackedTime((unsigned char*)buffer+pos); pos+=5;
|
||||||
|
|
||||||
|
FieldType = 0x000B; FieldSize = 5;
|
||||||
|
memcpy(buffer+pos, &FieldType, 2); pos += 2;
|
||||||
|
memcpy(buffer+pos, &FieldSize, 4); pos += 4;
|
||||||
|
Entries[i].LastAccess.GetPackedTime((unsigned char*)buffer+pos); pos+=5;
|
||||||
|
|
||||||
|
FieldType = 0x000C; FieldSize = 5;
|
||||||
|
memcpy(buffer+pos, &FieldType, 2); pos += 2;
|
||||||
|
memcpy(buffer+pos, &FieldSize, 4); pos += 4;
|
||||||
|
Entries[i].Expire.GetPackedTime((unsigned char*)buffer+pos); pos+=5;
|
||||||
|
|
||||||
|
FieldType = 0x000D;
|
||||||
|
FieldSize = Entries[i].BinaryDesc.utf8().length() + 1; // Add terminating NULL character space
|
||||||
|
memcpy(buffer+pos, &FieldType, 2); pos += 2;
|
||||||
|
memcpy(buffer+pos, &FieldSize, 4); pos += 4;
|
||||||
|
memcpy(buffer+pos, Entries[i].BinaryDesc.utf8(),FieldSize); pos += FieldSize;
|
||||||
|
|
||||||
|
FieldType = 0x000E; FieldSize = Entries[i].BinaryDataLength;
|
||||||
|
memcpy(buffer+pos, &FieldType, 2); pos += 2;
|
||||||
|
memcpy(buffer+pos, &FieldSize, 4); pos += 4;
|
||||||
|
if((Entries[i].pBinaryData != NULL) && (FieldSize != 0))
|
||||||
|
memcpy(buffer+pos, Entries[i].pBinaryData, FieldSize);
|
||||||
|
pos += FieldSize;
|
||||||
|
|
||||||
|
FieldType = 0xFFFF; FieldSize = 0;
|
||||||
|
memcpy(buffer+pos, &FieldType, 2); pos += 2;
|
||||||
|
memcpy(buffer+pos, &FieldSize, 4); pos += 4;
|
||||||
|
}
|
||||||
|
sha256_context context;
|
||||||
|
sha256_starts(&context);
|
||||||
|
sha256_update(&context,(unsigned char*)buffer+DB_HEADER_SIZE, pos - DB_HEADER_SIZE);
|
||||||
|
sha256_finish(&context,(unsigned char*)ContentsHash);
|
||||||
|
memcpy(buffer,&Signature1,4);
|
||||||
|
memcpy(buffer+4,&Signature2,4);
|
||||||
|
memcpy(buffer+8,&Flags,4);
|
||||||
|
memcpy(buffer+12,&Version,4);
|
||||||
|
memcpy(buffer+16,FinalRandomSeed,16);
|
||||||
|
memcpy(buffer+32,EncryptionIV,16);
|
||||||
|
memcpy(buffer+48,&NumGroups,4);
|
||||||
|
memcpy(buffer+52,&NumEntries,4);
|
||||||
|
memcpy(buffer+56,ContentsHash,32);
|
||||||
|
memcpy(buffer+88,TrafoRandomSeed,32);
|
||||||
|
memcpy(buffer+120,&KeyEncRounds,4);
|
||||||
|
transformKey(MasterKey,TransformedMasterKey,TrafoRandomSeed,KeyEncRounds);
|
||||||
|
UINT8 FinalKey[32];
|
||||||
|
sha256_starts(&context);
|
||||||
|
sha256_update(&context,FinalRandomSeed, 16);
|
||||||
|
sha256_update(&context,TransformedMasterKey, 32);
|
||||||
|
sha256_finish(&context,FinalKey);
|
||||||
|
|
||||||
|
unsigned long EncryptedPartSize;
|
||||||
|
|
||||||
|
if(CryptoAlgorithmus == ALGO_AES){
|
||||||
|
Rijndael aes;
|
||||||
|
// Initialize Rijndael/AES
|
||||||
|
if(aes.init(Rijndael::CBC, Rijndael::Encrypt, FinalKey,Rijndael::Key32Bytes, EncryptionIV) != RIJNDAEL_SUCCESS){
|
||||||
|
//TODO:ERR_MSG
|
||||||
|
delete [] buffer;
|
||||||
|
return false;}
|
||||||
|
EncryptedPartSize = (unsigned long)aes.padEncrypt((UINT8*)buffer+DB_HEADER_SIZE,
|
||||||
|
pos - DB_HEADER_SIZE,
|
||||||
|
(UINT8*)buffer+DB_HEADER_SIZE);
|
||||||
|
}else if(CryptoAlgorithmus == ALGO_TWOFISH){
|
||||||
|
CTwofish twofish;
|
||||||
|
if(twofish.init(FinalKey, 32, EncryptionIV) == false){
|
||||||
|
//TODO:ERR_MSG
|
||||||
|
delete [] buffer;
|
||||||
|
return false;}
|
||||||
|
EncryptedPartSize = (unsigned long)twofish.padEncrypt((UINT8*)buffer+DB_HEADER_SIZE,
|
||||||
|
pos - DB_HEADER_SIZE,
|
||||||
|
(UINT8*)buffer+DB_HEADER_SIZE);
|
||||||
|
}
|
||||||
|
|
||||||
|
if((EncryptedPartSize > 2147483446) || (EncryptedPartSize == 0)){
|
||||||
|
//TODO:ERR_MSG
|
||||||
|
delete [] buffer;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(file.open(IO_ReadWrite | IO_Truncate)==false){
|
||||||
|
//TODO:ERR_MSG
|
||||||
|
delete [] buffer;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(file.writeBlock(buffer,EncryptedPartSize+DB_HEADER_SIZE)!=EncryptedPartSize+DB_HEADER_SIZE){
|
||||||
|
//TODO:ERR_MSG
|
||||||
|
file.close();
|
||||||
|
delete [] buffer;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
file.close();
|
||||||
|
delete [] buffer;
|
||||||
|
if(SearchGroupID!=-1)Groups.push_back(SearchGroup);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool PwDatabase::NewDataBase(){
|
||||||
|
filename="";
|
||||||
|
SearchGroupID=-1;
|
||||||
|
CryptoAlgorithmus=ALGO_AES;
|
||||||
|
KeyEncRounds=6000;
|
||||||
|
|
||||||
|
CGroup g;
|
||||||
|
g.ID=1;
|
||||||
|
g.Name=QObject::trUtf8("Standardgruppe");
|
||||||
|
Groups.push_back(g);
|
||||||
|
}
|
||||||
|
|
||||||
|
GroupItr PwDatabase::getGroupIterator(CGroup* pGroup){
|
||||||
|
//for(vector<CGroup>::iterator i=Groups.begin();i!=Groups.end();i++){
|
||||||
|
//if((*i).ID==pGroup->ID)return i;}
|
||||||
|
return Groups.begin()+(pGroup-&Groups[0]);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
EntryItr PwDatabase::getEntryIterator(CEntry* pEntry){
|
||||||
|
return Entries.begin()+(pEntry-&Entries[0]);
|
||||||
|
}
|
||||||
|
|
||||||
|
CGroup* PwDatabase::addGroup(CGroup* parent){
|
||||||
|
CGroup group;
|
||||||
|
if(parent)group.Level=parent->Level+1;
|
||||||
|
group.ImageID=0;
|
||||||
|
group.ID=getNewGroupId();
|
||||||
|
|
||||||
|
if(!Groups.size() || !parent){
|
||||||
|
Groups.push_back(group);
|
||||||
|
return &Groups.back();
|
||||||
|
}
|
||||||
|
else { GroupItr groupIt;
|
||||||
|
groupIt=Groups.insert(getGroupIterator(parent)+1,group);
|
||||||
|
return &(*groupIt);}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
GroupItr PwDatabase::deleteGroup(unsigned long id){
|
||||||
|
for(int i=0;i<Groups.size();i++){
|
||||||
|
if(Groups[i].ID==id) return deleteGroup(&Groups[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
GroupItr PwDatabase::deleteGroup(CGroup* group){
|
||||||
|
GroupItr first=getGroupIterator(group);
|
||||||
|
GroupItr last=Groups.end();
|
||||||
|
for(GroupItr i=getGroupIterator(group)+1; i!=Groups.end();i++){
|
||||||
|
if((*i).Level<=group->Level){
|
||||||
|
last=i;
|
||||||
|
break;}
|
||||||
|
}
|
||||||
|
|
||||||
|
for(GroupItr g=first;g!=last;g++){
|
||||||
|
for(EntryItr e=Entries.begin();e!=Entries.end();){
|
||||||
|
if((*g).ID==(*e).GroupID)e=deleteEntry(e);
|
||||||
|
else e++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return Groups.erase(first,last);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
int PwDatabase::getGroupIndex(unsigned long ID){
|
||||||
|
int i=0;
|
||||||
|
for(i;i<Groups.size();i++){
|
||||||
|
if(Groups[i].ID==ID)break;
|
||||||
|
}
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void PwDatabase::merge(PwDatabase* db){
|
||||||
|
for(int i=0;i<db->Groups.size();i++){
|
||||||
|
int NewGroupID;
|
||||||
|
if(isGroupIdInUse(db->Groups[i].ID)==true) NewGroupID=getNewGroupId();
|
||||||
|
else NewGroupID=db->Groups[i].ID;
|
||||||
|
for(int j=0;j<db->Entries.size();j++){
|
||||||
|
if(db->Entries[j].GroupID==db->Groups[i].ID){
|
||||||
|
Entries.push_back(db->Entries[j]);
|
||||||
|
Entries.back().GroupID=NewGroupID;
|
||||||
|
Entries.back().sID=getNewEntrySid();}
|
||||||
|
}
|
||||||
|
Groups.push_back(db->Groups[i]);
|
||||||
|
Groups.back().ID=NewGroupID;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bool PwDatabase::isGroupIdInUse(UINT32 id){
|
||||||
|
for(int i=0;i<Groups.size();i++)
|
||||||
|
if(Groups[i].ID==id)return true;
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool PwDatabase::isEntrySidInUse(UINT32 sid){
|
||||||
|
for(int i=0;i<Entries.size();i++)
|
||||||
|
if(Entries[i].sID==sid)return true;
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
UINT32 PwDatabase::getNewGroupId(){
|
||||||
|
UINT32 id;
|
||||||
|
bool used;
|
||||||
|
while(1){
|
||||||
|
used=false;
|
||||||
|
getRandomBytes(&id,4,1,false);
|
||||||
|
if(!id)continue; //darf nicht 0 sein (KDB-Format v3)
|
||||||
|
for(int j=0;j<Groups.size();j++){
|
||||||
|
if(Groups[j].ID==id)used=true;}
|
||||||
|
if(used==false)break;}
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
|
UINT32 PwDatabase::getNewEntrySid(){
|
||||||
|
UINT32 sid;
|
||||||
|
while(1){
|
||||||
|
getRandomBytes(&sid,4,1,false);
|
||||||
|
if(!sid)continue;
|
||||||
|
if(!isEntrySidInUse(sid))break;
|
||||||
|
}
|
||||||
|
return sid;
|
||||||
|
}
|
|
@ -0,0 +1,79 @@
|
||||||
|
/***************************************************************************
|
||||||
|
* Copyright (C) 2005 by Tarek Saidi *
|
||||||
|
* tarek.saidi@arcor.de *
|
||||||
|
* *
|
||||||
|
* This program is free software; you can redistribute it and/or modify *
|
||||||
|
* it under the terms of the GNU General Public License as published by *
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or *
|
||||||
|
* (at your option) any later version. *
|
||||||
|
* *
|
||||||
|
* 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, write to the *
|
||||||
|
* Free Software Foundation, Inc., *
|
||||||
|
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
|
||||||
|
***************************************************************************/
|
||||||
|
#ifndef _PW_MANAGER_H_
|
||||||
|
#define _PW_MANAGER_H_
|
||||||
|
#define DB_HEADER_SIZE 124
|
||||||
|
#define PWM_DBSIG_1 0x9AA2D903
|
||||||
|
#define PWM_DBSIG_2 0xB54BFB65
|
||||||
|
#define PWM_DBVER_DW 0x00030002
|
||||||
|
#define PWM_FLAG_SHA2 1
|
||||||
|
#define PWM_FLAG_RIJNDAEL 2
|
||||||
|
#define PWM_FLAG_ARCFOUR 4
|
||||||
|
#define PWM_FLAG_TWOFISH 8
|
||||||
|
#define PWM_STD_KEYENCROUNDS 6000
|
||||||
|
#define ALGO_AES 0
|
||||||
|
#define ALGO_TWOFISH 1
|
||||||
|
#define KEEPASS_VERSION "0.1.2"
|
||||||
|
|
||||||
|
#include <qcolor.h>
|
||||||
|
#include <qobject.h>
|
||||||
|
#include "lib/SecString.h"
|
||||||
|
#include "lib/PwmTime.h"
|
||||||
|
#include "Database.h"
|
||||||
|
|
||||||
|
|
||||||
|
class PwDatabase:QObject,public Database{
|
||||||
|
Q_OBJECT
|
||||||
|
public:
|
||||||
|
PwDatabase();
|
||||||
|
~ PwDatabase();
|
||||||
|
bool loadDatabase(QString filename, QString& err);
|
||||||
|
bool SaveDataBase(QString filename);
|
||||||
|
bool NewDataBase();
|
||||||
|
bool CloseDataBase();
|
||||||
|
bool CalcMasterKeyByPassword(QString& password);
|
||||||
|
bool CalcMasterKeyByFile(QString filename);
|
||||||
|
bool CalcMasterKeyByFileAndPw(QString filename, QString& password);
|
||||||
|
|
||||||
|
CGroup* addGroup(CGroup* parent);
|
||||||
|
GroupItr deleteGroup(CGroup* pGroup);
|
||||||
|
GroupItr deleteGroup(unsigned long ID);
|
||||||
|
int getGroupIndex(unsigned long ID);
|
||||||
|
EntryItr deleteEntry(CEntry* pEntry);
|
||||||
|
void moveEntry(CEntry* pEntry,CGroup* pDstGroup);
|
||||||
|
CEntry* addEntry();
|
||||||
|
void merge(PwDatabase* db2);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
private:
|
||||||
|
EntryItr deleteEntry(vector<CEntry>::iterator i);
|
||||||
|
EntryItr getEntryIterator(CEntry* pEntry);
|
||||||
|
GroupItr getGroupIterator(CGroup* pGroup);
|
||||||
|
bool IsMetaStream(CEntry& Entry);
|
||||||
|
void transformKey(UINT8* src,UINT8* dst,UINT8* seed,int rounds);
|
||||||
|
bool readHeader(char* raw);
|
||||||
|
bool isGroupIdInUse(UINT32 GroupID);
|
||||||
|
bool isEntrySidInUse(UINT32 sID);
|
||||||
|
UINT32 getNewGroupId();
|
||||||
|
UINT32 getNewEntrySid();
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
|
@ -0,0 +1,135 @@
|
||||||
|
/***************************************************************************
|
||||||
|
* Copyright (C) 2005 by Tarek Saidi *
|
||||||
|
* mail@tarek-saidi.de *
|
||||||
|
* *
|
||||||
|
* This program is free software; you can redistribute it and/or modify *
|
||||||
|
* it under the terms of the GNU General Public License as published by *
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or *
|
||||||
|
* (at your option) any later version. *
|
||||||
|
* *
|
||||||
|
* 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, write to the *
|
||||||
|
* Free Software Foundation, Inc., *
|
||||||
|
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
|
#include "PwmConfig.h"
|
||||||
|
#include <qobject.h>
|
||||||
|
#include <qdir.h>
|
||||||
|
#include <iostream.h>
|
||||||
|
|
||||||
|
bool CConfig::loadFromIni(){
|
||||||
|
CIniFile ini(QDir::homeDirPath()+"/.keepass/config");
|
||||||
|
ini.ReadFile();
|
||||||
|
ClipboardTimeOut=ini.GetValueI("Options","ClipboardTimeOut",20);
|
||||||
|
Toolbar=ini.GetValueB("UI","ShowToolbar",true);
|
||||||
|
EntryDetails=ini.GetValueB("UI","ShowEntryDetails",true);
|
||||||
|
OpenLast=ini.GetValueB("Options","OpenLast",true);
|
||||||
|
LastFile=ini.GetValue("Options","LastFile","");
|
||||||
|
ParseColumnString(ini.GetValue("UI","Columns","1111100000"),Columns);
|
||||||
|
BannerColor1=ParseColorString(ini.GetValue("Options","BannerColor1","0,104,176"));
|
||||||
|
BannerColor2=ParseColorString(ini.GetValue("Options","BannerColor2","213,239,255"));
|
||||||
|
BannerTextColor=ParseColorString(ini.GetValue("Options","BannerTextColor","4,0,80"));
|
||||||
|
ShowPasswords=ini.GetValueB("Options","ShowPasswords",false);
|
||||||
|
OpenUrlCommand=ini.GetValue("Options","UrlCmd","kfmclient openURL %1");
|
||||||
|
Language=ini.GetValue("Options","LangFile","");
|
||||||
|
ParseBoolString(ini.GetValue("Options","SearchOptions","00110111"),SearchOptions,8);
|
||||||
|
ListView_HidePasswords=ini.GetValueB("UI","HidePasswords",true);
|
||||||
|
ListView_HideUsernames=ini.GetValueB("UI","HideUsernames",false);
|
||||||
|
ParseBoolString(ini.GetValue("Options","PwGenOptions","1111100001"),PwGenOptions,10);
|
||||||
|
PwGenLength=ini.GetValueI("Options","PwGenLength",25);
|
||||||
|
PwGenCharList=ini.GetValue("Options","PwGenCharList","");
|
||||||
|
ExpandGroupTree=ini.GetValueB("Options","ExpandGroupTree",true);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CConfig::saveToIni(){
|
||||||
|
CIniFile ini(QDir::homeDirPath()+"/.keepass/config");
|
||||||
|
ini.ReadFile();
|
||||||
|
ini.SetValueI("Options","ClipboardTimeOut",ClipboardTimeOut);
|
||||||
|
ini.SetValueB("UI","ShowToolbar",Toolbar);
|
||||||
|
ini.SetValueB("UI","ShowEntryDetails",EntryDetails);
|
||||||
|
if(OpenLast)ini.SetValue("Options","LastFile",LastFile);
|
||||||
|
else ini.SetValue("Options","LastFile","");
|
||||||
|
ini.SetValue("UI","Columns",CreateColumnString(),true);
|
||||||
|
ini.SetValue("Options","BannerColor1",CreateColorString(BannerColor1),true);
|
||||||
|
ini.SetValue("Options","BannerColor2",CreateColorString(BannerColor2),true);
|
||||||
|
ini.SetValue("Options","BannerTextColor",CreateColorString(BannerTextColor),true);
|
||||||
|
ini.SetValueB("Options","ShowPasswords",ShowPasswords,true);
|
||||||
|
ini.SetValue("Options","UrlCmd",OpenUrlCommand,true);
|
||||||
|
ini.SetValue("Options","LangFile",Language,true);
|
||||||
|
ini.SetValue("Options","SearchOptions",CreateBoolString(SearchOptions,8),true);
|
||||||
|
ini.SetValueB("UI","HidePasswords",ListView_HidePasswords);
|
||||||
|
ini.SetValueB("UI","HideUsernames",ListView_HideUsernames);
|
||||||
|
ini.SetValue("Options","PwGenOptions",CreateBoolString(PwGenOptions,10),true);
|
||||||
|
ini.SetValueI("Options","PwGenLength",PwGenLength,true);
|
||||||
|
ini.SetValue("Options","PwGenCharList",PwGenCharList,true);
|
||||||
|
ini.SetValueB("Options","ExpandGroupTree",ExpandGroupTree,true);
|
||||||
|
if(!ini.WriteFile())return false;
|
||||||
|
else return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CConfig::ParseColumnString(QString str, bool* dst){
|
||||||
|
if(str.length()<10){
|
||||||
|
bool _default[]={true,true,true,true,true,false,false,false,false,false};
|
||||||
|
memcpy((char*)_default,(char*)dst,10*sizeof(bool));}
|
||||||
|
for(int i=0; i<10; i++){
|
||||||
|
if(str[i]==QChar('0'))
|
||||||
|
*(dst+i)=false;
|
||||||
|
else
|
||||||
|
*(dst+i)=true;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
QString CConfig::CreateColumnString(){
|
||||||
|
QString str="";
|
||||||
|
for(int i=0;i<10;i++){
|
||||||
|
if(Columns[i])str+="1";
|
||||||
|
else str+="0";
|
||||||
|
}
|
||||||
|
return str;
|
||||||
|
}
|
||||||
|
|
||||||
|
QColor CConfig::ParseColorString(QString str){
|
||||||
|
QStringList lst=QStringList::split(',',str);
|
||||||
|
if(lst.size()!=3){
|
||||||
|
cout << QObject::trUtf8("Warnung:")+" CConfig::ParseColorString(QString):"+QObject::trUtf8("ungültiger RGB-Farbwert: ") << str << endl;
|
||||||
|
return QColor(0,0,0);}
|
||||||
|
bool err[3];
|
||||||
|
int r=lst[0].toUInt(err);
|
||||||
|
int g=lst[1].toUInt(err+1);
|
||||||
|
int b=lst[2].toUInt(err+2);
|
||||||
|
if(!err[0] || !err[1] || !err[2]){
|
||||||
|
cout << QObject::trUtf8("Warnung:")+" CConfig::ParseColorString(QString):"+QObject::trUtf8("ungültiger RGB-Farbwert: ") << str << endl;
|
||||||
|
return QColor(0,0,0);}
|
||||||
|
return QColor(r,g,b);
|
||||||
|
}
|
||||||
|
|
||||||
|
QString CConfig::CreateColorString(QColor c){
|
||||||
|
return (QString::number(c.red())+","+QString::number(c.green())+","+QString::number(c.blue()));
|
||||||
|
}
|
||||||
|
|
||||||
|
void CConfig::ParseBoolString(const QString &str,bool* dst, int count){
|
||||||
|
for(int i=0; i<count; i++){
|
||||||
|
if(str[i]==QChar('0'))
|
||||||
|
*(dst+i)=false;
|
||||||
|
else
|
||||||
|
*(dst+i)=true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
QString CConfig::CreateBoolString(bool* src, int count){
|
||||||
|
QString str="";
|
||||||
|
for(int i=0;i<count;i++){
|
||||||
|
if(src[i])str+="1";
|
||||||
|
else str+="0";
|
||||||
|
}
|
||||||
|
return str;
|
||||||
|
}
|
|
@ -0,0 +1,61 @@
|
||||||
|
/***************************************************************************
|
||||||
|
* Copyright (C) 2005 by Tarek Saidi *
|
||||||
|
* mail@tarek-saidi.de *
|
||||||
|
* *
|
||||||
|
* This program is free software; you can redistribute it and/or modify *
|
||||||
|
* it under the terms of the GNU General Public License as published by *
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or *
|
||||||
|
* (at your option) any later version. *
|
||||||
|
* *
|
||||||
|
* 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, write to the *
|
||||||
|
* Free Software Foundation, Inc., *
|
||||||
|
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
|
||||||
|
***************************************************************************/
|
||||||
|
#ifndef _PWMCONFIG_H_
|
||||||
|
#define _PWMCONFIG_H_
|
||||||
|
|
||||||
|
#include "lib/IniReader.h"
|
||||||
|
#include <qcolor.h>
|
||||||
|
|
||||||
|
class CConfig{
|
||||||
|
public:
|
||||||
|
int TimeFormat;
|
||||||
|
int ClipboardTimeOut;
|
||||||
|
bool Toolbar;
|
||||||
|
bool EntryDetails;
|
||||||
|
QString LastFile;
|
||||||
|
bool OpenLast;
|
||||||
|
bool Columns[10];
|
||||||
|
QColor BannerColor1;
|
||||||
|
QColor BannerColor2;
|
||||||
|
QColor BannerTextColor;
|
||||||
|
bool ShowPasswords;
|
||||||
|
QString OpenUrlCommand;
|
||||||
|
QString Language;
|
||||||
|
bool SearchOptions[8];
|
||||||
|
bool ListView_HidePasswords;
|
||||||
|
bool ListView_HideUsernames;
|
||||||
|
bool PwGenOptions[10];
|
||||||
|
int PwGenLength;
|
||||||
|
QString PwGenCharList;
|
||||||
|
bool ExpandGroupTree;
|
||||||
|
|
||||||
|
bool loadFromIni();
|
||||||
|
bool saveToIni();
|
||||||
|
|
||||||
|
private:
|
||||||
|
void ParseColumnString(QString str, bool* dst);
|
||||||
|
void ParseBoolString(const QString &str,bool* dst, int count);
|
||||||
|
QString CreateBoolString(bool* src, int count);
|
||||||
|
QColor ParseColorString(QString str);
|
||||||
|
QString CreateColumnString();
|
||||||
|
QString CreateColorString(QColor);
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
|
@ -0,0 +1,541 @@
|
||||||
|
/* 2003.05.02: Derived from libgcrypt-1.1.12 by Michael Buesch */
|
||||||
|
|
||||||
|
/* blowfish.c - Blowfish encryption
|
||||||
|
* Copyright (C) 1998, 2001, 2002 Free Software Foundation, Inc.
|
||||||
|
*
|
||||||
|
* This file is part of Libgcrypt.
|
||||||
|
*
|
||||||
|
* Libgcrypt is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU Lesser general Public License as
|
||||||
|
* published by the Free Software Foundation; either version 2.1 of
|
||||||
|
* the License, or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* Libgcrypt is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU Lesser General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Lesser General Public
|
||||||
|
* License along with this program; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
|
||||||
|
*
|
||||||
|
* For a description of the algorithm, see:
|
||||||
|
* Bruce Schneier: Applied Cryptography. John Wiley & Sons, 1996.
|
||||||
|
* ISBN 0-471-11709-9. Pages 336 ff.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Test values:
|
||||||
|
* key "abcdefghijklmnopqrstuvwxyz";
|
||||||
|
* plain "BLOWFISH"
|
||||||
|
* cipher 32 4E D0 FE F4 13 A2 03
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <string.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
#include "blowfish.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* precomputed S boxes */
|
||||||
|
static const uint32_t ks0[256] = {
|
||||||
|
0xD1310BA6, 0x98DFB5AC, 0x2FFD72DB, 0xD01ADFB7, 0xB8E1AFED, 0x6A267E96,
|
||||||
|
0xBA7C9045, 0xF12C7F99, 0x24A19947, 0xB3916CF7, 0x0801F2E2, 0x858EFC16,
|
||||||
|
0x636920D8, 0x71574E69, 0xA458FEA3, 0xF4933D7E, 0x0D95748F, 0x728EB658,
|
||||||
|
0x718BCD58, 0x82154AEE, 0x7B54A41D, 0xC25A59B5, 0x9C30D539, 0x2AF26013,
|
||||||
|
0xC5D1B023, 0x286085F0, 0xCA417918, 0xB8DB38EF, 0x8E79DCB0, 0x603A180E,
|
||||||
|
0x6C9E0E8B, 0xB01E8A3E, 0xD71577C1, 0xBD314B27, 0x78AF2FDA, 0x55605C60,
|
||||||
|
0xE65525F3, 0xAA55AB94, 0x57489862, 0x63E81440, 0x55CA396A, 0x2AAB10B6,
|
||||||
|
0xB4CC5C34, 0x1141E8CE, 0xA15486AF, 0x7C72E993, 0xB3EE1411, 0x636FBC2A,
|
||||||
|
0x2BA9C55D, 0x741831F6, 0xCE5C3E16, 0x9B87931E, 0xAFD6BA33, 0x6C24CF5C,
|
||||||
|
0x7A325381, 0x28958677, 0x3B8F4898, 0x6B4BB9AF, 0xC4BFE81B, 0x66282193,
|
||||||
|
0x61D809CC, 0xFB21A991, 0x487CAC60, 0x5DEC8032, 0xEF845D5D, 0xE98575B1,
|
||||||
|
0xDC262302, 0xEB651B88, 0x23893E81, 0xD396ACC5, 0x0F6D6FF3, 0x83F44239,
|
||||||
|
0x2E0B4482, 0xA4842004, 0x69C8F04A, 0x9E1F9B5E, 0x21C66842, 0xF6E96C9A,
|
||||||
|
0x670C9C61, 0xABD388F0, 0x6A51A0D2, 0xD8542F68, 0x960FA728, 0xAB5133A3,
|
||||||
|
0x6EEF0B6C, 0x137A3BE4, 0xBA3BF050, 0x7EFB2A98, 0xA1F1651D, 0x39AF0176,
|
||||||
|
0x66CA593E, 0x82430E88, 0x8CEE8619, 0x456F9FB4, 0x7D84A5C3, 0x3B8B5EBE,
|
||||||
|
0xE06F75D8, 0x85C12073, 0x401A449F, 0x56C16AA6, 0x4ED3AA62, 0x363F7706,
|
||||||
|
0x1BFEDF72, 0x429B023D, 0x37D0D724, 0xD00A1248, 0xDB0FEAD3, 0x49F1C09B,
|
||||||
|
0x075372C9, 0x80991B7B, 0x25D479D8, 0xF6E8DEF7, 0xE3FE501A, 0xB6794C3B,
|
||||||
|
0x976CE0BD, 0x04C006BA, 0xC1A94FB6, 0x409F60C4, 0x5E5C9EC2, 0x196A2463,
|
||||||
|
0x68FB6FAF, 0x3E6C53B5, 0x1339B2EB, 0x3B52EC6F, 0x6DFC511F, 0x9B30952C,
|
||||||
|
0xCC814544, 0xAF5EBD09, 0xBEE3D004, 0xDE334AFD, 0x660F2807, 0x192E4BB3,
|
||||||
|
0xC0CBA857, 0x45C8740F, 0xD20B5F39, 0xB9D3FBDB, 0x5579C0BD, 0x1A60320A,
|
||||||
|
0xD6A100C6, 0x402C7279, 0x679F25FE, 0xFB1FA3CC, 0x8EA5E9F8, 0xDB3222F8,
|
||||||
|
0x3C7516DF, 0xFD616B15, 0x2F501EC8, 0xAD0552AB, 0x323DB5FA, 0xFD238760,
|
||||||
|
0x53317B48, 0x3E00DF82, 0x9E5C57BB, 0xCA6F8CA0, 0x1A87562E, 0xDF1769DB,
|
||||||
|
0xD542A8F6, 0x287EFFC3, 0xAC6732C6, 0x8C4F5573, 0x695B27B0, 0xBBCA58C8,
|
||||||
|
0xE1FFA35D, 0xB8F011A0, 0x10FA3D98, 0xFD2183B8, 0x4AFCB56C, 0x2DD1D35B,
|
||||||
|
0x9A53E479, 0xB6F84565, 0xD28E49BC, 0x4BFB9790, 0xE1DDF2DA, 0xA4CB7E33,
|
||||||
|
0x62FB1341, 0xCEE4C6E8, 0xEF20CADA, 0x36774C01, 0xD07E9EFE, 0x2BF11FB4,
|
||||||
|
0x95DBDA4D, 0xAE909198, 0xEAAD8E71, 0x6B93D5A0, 0xD08ED1D0, 0xAFC725E0,
|
||||||
|
0x8E3C5B2F, 0x8E7594B7, 0x8FF6E2FB, 0xF2122B64, 0x8888B812, 0x900DF01C,
|
||||||
|
0x4FAD5EA0, 0x688FC31C, 0xD1CFF191, 0xB3A8C1AD, 0x2F2F2218, 0xBE0E1777,
|
||||||
|
0xEA752DFE, 0x8B021FA1, 0xE5A0CC0F, 0xB56F74E8, 0x18ACF3D6, 0xCE89E299,
|
||||||
|
0xB4A84FE0, 0xFD13E0B7, 0x7CC43B81, 0xD2ADA8D9, 0x165FA266, 0x80957705,
|
||||||
|
0x93CC7314, 0x211A1477, 0xE6AD2065, 0x77B5FA86, 0xC75442F5, 0xFB9D35CF,
|
||||||
|
0xEBCDAF0C, 0x7B3E89A0, 0xD6411BD3, 0xAE1E7E49, 0x00250E2D, 0x2071B35E,
|
||||||
|
0x226800BB, 0x57B8E0AF, 0x2464369B, 0xF009B91E, 0x5563911D, 0x59DFA6AA,
|
||||||
|
0x78C14389, 0xD95A537F, 0x207D5BA2, 0x02E5B9C5, 0x83260376, 0x6295CFA9,
|
||||||
|
0x11C81968, 0x4E734A41, 0xB3472DCA, 0x7B14A94A, 0x1B510052, 0x9A532915,
|
||||||
|
0xD60F573F, 0xBC9BC6E4, 0x2B60A476, 0x81E67400, 0x08BA6FB5, 0x571BE91F,
|
||||||
|
0xF296EC6B, 0x2A0DD915, 0xB6636521, 0xE7B9F9B6, 0xFF34052E, 0xC5855664,
|
||||||
|
0x53B02D5D, 0xA99F8FA1, 0x08BA4799, 0x6E85076A
|
||||||
|
};
|
||||||
|
|
||||||
|
static const uint32_t ks1[256] = {
|
||||||
|
0x4B7A70E9, 0xB5B32944, 0xDB75092E, 0xC4192623, 0xAD6EA6B0, 0x49A7DF7D,
|
||||||
|
0x9CEE60B8, 0x8FEDB266, 0xECAA8C71, 0x699A17FF, 0x5664526C, 0xC2B19EE1,
|
||||||
|
0x193602A5, 0x75094C29, 0xA0591340, 0xE4183A3E, 0x3F54989A, 0x5B429D65,
|
||||||
|
0x6B8FE4D6, 0x99F73FD6, 0xA1D29C07, 0xEFE830F5, 0x4D2D38E6, 0xF0255DC1,
|
||||||
|
0x4CDD2086, 0x8470EB26, 0x6382E9C6, 0x021ECC5E, 0x09686B3F, 0x3EBAEFC9,
|
||||||
|
0x3C971814, 0x6B6A70A1, 0x687F3584, 0x52A0E286, 0xB79C5305, 0xAA500737,
|
||||||
|
0x3E07841C, 0x7FDEAE5C, 0x8E7D44EC, 0x5716F2B8, 0xB03ADA37, 0xF0500C0D,
|
||||||
|
0xF01C1F04, 0x0200B3FF, 0xAE0CF51A, 0x3CB574B2, 0x25837A58, 0xDC0921BD,
|
||||||
|
0xD19113F9, 0x7CA92FF6, 0x94324773, 0x22F54701, 0x3AE5E581, 0x37C2DADC,
|
||||||
|
0xC8B57634, 0x9AF3DDA7, 0xA9446146, 0x0FD0030E, 0xECC8C73E, 0xA4751E41,
|
||||||
|
0xE238CD99, 0x3BEA0E2F, 0x3280BBA1, 0x183EB331, 0x4E548B38, 0x4F6DB908,
|
||||||
|
0x6F420D03, 0xF60A04BF, 0x2CB81290, 0x24977C79, 0x5679B072, 0xBCAF89AF,
|
||||||
|
0xDE9A771F, 0xD9930810, 0xB38BAE12, 0xDCCF3F2E, 0x5512721F, 0x2E6B7124,
|
||||||
|
0x501ADDE6, 0x9F84CD87, 0x7A584718, 0x7408DA17, 0xBC9F9ABC, 0xE94B7D8C,
|
||||||
|
0xEC7AEC3A, 0xDB851DFA, 0x63094366, 0xC464C3D2, 0xEF1C1847, 0x3215D908,
|
||||||
|
0xDD433B37, 0x24C2BA16, 0x12A14D43, 0x2A65C451, 0x50940002, 0x133AE4DD,
|
||||||
|
0x71DFF89E, 0x10314E55, 0x81AC77D6, 0x5F11199B, 0x043556F1, 0xD7A3C76B,
|
||||||
|
0x3C11183B, 0x5924A509, 0xF28FE6ED, 0x97F1FBFA, 0x9EBABF2C, 0x1E153C6E,
|
||||||
|
0x86E34570, 0xEAE96FB1, 0x860E5E0A, 0x5A3E2AB3, 0x771FE71C, 0x4E3D06FA,
|
||||||
|
0x2965DCB9, 0x99E71D0F, 0x803E89D6, 0x5266C825, 0x2E4CC978, 0x9C10B36A,
|
||||||
|
0xC6150EBA, 0x94E2EA78, 0xA5FC3C53, 0x1E0A2DF4, 0xF2F74EA7, 0x361D2B3D,
|
||||||
|
0x1939260F, 0x19C27960, 0x5223A708, 0xF71312B6, 0xEBADFE6E, 0xEAC31F66,
|
||||||
|
0xE3BC4595, 0xA67BC883, 0xB17F37D1, 0x018CFF28, 0xC332DDEF, 0xBE6C5AA5,
|
||||||
|
0x65582185, 0x68AB9802, 0xEECEA50F, 0xDB2F953B, 0x2AEF7DAD, 0x5B6E2F84,
|
||||||
|
0x1521B628, 0x29076170, 0xECDD4775, 0x619F1510, 0x13CCA830, 0xEB61BD96,
|
||||||
|
0x0334FE1E, 0xAA0363CF, 0xB5735C90, 0x4C70A239, 0xD59E9E0B, 0xCBAADE14,
|
||||||
|
0xEECC86BC, 0x60622CA7, 0x9CAB5CAB, 0xB2F3846E, 0x648B1EAF, 0x19BDF0CA,
|
||||||
|
0xA02369B9, 0x655ABB50, 0x40685A32, 0x3C2AB4B3, 0x319EE9D5, 0xC021B8F7,
|
||||||
|
0x9B540B19, 0x875FA099, 0x95F7997E, 0x623D7DA8, 0xF837889A, 0x97E32D77,
|
||||||
|
0x11ED935F, 0x16681281, 0x0E358829, 0xC7E61FD6, 0x96DEDFA1, 0x7858BA99,
|
||||||
|
0x57F584A5, 0x1B227263, 0x9B83C3FF, 0x1AC24696, 0xCDB30AEB, 0x532E3054,
|
||||||
|
0x8FD948E4, 0x6DBC3128, 0x58EBF2EF, 0x34C6FFEA, 0xFE28ED61, 0xEE7C3C73,
|
||||||
|
0x5D4A14D9, 0xE864B7E3, 0x42105D14, 0x203E13E0, 0x45EEE2B6, 0xA3AAABEA,
|
||||||
|
0xDB6C4F15, 0xFACB4FD0, 0xC742F442, 0xEF6ABBB5, 0x654F3B1D, 0x41CD2105,
|
||||||
|
0xD81E799E, 0x86854DC7, 0xE44B476A, 0x3D816250, 0xCF62A1F2, 0x5B8D2646,
|
||||||
|
0xFC8883A0, 0xC1C7B6A3, 0x7F1524C3, 0x69CB7492, 0x47848A0B, 0x5692B285,
|
||||||
|
0x095BBF00, 0xAD19489D, 0x1462B174, 0x23820E00, 0x58428D2A, 0x0C55F5EA,
|
||||||
|
0x1DADF43E, 0x233F7061, 0x3372F092, 0x8D937E41, 0xD65FECF1, 0x6C223BDB,
|
||||||
|
0x7CDE3759, 0xCBEE7460, 0x4085F2A7, 0xCE77326E, 0xA6078084, 0x19F8509E,
|
||||||
|
0xE8EFD855, 0x61D99735, 0xA969A7AA, 0xC50C06C2, 0x5A04ABFC, 0x800BCADC,
|
||||||
|
0x9E447A2E, 0xC3453484, 0xFDD56705, 0x0E1E9EC9, 0xDB73DBD3, 0x105588CD,
|
||||||
|
0x675FDA79, 0xE3674340, 0xC5C43465, 0x713E38D8, 0x3D28F89E, 0xF16DFF20,
|
||||||
|
0x153E21E7, 0x8FB03D4A, 0xE6E39F2B, 0xDB83ADF7
|
||||||
|
};
|
||||||
|
|
||||||
|
static const uint32_t ks2[256] = {
|
||||||
|
0xE93D5A68, 0x948140F7, 0xF64C261C, 0x94692934, 0x411520F7, 0x7602D4F7,
|
||||||
|
0xBCF46B2E, 0xD4A20068, 0xD4082471, 0x3320F46A, 0x43B7D4B7, 0x500061AF,
|
||||||
|
0x1E39F62E, 0x97244546, 0x14214F74, 0xBF8B8840, 0x4D95FC1D, 0x96B591AF,
|
||||||
|
0x70F4DDD3, 0x66A02F45, 0xBFBC09EC, 0x03BD9785, 0x7FAC6DD0, 0x31CB8504,
|
||||||
|
0x96EB27B3, 0x55FD3941, 0xDA2547E6, 0xABCA0A9A, 0x28507825, 0x530429F4,
|
||||||
|
0x0A2C86DA, 0xE9B66DFB, 0x68DC1462, 0xD7486900, 0x680EC0A4, 0x27A18DEE,
|
||||||
|
0x4F3FFEA2, 0xE887AD8C, 0xB58CE006, 0x7AF4D6B6, 0xAACE1E7C, 0xD3375FEC,
|
||||||
|
0xCE78A399, 0x406B2A42, 0x20FE9E35, 0xD9F385B9, 0xEE39D7AB, 0x3B124E8B,
|
||||||
|
0x1DC9FAF7, 0x4B6D1856, 0x26A36631, 0xEAE397B2, 0x3A6EFA74, 0xDD5B4332,
|
||||||
|
0x6841E7F7, 0xCA7820FB, 0xFB0AF54E, 0xD8FEB397, 0x454056AC, 0xBA489527,
|
||||||
|
0x55533A3A, 0x20838D87, 0xFE6BA9B7, 0xD096954B, 0x55A867BC, 0xA1159A58,
|
||||||
|
0xCCA92963, 0x99E1DB33, 0xA62A4A56, 0x3F3125F9, 0x5EF47E1C, 0x9029317C,
|
||||||
|
0xFDF8E802, 0x04272F70, 0x80BB155C, 0x05282CE3, 0x95C11548, 0xE4C66D22,
|
||||||
|
0x48C1133F, 0xC70F86DC, 0x07F9C9EE, 0x41041F0F, 0x404779A4, 0x5D886E17,
|
||||||
|
0x325F51EB, 0xD59BC0D1, 0xF2BCC18F, 0x41113564, 0x257B7834, 0x602A9C60,
|
||||||
|
0xDFF8E8A3, 0x1F636C1B, 0x0E12B4C2, 0x02E1329E, 0xAF664FD1, 0xCAD18115,
|
||||||
|
0x6B2395E0, 0x333E92E1, 0x3B240B62, 0xEEBEB922, 0x85B2A20E, 0xE6BA0D99,
|
||||||
|
0xDE720C8C, 0x2DA2F728, 0xD0127845, 0x95B794FD, 0x647D0862, 0xE7CCF5F0,
|
||||||
|
0x5449A36F, 0x877D48FA, 0xC39DFD27, 0xF33E8D1E, 0x0A476341, 0x992EFF74,
|
||||||
|
0x3A6F6EAB, 0xF4F8FD37, 0xA812DC60, 0xA1EBDDF8, 0x991BE14C, 0xDB6E6B0D,
|
||||||
|
0xC67B5510, 0x6D672C37, 0x2765D43B, 0xDCD0E804, 0xF1290DC7, 0xCC00FFA3,
|
||||||
|
0xB5390F92, 0x690FED0B, 0x667B9FFB, 0xCEDB7D9C, 0xA091CF0B, 0xD9155EA3,
|
||||||
|
0xBB132F88, 0x515BAD24, 0x7B9479BF, 0x763BD6EB, 0x37392EB3, 0xCC115979,
|
||||||
|
0x8026E297, 0xF42E312D, 0x6842ADA7, 0xC66A2B3B, 0x12754CCC, 0x782EF11C,
|
||||||
|
0x6A124237, 0xB79251E7, 0x06A1BBE6, 0x4BFB6350, 0x1A6B1018, 0x11CAEDFA,
|
||||||
|
0x3D25BDD8, 0xE2E1C3C9, 0x44421659, 0x0A121386, 0xD90CEC6E, 0xD5ABEA2A,
|
||||||
|
0x64AF674E, 0xDA86A85F, 0xBEBFE988, 0x64E4C3FE, 0x9DBC8057, 0xF0F7C086,
|
||||||
|
0x60787BF8, 0x6003604D, 0xD1FD8346, 0xF6381FB0, 0x7745AE04, 0xD736FCCC,
|
||||||
|
0x83426B33, 0xF01EAB71, 0xB0804187, 0x3C005E5F, 0x77A057BE, 0xBDE8AE24,
|
||||||
|
0x55464299, 0xBF582E61, 0x4E58F48F, 0xF2DDFDA2, 0xF474EF38, 0x8789BDC2,
|
||||||
|
0x5366F9C3, 0xC8B38E74, 0xB475F255, 0x46FCD9B9, 0x7AEB2661, 0x8B1DDF84,
|
||||||
|
0x846A0E79, 0x915F95E2, 0x466E598E, 0x20B45770, 0x8CD55591, 0xC902DE4C,
|
||||||
|
0xB90BACE1, 0xBB8205D0, 0x11A86248, 0x7574A99E, 0xB77F19B6, 0xE0A9DC09,
|
||||||
|
0x662D09A1, 0xC4324633, 0xE85A1F02, 0x09F0BE8C, 0x4A99A025, 0x1D6EFE10,
|
||||||
|
0x1AB93D1D, 0x0BA5A4DF, 0xA186F20F, 0x2868F169, 0xDCB7DA83, 0x573906FE,
|
||||||
|
0xA1E2CE9B, 0x4FCD7F52, 0x50115E01, 0xA70683FA, 0xA002B5C4, 0x0DE6D027,
|
||||||
|
0x9AF88C27, 0x773F8641, 0xC3604C06, 0x61A806B5, 0xF0177A28, 0xC0F586E0,
|
||||||
|
0x006058AA, 0x30DC7D62, 0x11E69ED7, 0x2338EA63, 0x53C2DD94, 0xC2C21634,
|
||||||
|
0xBBCBEE56, 0x90BCB6DE, 0xEBFC7DA1, 0xCE591D76, 0x6F05E409, 0x4B7C0188,
|
||||||
|
0x39720A3D, 0x7C927C24, 0x86E3725F, 0x724D9DB9, 0x1AC15BB4, 0xD39EB8FC,
|
||||||
|
0xED545578, 0x08FCA5B5, 0xD83D7CD3, 0x4DAD0FC4, 0x1E50EF5E, 0xB161E6F8,
|
||||||
|
0xA28514D9, 0x6C51133C, 0x6FD5C7E7, 0x56E14EC4, 0x362ABFCE, 0xDDC6C837,
|
||||||
|
0xD79A3234, 0x92638212, 0x670EFA8E, 0x406000E0
|
||||||
|
};
|
||||||
|
|
||||||
|
static const uint32_t ks3[256] = {
|
||||||
|
0x3A39CE37, 0xD3FAF5CF, 0xABC27737, 0x5AC52D1B, 0x5CB0679E, 0x4FA33742,
|
||||||
|
0xD3822740, 0x99BC9BBE, 0xD5118E9D, 0xBF0F7315, 0xD62D1C7E, 0xC700C47B,
|
||||||
|
0xB78C1B6B, 0x21A19045, 0xB26EB1BE, 0x6A366EB4, 0x5748AB2F, 0xBC946E79,
|
||||||
|
0xC6A376D2, 0x6549C2C8, 0x530FF8EE, 0x468DDE7D, 0xD5730A1D, 0x4CD04DC6,
|
||||||
|
0x2939BBDB, 0xA9BA4650, 0xAC9526E8, 0xBE5EE304, 0xA1FAD5F0, 0x6A2D519A,
|
||||||
|
0x63EF8CE2, 0x9A86EE22, 0xC089C2B8, 0x43242EF6, 0xA51E03AA, 0x9CF2D0A4,
|
||||||
|
0x83C061BA, 0x9BE96A4D, 0x8FE51550, 0xBA645BD6, 0x2826A2F9, 0xA73A3AE1,
|
||||||
|
0x4BA99586, 0xEF5562E9, 0xC72FEFD3, 0xF752F7DA, 0x3F046F69, 0x77FA0A59,
|
||||||
|
0x80E4A915, 0x87B08601, 0x9B09E6AD, 0x3B3EE593, 0xE990FD5A, 0x9E34D797,
|
||||||
|
0x2CF0B7D9, 0x022B8B51, 0x96D5AC3A, 0x017DA67D, 0xD1CF3ED6, 0x7C7D2D28,
|
||||||
|
0x1F9F25CF, 0xADF2B89B, 0x5AD6B472, 0x5A88F54C, 0xE029AC71, 0xE019A5E6,
|
||||||
|
0x47B0ACFD, 0xED93FA9B, 0xE8D3C48D, 0x283B57CC, 0xF8D56629, 0x79132E28,
|
||||||
|
0x785F0191, 0xED756055, 0xF7960E44, 0xE3D35E8C, 0x15056DD4, 0x88F46DBA,
|
||||||
|
0x03A16125, 0x0564F0BD, 0xC3EB9E15, 0x3C9057A2, 0x97271AEC, 0xA93A072A,
|
||||||
|
0x1B3F6D9B, 0x1E6321F5, 0xF59C66FB, 0x26DCF319, 0x7533D928, 0xB155FDF5,
|
||||||
|
0x03563482, 0x8ABA3CBB, 0x28517711, 0xC20AD9F8, 0xABCC5167, 0xCCAD925F,
|
||||||
|
0x4DE81751, 0x3830DC8E, 0x379D5862, 0x9320F991, 0xEA7A90C2, 0xFB3E7BCE,
|
||||||
|
0x5121CE64, 0x774FBE32, 0xA8B6E37E, 0xC3293D46, 0x48DE5369, 0x6413E680,
|
||||||
|
0xA2AE0810, 0xDD6DB224, 0x69852DFD, 0x09072166, 0xB39A460A, 0x6445C0DD,
|
||||||
|
0x586CDECF, 0x1C20C8AE, 0x5BBEF7DD, 0x1B588D40, 0xCCD2017F, 0x6BB4E3BB,
|
||||||
|
0xDDA26A7E, 0x3A59FF45, 0x3E350A44, 0xBCB4CDD5, 0x72EACEA8, 0xFA6484BB,
|
||||||
|
0x8D6612AE, 0xBF3C6F47, 0xD29BE463, 0x542F5D9E, 0xAEC2771B, 0xF64E6370,
|
||||||
|
0x740E0D8D, 0xE75B1357, 0xF8721671, 0xAF537D5D, 0x4040CB08, 0x4EB4E2CC,
|
||||||
|
0x34D2466A, 0x0115AF84, 0xE1B00428, 0x95983A1D, 0x06B89FB4, 0xCE6EA048,
|
||||||
|
0x6F3F3B82, 0x3520AB82, 0x011A1D4B, 0x277227F8, 0x611560B1, 0xE7933FDC,
|
||||||
|
0xBB3A792B, 0x344525BD, 0xA08839E1, 0x51CE794B, 0x2F32C9B7, 0xA01FBAC9,
|
||||||
|
0xE01CC87E, 0xBCC7D1F6, 0xCF0111C3, 0xA1E8AAC7, 0x1A908749, 0xD44FBD9A,
|
||||||
|
0xD0DADECB, 0xD50ADA38, 0x0339C32A, 0xC6913667, 0x8DF9317C, 0xE0B12B4F,
|
||||||
|
0xF79E59B7, 0x43F5BB3A, 0xF2D519FF, 0x27D9459C, 0xBF97222C, 0x15E6FC2A,
|
||||||
|
0x0F91FC71, 0x9B941525, 0xFAE59361, 0xCEB69CEB, 0xC2A86459, 0x12BAA8D1,
|
||||||
|
0xB6C1075E, 0xE3056A0C, 0x10D25065, 0xCB03A442, 0xE0EC6E0E, 0x1698DB3B,
|
||||||
|
0x4C98A0BE, 0x3278E964, 0x9F1F9532, 0xE0D392DF, 0xD3A0342B, 0x8971F21E,
|
||||||
|
0x1B0A7441, 0x4BA3348C, 0xC5BE7120, 0xC37632D8, 0xDF359F8D, 0x9B992F2E,
|
||||||
|
0xE60B6F47, 0x0FE3F11D, 0xE54CDA54, 0x1EDAD891, 0xCE6279CF, 0xCD3E7E6F,
|
||||||
|
0x1618B166, 0xFD2C1D05, 0x848FD2C5, 0xF6FB2299, 0xF523F357, 0xA6327623,
|
||||||
|
0x93A83531, 0x56CCCD02, 0xACF08162, 0x5A75EBB5, 0x6E163697, 0x88D273CC,
|
||||||
|
0xDE966292, 0x81B949D0, 0x4C50901B, 0x71C65614, 0xE6C6C7BD, 0x327A140A,
|
||||||
|
0x45E1D006, 0xC3F27B9A, 0xC9AA53FD, 0x62A80F00, 0xBB25BFE2, 0x35BDD2F6,
|
||||||
|
0x71126905, 0xB2040222, 0xB6CBCF7C, 0xCD769C2B, 0x53113EC0, 0x1640E3D3,
|
||||||
|
0x38ABBD60, 0x2547ADF0, 0xBA38209C, 0xF746CE76, 0x77AFA1C5, 0x20756060,
|
||||||
|
0x85CBFE4E, 0x8AE88DD8, 0x7AAAF9B0, 0x4CF9AA7E, 0x1948C25C, 0x02FB8A8C,
|
||||||
|
0x01C36AE4, 0xD6EBE1F9, 0x90D4F869, 0xA65CDEA0, 0x3F09252D, 0xC208E69F,
|
||||||
|
0xB74E6132, 0xCE77E25B, 0x578FDFE3, 0x3AC372E6
|
||||||
|
};
|
||||||
|
|
||||||
|
static const uint32_t ps[BLOWFISH_ROUNDS + 2] = {
|
||||||
|
0x243F6A88, 0x85A308D3, 0x13198A2E, 0x03707344, 0xA4093822, 0x299F31D0,
|
||||||
|
0x082EFA98, 0xEC4E6C89, 0x452821E6, 0x38D01377, 0xBE5466CF, 0x34E90C6C,
|
||||||
|
0xC0AC29B7, 0xC97C50DD, 0x3F84D5B5, 0xB5470917, 0x9216D5D9, 0x8979FB1B
|
||||||
|
};
|
||||||
|
|
||||||
|
Blowfish::Blowfish()
|
||||||
|
{ static bool mustSelfTest = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Blowfish::burn_stack(int bytes)
|
||||||
|
{
|
||||||
|
char buf[64];
|
||||||
|
|
||||||
|
memset(buf, 0, sizeof buf);
|
||||||
|
bytes -= sizeof buf;
|
||||||
|
if (bytes > 0)
|
||||||
|
burn_stack(bytes);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Blowfish::do_encrypt(uint32_t * ret_xl, uint32_t * ret_xr)
|
||||||
|
{
|
||||||
|
#if BLOWFISH_ROUNDS == 16
|
||||||
|
uint32_t xl, xr, *s0, *s1, *s2, *s3, *p;
|
||||||
|
|
||||||
|
xl = *ret_xl;
|
||||||
|
xr = *ret_xr;
|
||||||
|
p = bc.p;
|
||||||
|
s0 = bc.s0;
|
||||||
|
s1 = bc.s1;
|
||||||
|
s2 = bc.s2;
|
||||||
|
s3 = bc.s3;
|
||||||
|
|
||||||
|
R(xl, xr, 0, p, s0, s1, s2, s3);
|
||||||
|
R(xr, xl, 1, p, s0, s1, s2, s3);
|
||||||
|
R(xl, xr, 2, p, s0, s1, s2, s3);
|
||||||
|
R(xr, xl, 3, p, s0, s1, s2, s3);
|
||||||
|
R(xl, xr, 4, p, s0, s1, s2, s3);
|
||||||
|
R(xr, xl, 5, p, s0, s1, s2, s3);
|
||||||
|
R(xl, xr, 6, p, s0, s1, s2, s3);
|
||||||
|
R(xr, xl, 7, p, s0, s1, s2, s3);
|
||||||
|
R(xl, xr, 8, p, s0, s1, s2, s3);
|
||||||
|
R(xr, xl, 9, p, s0, s1, s2, s3);
|
||||||
|
R(xl, xr, 10, p, s0, s1, s2, s3);
|
||||||
|
R(xr, xl, 11, p, s0, s1, s2, s3);
|
||||||
|
R(xl, xr, 12, p, s0, s1, s2, s3);
|
||||||
|
R(xr, xl, 13, p, s0, s1, s2, s3);
|
||||||
|
R(xl, xr, 14, p, s0, s1, s2, s3);
|
||||||
|
R(xr, xl, 15, p, s0, s1, s2, s3);
|
||||||
|
|
||||||
|
xl ^= p[BLOWFISH_ROUNDS];
|
||||||
|
xr ^= p[BLOWFISH_ROUNDS + 1];
|
||||||
|
|
||||||
|
*ret_xl = xr;
|
||||||
|
*ret_xr = xl;
|
||||||
|
|
||||||
|
#else
|
||||||
|
uint32_t xl, xr, temp, *p;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
xl = *ret_xl;
|
||||||
|
xr = *ret_xr;
|
||||||
|
p = bc.p;
|
||||||
|
|
||||||
|
for (i = 0; i < BLOWFISH_ROUNDS; i++) {
|
||||||
|
xl ^= p[i];
|
||||||
|
xr ^= function_F(xl);
|
||||||
|
temp = xl;
|
||||||
|
xl = xr;
|
||||||
|
xr = temp;
|
||||||
|
}
|
||||||
|
temp = xl;
|
||||||
|
xl = xr;
|
||||||
|
xr = temp;
|
||||||
|
|
||||||
|
xr ^= p[BLOWFISH_ROUNDS];
|
||||||
|
xl ^= p[BLOWFISH_ROUNDS + 1];
|
||||||
|
|
||||||
|
*ret_xl = xl;
|
||||||
|
*ret_xr = xr;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
void Blowfish::do_decrypt(uint32_t * ret_xl, uint32_t * ret_xr)
|
||||||
|
{
|
||||||
|
#if BLOWFISH_ROUNDS == 16
|
||||||
|
uint32_t xl, xr, *s0, *s1, *s2, *s3, *p;
|
||||||
|
|
||||||
|
xl = *ret_xl;
|
||||||
|
xr = *ret_xr;
|
||||||
|
p = bc.p;
|
||||||
|
s0 = bc.s0;
|
||||||
|
s1 = bc.s1;
|
||||||
|
s2 = bc.s2;
|
||||||
|
s3 = bc.s3;
|
||||||
|
|
||||||
|
R(xl, xr, 17, p, s0, s1, s2, s3);
|
||||||
|
R(xr, xl, 16, p, s0, s1, s2, s3);
|
||||||
|
R(xl, xr, 15, p, s0, s1, s2, s3);
|
||||||
|
R(xr, xl, 14, p, s0, s1, s2, s3);
|
||||||
|
R(xl, xr, 13, p, s0, s1, s2, s3);
|
||||||
|
R(xr, xl, 12, p, s0, s1, s2, s3);
|
||||||
|
R(xl, xr, 11, p, s0, s1, s2, s3);
|
||||||
|
R(xr, xl, 10, p, s0, s1, s2, s3);
|
||||||
|
R(xl, xr, 9, p, s0, s1, s2, s3);
|
||||||
|
R(xr, xl, 8, p, s0, s1, s2, s3);
|
||||||
|
R(xl, xr, 7, p, s0, s1, s2, s3);
|
||||||
|
R(xr, xl, 6, p, s0, s1, s2, s3);
|
||||||
|
R(xl, xr, 5, p, s0, s1, s2, s3);
|
||||||
|
R(xr, xl, 4, p, s0, s1, s2, s3);
|
||||||
|
R(xl, xr, 3, p, s0, s1, s2, s3);
|
||||||
|
R(xr, xl, 2, p, s0, s1, s2, s3);
|
||||||
|
|
||||||
|
xl ^= p[1];
|
||||||
|
xr ^= p[0];
|
||||||
|
|
||||||
|
*ret_xl = xr;
|
||||||
|
*ret_xr = xl;
|
||||||
|
|
||||||
|
#else
|
||||||
|
uint32_t xl, xr, temp, *p;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
xl = *ret_xl;
|
||||||
|
xr = *ret_xr;
|
||||||
|
p = bc.p;
|
||||||
|
|
||||||
|
for (i = BLOWFISH_ROUNDS + 1; i > 1; i--) {
|
||||||
|
xl ^= p[i];
|
||||||
|
xr ^= function_F(xl);
|
||||||
|
temp = xl;
|
||||||
|
xl = xr;
|
||||||
|
xr = temp;
|
||||||
|
}
|
||||||
|
|
||||||
|
temp = xl;
|
||||||
|
xl = xr;
|
||||||
|
xr = temp;
|
||||||
|
|
||||||
|
xr ^= p[1];
|
||||||
|
xl ^= p[0];
|
||||||
|
|
||||||
|
*ret_xl = xl;
|
||||||
|
*ret_xr = xr;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
void Blowfish::do_encrypt_block(byte * outbuf, byte * inbuf)
|
||||||
|
{
|
||||||
|
uint32_t d1, d2;
|
||||||
|
|
||||||
|
d1 = inbuf[0] << 24 | inbuf[1] << 16 | inbuf[2] << 8 | inbuf[3];
|
||||||
|
d2 = inbuf[4] << 24 | inbuf[5] << 16 | inbuf[6] << 8 | inbuf[7];
|
||||||
|
do_encrypt(&d1, &d2);
|
||||||
|
outbuf[0] = (d1 >> 24) & 0xff;
|
||||||
|
outbuf[1] = (d1 >> 16) & 0xff;
|
||||||
|
outbuf[2] = (d1 >> 8) & 0xff;
|
||||||
|
outbuf[3] = d1 & 0xff;
|
||||||
|
outbuf[4] = (d2 >> 24) & 0xff;
|
||||||
|
outbuf[5] = (d2 >> 16) & 0xff;
|
||||||
|
outbuf[6] = (d2 >> 8) & 0xff;
|
||||||
|
outbuf[7] = d2 & 0xff;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Blowfish::encrypt_block(byte * outbuf, byte * inbuf)
|
||||||
|
{
|
||||||
|
do_encrypt_block(outbuf, inbuf);
|
||||||
|
burn_stack(64);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Blowfish::do_decrypt_block(byte * outbuf, byte * inbuf)
|
||||||
|
{
|
||||||
|
uint32_t d1, d2;
|
||||||
|
|
||||||
|
d1 = inbuf[0] << 24 | inbuf[1] << 16 | inbuf[2] << 8 | inbuf[3];
|
||||||
|
d2 = inbuf[4] << 24 | inbuf[5] << 16 | inbuf[6] << 8 | inbuf[7];
|
||||||
|
do_decrypt(&d1, &d2);
|
||||||
|
outbuf[0] = (d1 >> 24) & 0xff;
|
||||||
|
outbuf[1] = (d1 >> 16) & 0xff;
|
||||||
|
outbuf[2] = (d1 >> 8) & 0xff;
|
||||||
|
outbuf[3] = d1 & 0xff;
|
||||||
|
outbuf[4] = (d2 >> 24) & 0xff;
|
||||||
|
outbuf[5] = (d2 >> 16) & 0xff;
|
||||||
|
outbuf[6] = (d2 >> 8) & 0xff;
|
||||||
|
outbuf[7] = d2 & 0xff;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Blowfish::decrypt_block(byte * outbuf, byte * inbuf)
|
||||||
|
{
|
||||||
|
do_decrypt_block(outbuf, inbuf);
|
||||||
|
burn_stack(64);
|
||||||
|
}
|
||||||
|
|
||||||
|
int Blowfish::do_bf_setkey(byte * key, unsigned int keylen)
|
||||||
|
{
|
||||||
|
int i, j;
|
||||||
|
uint32_t data, datal, datar;
|
||||||
|
|
||||||
|
for (i = 0; i < BLOWFISH_ROUNDS + 2; ++i)
|
||||||
|
bc.p[i] = ps[i];
|
||||||
|
for (i = 0; i < 256; ++i) {
|
||||||
|
bc.s0[i] = ks0[i];
|
||||||
|
bc.s1[i] = ks1[i];
|
||||||
|
bc.s2[i] = ks2[i];
|
||||||
|
bc.s3[i] = ks3[i];
|
||||||
|
}
|
||||||
|
|
||||||
|
for (i = j = 0; i < BLOWFISH_ROUNDS + 2; ++i) {
|
||||||
|
#ifdef BIG_ENDIAN_HOST
|
||||||
|
((byte *) & data)[0] = key[j];
|
||||||
|
((byte *) & data)[1] = key[(j + 1) % keylen];
|
||||||
|
((byte *) & data)[2] = key[(j + 2) % keylen];
|
||||||
|
((byte *) & data)[3] = key[(j + 3) % keylen];
|
||||||
|
#else
|
||||||
|
((byte *) & data)[3] = key[j];
|
||||||
|
((byte *) & data)[2] = key[(j + 1) % keylen];
|
||||||
|
((byte *) & data)[1] = key[(j + 2) % keylen];
|
||||||
|
((byte *) & data)[0] = key[(j + 3) % keylen];
|
||||||
|
#endif
|
||||||
|
bc.p[i] ^= data;
|
||||||
|
j = (j + 4) % keylen;
|
||||||
|
}
|
||||||
|
|
||||||
|
datal = datar = 0;
|
||||||
|
for (i = 0; i < BLOWFISH_ROUNDS + 2; i += 2) {
|
||||||
|
do_encrypt(&datal, &datar);
|
||||||
|
bc.p[i] = datal;
|
||||||
|
bc.p[i + 1] = datar;
|
||||||
|
}
|
||||||
|
for (i = 0; i < 256; i += 2) {
|
||||||
|
do_encrypt(&datal, &datar);
|
||||||
|
bc.s0[i] = datal;
|
||||||
|
bc.s0[i + 1] = datar;
|
||||||
|
}
|
||||||
|
for (i = 0; i < 256; i += 2) {
|
||||||
|
do_encrypt(&datal, &datar);
|
||||||
|
bc.s1[i] = datal;
|
||||||
|
bc.s1[i + 1] = datar;
|
||||||
|
}
|
||||||
|
for (i = 0; i < 256; i += 2) {
|
||||||
|
do_encrypt(&datal, &datar);
|
||||||
|
bc.s2[i] = datal;
|
||||||
|
bc.s2[i + 1] = datar;
|
||||||
|
}
|
||||||
|
for (i = 0; i < 256; i += 2) {
|
||||||
|
do_encrypt(&datal, &datar);
|
||||||
|
bc.s3[i] = datal;
|
||||||
|
bc.s3[i + 1] = datar;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Check for weak key. A weak key is a key in which a value in */
|
||||||
|
/* the P-array (here c) occurs more than once per table. */
|
||||||
|
for (i = 0; i < 255; ++i) {
|
||||||
|
for (j = i + 1; j < 256; ++j) {
|
||||||
|
if ((bc.s0[i] == bc.s0[j]) || (bc.s1[i] == bc.s1[j]) ||
|
||||||
|
(bc.s2[i] == bc.s2[j]) || (bc.s3[i] == bc.s3[j]))
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int Blowfish::bf_setkey(byte * key, unsigned int keylen)
|
||||||
|
{
|
||||||
|
int rc = do_bf_setkey(key, keylen);
|
||||||
|
burn_stack(64);
|
||||||
|
return rc;
|
||||||
|
}
|
||||||
|
|
||||||
|
int Blowfish::bf_encrypt(byte * outbuf, byte * inbuf, unsigned int inbuf_len)
|
||||||
|
{
|
||||||
|
if (inbuf_len % 8)
|
||||||
|
return 1;
|
||||||
|
|
||||||
|
unsigned int i = 0;
|
||||||
|
while (i < inbuf_len) {
|
||||||
|
encrypt_block(outbuf + i, inbuf + i);
|
||||||
|
i += 8;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int Blowfish::bf_decrypt(byte * outbuf, byte * inbuf, unsigned int inbuf_len)
|
||||||
|
{
|
||||||
|
if (inbuf_len % 8)
|
||||||
|
return 1;
|
||||||
|
|
||||||
|
unsigned int i = 0;
|
||||||
|
while (i < inbuf_len) {
|
||||||
|
decrypt_block(outbuf + i, inbuf + i);
|
||||||
|
i += 8;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Blowfish::padNull(string *buf)
|
||||||
|
{
|
||||||
|
buf->append(1, (char)0x01);
|
||||||
|
string::size_type append_null = 8 - (buf->length() % 8);
|
||||||
|
buf->append(append_null, (char)0x00);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool Blowfish::unpadNull(string *buf)
|
||||||
|
{
|
||||||
|
if (buf->size() % 8)
|
||||||
|
return false;
|
||||||
|
string::size_type pos = buf->length() - 1;
|
||||||
|
while ((*buf)[pos] != (char)0x01) {
|
||||||
|
if (pos == 0)
|
||||||
|
return false;
|
||||||
|
--pos;
|
||||||
|
}
|
||||||
|
buf->erase(pos, buf->length() - pos);
|
||||||
|
return true;
|
||||||
|
}
|
|
@ -0,0 +1,110 @@
|
||||||
|
/***************************************************************************
|
||||||
|
* *
|
||||||
|
* copyright (C) 2003, 2004 by Michael Buesch *
|
||||||
|
* email: mbuesch@freenet.de *
|
||||||
|
* *
|
||||||
|
* blowfish.c - Blowfish encryption *
|
||||||
|
* Copyright (C) 1998, 2001, 2002 Free Software Foundation, Inc. *
|
||||||
|
* *
|
||||||
|
* This program is free software; you can redistribute it and/or modify *
|
||||||
|
* it under the terms of the GNU General Public License version 2 *
|
||||||
|
* as published by the Free Software Foundation. *
|
||||||
|
* *
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
|
#ifndef BLOWFISH_H
|
||||||
|
#define BLOWFISH_H
|
||||||
|
|
||||||
|
#include <stdint.h>
|
||||||
|
#include <string>
|
||||||
|
using std::string;
|
||||||
|
|
||||||
|
#define BLOWFISH_BLOCKSIZE 8
|
||||||
|
#define BLOWFISH_ROUNDS 16
|
||||||
|
#define CIPHER_ALGO_BLOWFISH 4 /* blowfish 128 bit key */
|
||||||
|
|
||||||
|
typedef uint8_t byte;
|
||||||
|
|
||||||
|
/** blowfish encryption algorithm.
|
||||||
|
* Derived from libgcrypt-1.1.12
|
||||||
|
*/
|
||||||
|
|
||||||
|
class Blowfish
|
||||||
|
{
|
||||||
|
struct BLOWFISH_context
|
||||||
|
{
|
||||||
|
uint32_t s0[256];
|
||||||
|
uint32_t s1[256];
|
||||||
|
uint32_t s2[256];
|
||||||
|
uint32_t s3[256];
|
||||||
|
uint32_t p[BLOWFISH_ROUNDS+2];
|
||||||
|
};
|
||||||
|
|
||||||
|
public:
|
||||||
|
Blowfish();
|
||||||
|
|
||||||
|
/** set key to encrypt. if return == 1, it is a weak key. */
|
||||||
|
int bf_setkey( byte *key, unsigned int keylen );
|
||||||
|
/** encrypt inbuf and return it in outbuf.
|
||||||
|
* inbuf and outbuf have to be: buf % 8 == 0
|
||||||
|
* You may check this with getPaddedLen() and pad with NULL.
|
||||||
|
*/
|
||||||
|
int bf_encrypt( byte *outbuf, byte *inbuf, unsigned int inbuf_len );
|
||||||
|
/** decrypt inbuf and return it in outbuf.
|
||||||
|
* inbuf and outbuf have to be: buf % 8 == 0
|
||||||
|
* You may check this with getPaddedLen() and pad with NULL.
|
||||||
|
*/
|
||||||
|
int bf_decrypt( byte *outbuf, byte *inbuf, unsigned int inbuf_len );
|
||||||
|
/** returns the length, the sting has to be padded to */
|
||||||
|
static unsigned int getPaddedLen(unsigned int inLen)
|
||||||
|
{ return ((8 - (inLen % 8)) + inLen); }
|
||||||
|
/** pad up to 8 bytes. */
|
||||||
|
static void padNull(string *buf);
|
||||||
|
/** remove padded data */
|
||||||
|
static bool unpadNull(string *buf);
|
||||||
|
|
||||||
|
protected:
|
||||||
|
#if BLOWFISH_ROUNDS != 16
|
||||||
|
uint32_t function_F( uint32_t x)
|
||||||
|
{
|
||||||
|
uint16_t a, b, c, d;
|
||||||
|
#ifdef BIG_ENDIAN_HOST
|
||||||
|
a = ((byte *) & x)[0];
|
||||||
|
b = ((byte *) & x)[1];
|
||||||
|
c = ((byte *) & x)[2];
|
||||||
|
d = ((byte *) & x)[3];
|
||||||
|
#else
|
||||||
|
a = ((byte *) & x)[3];
|
||||||
|
b = ((byte *) & x)[2];
|
||||||
|
c = ((byte *) & x)[1];
|
||||||
|
d = ((byte *) & x)[0];
|
||||||
|
#endif
|
||||||
|
return ((bc.s0[a] + bc.s1[b]) ^ bc.s2[c]) + bc.s3[d];
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
void R(uint32_t &l, uint32_t &r, uint32_t i, uint32_t *p,
|
||||||
|
uint32_t *s0, uint32_t *s1, uint32_t *s2, uint32_t *s3)
|
||||||
|
{
|
||||||
|
l ^= p[i];
|
||||||
|
#ifdef BIG_ENDIAN_HOST
|
||||||
|
r ^= (( s0[((byte*)&l)[0]] + s1[((byte*)&l)[1]])
|
||||||
|
^ s2[((byte*)&l)[2]]) + s3[((byte*)&l)[3]];
|
||||||
|
#else
|
||||||
|
r ^= (( s0[((byte*)&l)[3]] + s1[((byte*)&l)[2]])
|
||||||
|
^ s2[((byte*)&l)[1]]) + s3[((byte*)&l)[0]];
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
void encrypt_block(byte *outbuf, byte *inbuf);
|
||||||
|
void decrypt_block(byte *outbuf, byte *inbuf);
|
||||||
|
void burn_stack(int bytes);
|
||||||
|
void do_encrypt(uint32_t *ret_xl, uint32_t *ret_xr);
|
||||||
|
void do_decrypt(uint32_t *ret_xl, uint32_t *ret_xr);
|
||||||
|
void do_encrypt_block(byte *outbuf, byte *inbuf);
|
||||||
|
void do_decrypt_block(byte *outbuf, byte *inbuf);
|
||||||
|
int do_bf_setkey(byte *key, unsigned int keylen);
|
||||||
|
|
||||||
|
protected:
|
||||||
|
struct BLOWFISH_context bc;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
|
@ -0,0 +1,158 @@
|
||||||
|
#ifndef _RIJNDAEL_H_
|
||||||
|
#define _RIJNDAEL_H_
|
||||||
|
|
||||||
|
// This file is based on Szymon Stefanek's Rijndael implementation.
|
||||||
|
// All I have done is changed the variable type definitions, not more.
|
||||||
|
// The original header is below.
|
||||||
|
|
||||||
|
//
|
||||||
|
// File : rijndael.h
|
||||||
|
// Creation date : Sun Nov 5 2000 03:21:05 CEST
|
||||||
|
// Author : Szymon Stefanek (stefanek@tin.it)
|
||||||
|
//
|
||||||
|
// Another implementation of the Rijndael cipher.
|
||||||
|
// This is intended to be an easily usable library file.
|
||||||
|
// This code is public domain.
|
||||||
|
// Based on the Vincent Rijmen and K.U.Leuven implementation 2.4.
|
||||||
|
//
|
||||||
|
|
||||||
|
//
|
||||||
|
// Original Copyright notice:
|
||||||
|
//
|
||||||
|
// rijndael-alg-fst.c v2.4 April '2000
|
||||||
|
// rijndael-alg-fst.h
|
||||||
|
// rijndael-api-fst.c
|
||||||
|
// rijndael-api-fst.h
|
||||||
|
//
|
||||||
|
// Optimised ANSI C code
|
||||||
|
//
|
||||||
|
// authors: v1.0: Antoon Bosselaers
|
||||||
|
// v2.0: Vincent Rijmen, K.U.Leuven
|
||||||
|
// v2.3: Paulo Barreto
|
||||||
|
// v2.4: Vincent Rijmen, K.U.Leuven
|
||||||
|
//
|
||||||
|
// This code is placed in the public domain.
|
||||||
|
//
|
||||||
|
|
||||||
|
//
|
||||||
|
// This implementation works on 128 , 192 , 256 bit keys
|
||||||
|
// and on 128 bit blocks
|
||||||
|
//
|
||||||
|
|
||||||
|
//
|
||||||
|
// Example of usage:
|
||||||
|
//
|
||||||
|
// // Input data
|
||||||
|
// unsigned char key[32]; // The key
|
||||||
|
// initializeYour256BitKey(); // Obviously initialized with sth
|
||||||
|
// const unsigned char * plainText = getYourPlainText(); // Your plain text
|
||||||
|
// int plainTextLen = strlen(plainText); // Plain text length
|
||||||
|
//
|
||||||
|
// // Encrypting
|
||||||
|
// Rijndael rin;
|
||||||
|
// unsigned char output[plainTextLen + 16];
|
||||||
|
//
|
||||||
|
// rin.init(Rijndael::CBC,Rijndael::Encrypt,key,Rijndael::Key32Bytes);
|
||||||
|
// // It is a good idea to check the error code
|
||||||
|
// int len = rin.padEncrypt(plainText,len,output);
|
||||||
|
// if(len >= 0)useYourEncryptedText();
|
||||||
|
// else encryptError(len);
|
||||||
|
//
|
||||||
|
// // Decrypting: we can reuse the same object
|
||||||
|
// unsigned char output2[len];
|
||||||
|
// rin.init(Rijndael::CBC,Rijndael::Decrypt,key,Rijndael::Key32Bytes));
|
||||||
|
// len = rin.padDecrypt(output,len,output2);
|
||||||
|
// if(len >= 0)useYourDecryptedText();
|
||||||
|
// else decryptError(len);
|
||||||
|
//
|
||||||
|
|
||||||
|
#define _MAX_KEY_COLUMNS (256/32)
|
||||||
|
#define _MAX_ROUNDS 14
|
||||||
|
#define MAX_IV_SIZE 16
|
||||||
|
|
||||||
|
#include <qglobal.h>
|
||||||
|
|
||||||
|
// Error codes
|
||||||
|
#define RIJNDAEL_SUCCESS 0
|
||||||
|
#define RIJNDAEL_UNSUPPORTED_MODE -1
|
||||||
|
#define RIJNDAEL_UNSUPPORTED_DIRECTION -2
|
||||||
|
#define RIJNDAEL_UNSUPPORTED_KEY_LENGTH -3
|
||||||
|
#define RIJNDAEL_BAD_KEY -4
|
||||||
|
#define RIJNDAEL_NOT_INITIALIZED -5
|
||||||
|
#define RIJNDAEL_BAD_DIRECTION -6
|
||||||
|
#define RIJNDAEL_CORRUPTED_DATA -7
|
||||||
|
|
||||||
|
class Rijndael
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
enum Direction { Encrypt , Decrypt };
|
||||||
|
enum Mode { ECB , CBC , CFB1 };
|
||||||
|
enum KeyLength { Key16Bytes , Key24Bytes , Key32Bytes };
|
||||||
|
//
|
||||||
|
// Creates a Rijndael cipher object
|
||||||
|
// You have to call init() before you can encrypt or decrypt stuff
|
||||||
|
//
|
||||||
|
Rijndael();
|
||||||
|
~Rijndael();
|
||||||
|
protected:
|
||||||
|
// Internal stuff
|
||||||
|
enum State { Valid , Invalid };
|
||||||
|
|
||||||
|
State m_state;
|
||||||
|
Mode m_mode;
|
||||||
|
Direction m_direction;
|
||||||
|
UINT8 m_initVector[MAX_IV_SIZE];
|
||||||
|
UINT32 m_uRounds;
|
||||||
|
UINT8 m_expandedKey[_MAX_ROUNDS+1][4][4];
|
||||||
|
public:
|
||||||
|
//////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
// API
|
||||||
|
//////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
// init(): Initializes the crypt session
|
||||||
|
// Returns RIJNDAEL_SUCCESS or an error code
|
||||||
|
// mode : Rijndael::ECB, Rijndael::CBC or Rijndael::CFB1
|
||||||
|
// You have to use the same mode for encrypting and decrypting
|
||||||
|
// dir : Rijndael::Encrypt or Rijndael::Decrypt
|
||||||
|
// A cipher instance works only in one direction
|
||||||
|
// (Well , it could be easily modified to work in both
|
||||||
|
// directions with a single init() call, but it looks
|
||||||
|
// useless to me...anyway , it is a matter of generating
|
||||||
|
// two expanded keys)
|
||||||
|
// key : array of unsigned octets , it can be 16 , 24 or 32 bytes long
|
||||||
|
// this CAN be binary data (it is not expected to be null terminated)
|
||||||
|
// keyLen : Rijndael::Key16Bytes , Rijndael::Key24Bytes or Rijndael::Key32Bytes
|
||||||
|
// initVector: initialization vector, you will usually use 0 here
|
||||||
|
int init(Mode mode,Direction dir,const UINT8 *key,KeyLength keyLen,UINT8 * initVector = 0);
|
||||||
|
// Encrypts the input array (can be binary data)
|
||||||
|
// The input array length must be a multiple of 16 bytes, the remaining part
|
||||||
|
// is DISCARDED.
|
||||||
|
// so it actually encrypts inputLen / 128 blocks of input and puts it in outBuffer
|
||||||
|
// Input len is in BITS!
|
||||||
|
// outBuffer must be at least inputLen / 8 bytes long.
|
||||||
|
// Returns the encrypted buffer length in BITS or an error code < 0 in case of error
|
||||||
|
int blockEncrypt(const UINT8 *input, int inputLen, UINT8 *outBuffer);
|
||||||
|
// Encrypts the input array (can be binary data)
|
||||||
|
// The input array can be any length , it is automatically padded on a 16 byte boundary.
|
||||||
|
// Input len is in BYTES!
|
||||||
|
// outBuffer must be at least (inputLen + 16) bytes long
|
||||||
|
// Returns the encrypted buffer length in BYTES or an error code < 0 in case of error
|
||||||
|
int padEncrypt(const UINT8 *input, int inputOctets, UINT8 *outBuffer);
|
||||||
|
// Decrypts the input vector
|
||||||
|
// Input len is in BITS!
|
||||||
|
// outBuffer must be at least inputLen / 8 bytes long
|
||||||
|
// Returns the decrypted buffer length in BITS and an error code < 0 in case of error
|
||||||
|
int blockDecrypt(const UINT8 *input, int inputLen, UINT8 *outBuffer);
|
||||||
|
// Decrypts the input vector
|
||||||
|
// Input len is in BYTES!
|
||||||
|
// outBuffer must be at least inputLen bytes long
|
||||||
|
// Returns the decrypted buffer length in BYTES and an error code < 0 in case of error
|
||||||
|
int padDecrypt(const UINT8 *input, int inputOctets, UINT8 *outBuffer);
|
||||||
|
protected:
|
||||||
|
void keySched(UINT8 key[_MAX_KEY_COLUMNS][4]);
|
||||||
|
void keyEncToDec();
|
||||||
|
void encrypt(const UINT8 a[16], UINT8 b[16]);
|
||||||
|
void decrypt(const UINT8 a[16], UINT8 b[16]);
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // _RIJNDAEL_H_
|
|
@ -0,0 +1,261 @@
|
||||||
|
/*
|
||||||
|
100% free public domain implementation of the SHA-1 algorithm
|
||||||
|
by Dominik Reichl <dominik.reichl@t-online.de>
|
||||||
|
|
||||||
|
Version 1.5 - 2005-01-01
|
||||||
|
- 64-bit compiler compatibility added
|
||||||
|
- Made variable wiping optional (define SHA1_WIPE_VARIABLES)
|
||||||
|
- Removed unnecessary variable initializations
|
||||||
|
- ROL32 improvement for the Microsoft compiler (using _rotl)
|
||||||
|
|
||||||
|
======== Test Vectors (from FIPS PUB 180-1) ========
|
||||||
|
|
||||||
|
SHA1("abc") =
|
||||||
|
A9993E36 4706816A BA3E2571 7850C26C 9CD0D89D
|
||||||
|
|
||||||
|
SHA1("abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq") =
|
||||||
|
84983E44 1C3BD26E BAAE4AA1 F95129E5 E54670F1
|
||||||
|
|
||||||
|
SHA1(A million repetitions of "a") =
|
||||||
|
34AA973C D4C4DAA4 F61EEB2B DBAD2731 6534016F
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "sha1.h"
|
||||||
|
|
||||||
|
#define SHA1_MAX_FILE_BUFFER 8000
|
||||||
|
|
||||||
|
// Rotate x bits to the left
|
||||||
|
#ifndef ROL32
|
||||||
|
#ifdef _MSC_VER
|
||||||
|
#define ROL32(_val32, _nBits) _rotl(_val32, _nBits)
|
||||||
|
#else
|
||||||
|
#define ROL32(_val32, _nBits) (((_val32)<<(_nBits))|((_val32)>>(32-(_nBits))))
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef SHA1_LITTLE_ENDIAN
|
||||||
|
#define SHABLK0(i) (m_block->l[i] = \
|
||||||
|
(ROL32(m_block->l[i],24) & 0xFF00FF00) | (ROL32(m_block->l[i],8) & 0x00FF00FF))
|
||||||
|
#else
|
||||||
|
#define SHABLK0(i) (m_block->l[i])
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define SHABLK(i) (m_block->l[i&15] = ROL32(m_block->l[(i+13)&15] ^ m_block->l[(i+8)&15] \
|
||||||
|
^ m_block->l[(i+2)&15] ^ m_block->l[i&15],1))
|
||||||
|
|
||||||
|
// SHA-1 rounds
|
||||||
|
#define _R0(v,w,x,y,z,i) { z+=((w&(x^y))^y)+SHABLK0(i)+0x5A827999+ROL32(v,5); w=ROL32(w,30); }
|
||||||
|
#define _R1(v,w,x,y,z,i) { z+=((w&(x^y))^y)+SHABLK(i)+0x5A827999+ROL32(v,5); w=ROL32(w,30); }
|
||||||
|
#define _R2(v,w,x,y,z,i) { z+=(w^x^y)+SHABLK(i)+0x6ED9EBA1+ROL32(v,5); w=ROL32(w,30); }
|
||||||
|
#define _R3(v,w,x,y,z,i) { z+=(((w|x)&y)|(w&x))+SHABLK(i)+0x8F1BBCDC+ROL32(v,5); w=ROL32(w,30); }
|
||||||
|
#define _R4(v,w,x,y,z,i) { z+=(w^x^y)+SHABLK(i)+0xCA62C1D6+ROL32(v,5); w=ROL32(w,30); }
|
||||||
|
|
||||||
|
CSHA1::CSHA1()
|
||||||
|
{
|
||||||
|
m_block = (SHA1_WORKSPACE_BLOCK *)m_workspace;
|
||||||
|
|
||||||
|
Reset();
|
||||||
|
}
|
||||||
|
|
||||||
|
CSHA1::~CSHA1()
|
||||||
|
{
|
||||||
|
Reset();
|
||||||
|
}
|
||||||
|
|
||||||
|
void CSHA1::Reset()
|
||||||
|
{
|
||||||
|
// SHA1 initialization constants
|
||||||
|
m_state[0] = 0x67452301;
|
||||||
|
m_state[1] = 0xEFCDAB89;
|
||||||
|
m_state[2] = 0x98BADCFE;
|
||||||
|
m_state[3] = 0x10325476;
|
||||||
|
m_state[4] = 0xC3D2E1F0;
|
||||||
|
|
||||||
|
m_count[0] = 0;
|
||||||
|
m_count[1] = 0;
|
||||||
|
}
|
||||||
|
void CSHA1::Update(unsigned char* data, int len){
|
||||||
|
|
||||||
|
UINT_32 i, j;
|
||||||
|
|
||||||
|
j = (m_count[0] >> 3) & 63;
|
||||||
|
|
||||||
|
if((m_count[0] += len << 3) < (len << 3)) m_count[1]++;
|
||||||
|
|
||||||
|
m_count[1] += (len >> 29);
|
||||||
|
|
||||||
|
if((j + len) > 63)
|
||||||
|
{
|
||||||
|
i = 64 - j;
|
||||||
|
memcpy(&m_buffer[j], data, i);
|
||||||
|
Transform(m_state, m_buffer);
|
||||||
|
|
||||||
|
for( ; i + 63 < len; i += 64) Transform(m_state, &data[i]);
|
||||||
|
|
||||||
|
j = 0;
|
||||||
|
}
|
||||||
|
else i = 0;
|
||||||
|
|
||||||
|
memcpy(&m_buffer[j], &data[i], len - i);
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void CSHA1::Transform(UINT_32 *state, UINT_8 *buffer)
|
||||||
|
{
|
||||||
|
// Copy state[] to working vars
|
||||||
|
UINT_32 a = state[0], b = state[1], c = state[2], d = state[3], e = state[4];
|
||||||
|
|
||||||
|
memcpy(m_block, buffer, 64);
|
||||||
|
|
||||||
|
// 4 rounds of 20 operations each. Loop unrolled.
|
||||||
|
_R0(a,b,c,d,e, 0); _R0(e,a,b,c,d, 1); _R0(d,e,a,b,c, 2); _R0(c,d,e,a,b, 3);
|
||||||
|
_R0(b,c,d,e,a, 4); _R0(a,b,c,d,e, 5); _R0(e,a,b,c,d, 6); _R0(d,e,a,b,c, 7);
|
||||||
|
_R0(c,d,e,a,b, 8); _R0(b,c,d,e,a, 9); _R0(a,b,c,d,e,10); _R0(e,a,b,c,d,11);
|
||||||
|
_R0(d,e,a,b,c,12); _R0(c,d,e,a,b,13); _R0(b,c,d,e,a,14); _R0(a,b,c,d,e,15);
|
||||||
|
_R1(e,a,b,c,d,16); _R1(d,e,a,b,c,17); _R1(c,d,e,a,b,18); _R1(b,c,d,e,a,19);
|
||||||
|
_R2(a,b,c,d,e,20); _R2(e,a,b,c,d,21); _R2(d,e,a,b,c,22); _R2(c,d,e,a,b,23);
|
||||||
|
_R2(b,c,d,e,a,24); _R2(a,b,c,d,e,25); _R2(e,a,b,c,d,26); _R2(d,e,a,b,c,27);
|
||||||
|
_R2(c,d,e,a,b,28); _R2(b,c,d,e,a,29); _R2(a,b,c,d,e,30); _R2(e,a,b,c,d,31);
|
||||||
|
_R2(d,e,a,b,c,32); _R2(c,d,e,a,b,33); _R2(b,c,d,e,a,34); _R2(a,b,c,d,e,35);
|
||||||
|
_R2(e,a,b,c,d,36); _R2(d,e,a,b,c,37); _R2(c,d,e,a,b,38); _R2(b,c,d,e,a,39);
|
||||||
|
_R3(a,b,c,d,e,40); _R3(e,a,b,c,d,41); _R3(d,e,a,b,c,42); _R3(c,d,e,a,b,43);
|
||||||
|
_R3(b,c,d,e,a,44); _R3(a,b,c,d,e,45); _R3(e,a,b,c,d,46); _R3(d,e,a,b,c,47);
|
||||||
|
_R3(c,d,e,a,b,48); _R3(b,c,d,e,a,49); _R3(a,b,c,d,e,50); _R3(e,a,b,c,d,51);
|
||||||
|
_R3(d,e,a,b,c,52); _R3(c,d,e,a,b,53); _R3(b,c,d,e,a,54); _R3(a,b,c,d,e,55);
|
||||||
|
_R3(e,a,b,c,d,56); _R3(d,e,a,b,c,57); _R3(c,d,e,a,b,58); _R3(b,c,d,e,a,59);
|
||||||
|
_R4(a,b,c,d,e,60); _R4(e,a,b,c,d,61); _R4(d,e,a,b,c,62); _R4(c,d,e,a,b,63);
|
||||||
|
_R4(b,c,d,e,a,64); _R4(a,b,c,d,e,65); _R4(e,a,b,c,d,66); _R4(d,e,a,b,c,67);
|
||||||
|
_R4(c,d,e,a,b,68); _R4(b,c,d,e,a,69); _R4(a,b,c,d,e,70); _R4(e,a,b,c,d,71);
|
||||||
|
_R4(d,e,a,b,c,72); _R4(c,d,e,a,b,73); _R4(b,c,d,e,a,74); _R4(a,b,c,d,e,75);
|
||||||
|
_R4(e,a,b,c,d,76); _R4(d,e,a,b,c,77); _R4(c,d,e,a,b,78); _R4(b,c,d,e,a,79);
|
||||||
|
|
||||||
|
// Add the working vars back into state
|
||||||
|
state[0] += a;
|
||||||
|
state[1] += b;
|
||||||
|
state[2] += c;
|
||||||
|
state[3] += d;
|
||||||
|
state[4] += e;
|
||||||
|
|
||||||
|
// Wipe variables
|
||||||
|
#ifdef SHA1_WIPE_VARIABLES
|
||||||
|
a = b = c = d = e = 0;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Hash in file contents
|
||||||
|
bool CSHA1::HashFile(char *szFileName)
|
||||||
|
{
|
||||||
|
unsigned long ulFileSize, ulRest, ulBlocks;
|
||||||
|
unsigned long i;
|
||||||
|
UINT_8 uData[SHA1_MAX_FILE_BUFFER];
|
||||||
|
FILE *fIn;
|
||||||
|
|
||||||
|
if(szFileName == NULL) return false;
|
||||||
|
|
||||||
|
fIn = fopen(szFileName, "rb");
|
||||||
|
if(fIn == NULL) return false;
|
||||||
|
|
||||||
|
fseek(fIn, 0, SEEK_END);
|
||||||
|
ulFileSize = (unsigned long)ftell(fIn);
|
||||||
|
fseek(fIn, 0, SEEK_SET);
|
||||||
|
|
||||||
|
if(ulFileSize != 0)
|
||||||
|
{
|
||||||
|
ulBlocks = ulFileSize / SHA1_MAX_FILE_BUFFER;
|
||||||
|
ulRest = ulFileSize % SHA1_MAX_FILE_BUFFER;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ulBlocks = 0;
|
||||||
|
ulRest = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
for(i = 0; i < ulBlocks; i++)
|
||||||
|
{
|
||||||
|
fread(uData, 1, SHA1_MAX_FILE_BUFFER, fIn);
|
||||||
|
Update((UINT_8 *)uData, SHA1_MAX_FILE_BUFFER);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(ulRest != 0)
|
||||||
|
{
|
||||||
|
fread(uData, 1, ulRest, fIn);
|
||||||
|
Update((UINT_8 *)uData, ulRest);
|
||||||
|
}
|
||||||
|
|
||||||
|
fclose(fIn); fIn = NULL;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CSHA1::Final()
|
||||||
|
{
|
||||||
|
UINT_32 i;
|
||||||
|
UINT_8 finalcount[8];
|
||||||
|
|
||||||
|
for(i = 0; i < 8; i++)
|
||||||
|
finalcount[i] = (UINT_8)((m_count[((i >= 4) ? 0 : 1)]
|
||||||
|
>> ((3 - (i & 3)) * 8) ) & 255); // Endian independent
|
||||||
|
|
||||||
|
Update((UINT_8 *)"\200", 1);
|
||||||
|
|
||||||
|
while ((m_count[0] & 504) != 448)
|
||||||
|
Update((UINT_8 *)"\0", 1);
|
||||||
|
|
||||||
|
Update(finalcount, 8); // Cause a SHA1Transform()
|
||||||
|
|
||||||
|
for(i = 0; i < 20; i++)
|
||||||
|
{
|
||||||
|
m_digest[i] = (UINT_8)((m_state[i >> 2] >> ((3 - (i & 3)) * 8) ) & 255);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Wipe variables for security reasons
|
||||||
|
#ifdef SHA1_WIPE_VARIABLES
|
||||||
|
i = 0;
|
||||||
|
memset(m_buffer, 0, 64);
|
||||||
|
memset(m_state, 0, 20);
|
||||||
|
memset(m_count, 0, 8);
|
||||||
|
memset(finalcount, 0, 8);
|
||||||
|
Transform(m_state, m_buffer);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get the final hash as a pre-formatted string
|
||||||
|
void CSHA1::ReportHash(char *szReport, unsigned char uReportType)
|
||||||
|
{
|
||||||
|
unsigned char i;
|
||||||
|
char szTemp[16];
|
||||||
|
|
||||||
|
if(szReport == NULL) return;
|
||||||
|
|
||||||
|
if(uReportType == REPORT_HEX)
|
||||||
|
{
|
||||||
|
sprintf(szTemp, "%02X", m_digest[0]);
|
||||||
|
strcat(szReport, szTemp);
|
||||||
|
|
||||||
|
for(i = 1; i < 20; i++)
|
||||||
|
{
|
||||||
|
sprintf(szTemp, " %02X", m_digest[i]);
|
||||||
|
strcat(szReport, szTemp);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if(uReportType == REPORT_DIGIT)
|
||||||
|
{
|
||||||
|
sprintf(szTemp, "%u", m_digest[0]);
|
||||||
|
strcat(szReport, szTemp);
|
||||||
|
|
||||||
|
for(i = 1; i < 20; i++)
|
||||||
|
{
|
||||||
|
sprintf(szTemp, " %u", m_digest[i]);
|
||||||
|
strcat(szReport, szTemp);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else strcpy(szReport, "Error: Unknown report type!");
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get the raw message digest
|
||||||
|
void CSHA1::GetHash(UINT_8 *puDest)
|
||||||
|
{
|
||||||
|
memcpy(puDest, m_digest, 20);
|
||||||
|
}
|
|
@ -0,0 +1,99 @@
|
||||||
|
/*
|
||||||
|
100% free public domain implementation of the SHA-1 algorithm
|
||||||
|
by Dominik Reichl <dominik.reichl@t-online.de>
|
||||||
|
|
||||||
|
Version 1.5 - 2005-01-01
|
||||||
|
- 64-bit compiler compatibility added
|
||||||
|
- Made variable wiping optional (define SHA1_WIPE_VARIABLES)
|
||||||
|
- Removed unnecessary variable initializations
|
||||||
|
- ROL32 improvement for the Microsoft compiler (using _rotl)
|
||||||
|
|
||||||
|
======== Test Vectors (from FIPS PUB 180-1) ========
|
||||||
|
|
||||||
|
SHA1("abc") =
|
||||||
|
A9993E36 4706816A BA3E2571 7850C26C 9CD0D89D
|
||||||
|
|
||||||
|
SHA1("abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq") =
|
||||||
|
84983E44 1C3BD26E BAAE4AA1 F95129E5 E54670F1
|
||||||
|
|
||||||
|
SHA1(A million repetitions of "a") =
|
||||||
|
34AA973C D4C4DAA4 F61EEB2B DBAD2731 6534016F
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef ___SHA1_HDR___
|
||||||
|
#define ___SHA1_HDR___
|
||||||
|
|
||||||
|
#include <stdio.h> // Needed for file access
|
||||||
|
#include <memory.h> // Needed for memset and memcpy
|
||||||
|
#include <string.h> // Needed for strcat and strcpy
|
||||||
|
|
||||||
|
|
||||||
|
// If you're compiling big endian, just comment out the following line
|
||||||
|
#define SHA1_LITTLE_ENDIAN
|
||||||
|
|
||||||
|
// #define or #undef this, if you want the CSHA1 class to wipe all
|
||||||
|
// temporary variables after processing
|
||||||
|
#define SHA1_WIPE_VARIABLES
|
||||||
|
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Define 8- and 32-bit variables
|
||||||
|
|
||||||
|
#ifndef UINT_32
|
||||||
|
#define UINT_8 unsigned char
|
||||||
|
#if (ULONG_MAX == 0xFFFFFFFF)
|
||||||
|
#define UINT_32 unsigned long
|
||||||
|
#else
|
||||||
|
#define UINT_32 unsigned int
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Declare SHA1 workspace
|
||||||
|
|
||||||
|
typedef union
|
||||||
|
{
|
||||||
|
UINT_8 c[64];
|
||||||
|
UINT_32 l[16];
|
||||||
|
} SHA1_WORKSPACE_BLOCK;
|
||||||
|
|
||||||
|
class CSHA1
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
// Two different formats for ReportHash(...)
|
||||||
|
enum
|
||||||
|
{
|
||||||
|
REPORT_HEX = 0,
|
||||||
|
REPORT_DIGIT = 1
|
||||||
|
};
|
||||||
|
|
||||||
|
// Constructor and Destructor
|
||||||
|
CSHA1();
|
||||||
|
~CSHA1();
|
||||||
|
|
||||||
|
UINT_32 m_state[5];
|
||||||
|
UINT_32 m_count[2];
|
||||||
|
UINT_8 m_buffer[64];
|
||||||
|
UINT_8 m_digest[20];
|
||||||
|
|
||||||
|
void Reset();
|
||||||
|
|
||||||
|
// Update the hash value
|
||||||
|
void Update(unsigned char* data, int len);
|
||||||
|
bool HashFile(char *szFileName);
|
||||||
|
|
||||||
|
// Finalize hash and report
|
||||||
|
void Final();
|
||||||
|
void ReportHash(char *szReport, unsigned char uReportType = REPORT_HEX);
|
||||||
|
void GetHash(UINT_8 *puDest);
|
||||||
|
|
||||||
|
private:
|
||||||
|
// Private SHA-1 transformation
|
||||||
|
void Transform(UINT_32 *state, UINT_8 *buffer);
|
||||||
|
|
||||||
|
// Member variables
|
||||||
|
UINT_8 m_workspace[64];
|
||||||
|
SHA1_WORKSPACE_BLOCK *m_block; // SHA1 pointer to the byte array above
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
|
@ -0,0 +1,369 @@
|
||||||
|
/*
|
||||||
|
* FIPS-180-2 compliant SHA-256 implementation
|
||||||
|
*
|
||||||
|
* Copyright (C) 2001-2003 Christophe Devine
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* 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, write to the Free Software
|
||||||
|
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
#include "sha256.h"
|
||||||
|
|
||||||
|
#define GET_UINT32(n,b,i) \
|
||||||
|
{ \
|
||||||
|
(n) = ( (uint32) (b)[(i) ] << 24 ) \
|
||||||
|
| ( (uint32) (b)[(i) + 1] << 16 ) \
|
||||||
|
| ( (uint32) (b)[(i) + 2] << 8 ) \
|
||||||
|
| ( (uint32) (b)[(i) + 3] ); \
|
||||||
|
}
|
||||||
|
|
||||||
|
#define PUT_UINT32(n,b,i) \
|
||||||
|
{ \
|
||||||
|
(b)[(i) ] = (uint8) ( (n) >> 24 ); \
|
||||||
|
(b)[(i) + 1] = (uint8) ( (n) >> 16 ); \
|
||||||
|
(b)[(i) + 2] = (uint8) ( (n) >> 8 ); \
|
||||||
|
(b)[(i) + 3] = (uint8) ( (n) ); \
|
||||||
|
}
|
||||||
|
|
||||||
|
void sha256_starts( sha256_context *ctx )
|
||||||
|
{
|
||||||
|
ctx->total[0] = 0;
|
||||||
|
ctx->total[1] = 0;
|
||||||
|
|
||||||
|
ctx->state[0] = 0x6A09E667;
|
||||||
|
ctx->state[1] = 0xBB67AE85;
|
||||||
|
ctx->state[2] = 0x3C6EF372;
|
||||||
|
ctx->state[3] = 0xA54FF53A;
|
||||||
|
ctx->state[4] = 0x510E527F;
|
||||||
|
ctx->state[5] = 0x9B05688C;
|
||||||
|
ctx->state[6] = 0x1F83D9AB;
|
||||||
|
ctx->state[7] = 0x5BE0CD19;
|
||||||
|
}
|
||||||
|
|
||||||
|
void sha256_process( sha256_context *ctx, uint8 data[64] )
|
||||||
|
{
|
||||||
|
uint32 temp1, temp2, W[64];
|
||||||
|
uint32 A, B, C, D, E, F, G, H;
|
||||||
|
|
||||||
|
GET_UINT32( W[0], data, 0 );
|
||||||
|
GET_UINT32( W[1], data, 4 );
|
||||||
|
GET_UINT32( W[2], data, 8 );
|
||||||
|
GET_UINT32( W[3], data, 12 );
|
||||||
|
GET_UINT32( W[4], data, 16 );
|
||||||
|
GET_UINT32( W[5], data, 20 );
|
||||||
|
GET_UINT32( W[6], data, 24 );
|
||||||
|
GET_UINT32( W[7], data, 28 );
|
||||||
|
GET_UINT32( W[8], data, 32 );
|
||||||
|
GET_UINT32( W[9], data, 36 );
|
||||||
|
GET_UINT32( W[10], data, 40 );
|
||||||
|
GET_UINT32( W[11], data, 44 );
|
||||||
|
GET_UINT32( W[12], data, 48 );
|
||||||
|
GET_UINT32( W[13], data, 52 );
|
||||||
|
GET_UINT32( W[14], data, 56 );
|
||||||
|
GET_UINT32( W[15], data, 60 );
|
||||||
|
|
||||||
|
#define SHR(x,n) ((x & 0xFFFFFFFF) >> n)
|
||||||
|
#define ROTR(x,n) (SHR(x,n) | (x << (32 - n)))
|
||||||
|
|
||||||
|
#define S0(x) (ROTR(x, 7) ^ ROTR(x,18) ^ SHR(x, 3))
|
||||||
|
#define S1(x) (ROTR(x,17) ^ ROTR(x,19) ^ SHR(x,10))
|
||||||
|
|
||||||
|
#define S2(x) (ROTR(x, 2) ^ ROTR(x,13) ^ ROTR(x,22))
|
||||||
|
#define S3(x) (ROTR(x, 6) ^ ROTR(x,11) ^ ROTR(x,25))
|
||||||
|
|
||||||
|
#define F0(x,y,z) ((x & y) | (z & (x | y)))
|
||||||
|
#define F1(x,y,z) (z ^ (x & (y ^ z)))
|
||||||
|
|
||||||
|
#define R(t) \
|
||||||
|
( \
|
||||||
|
W[t] = S1(W[t - 2]) + W[t - 7] + \
|
||||||
|
S0(W[t - 15]) + W[t - 16] \
|
||||||
|
)
|
||||||
|
|
||||||
|
#define P(a,b,c,d,e,f,g,h,x,K) \
|
||||||
|
{ \
|
||||||
|
temp1 = h + S3(e) + F1(e,f,g) + K + x; \
|
||||||
|
temp2 = S2(a) + F0(a,b,c); \
|
||||||
|
d += temp1; h = temp1 + temp2; \
|
||||||
|
}
|
||||||
|
|
||||||
|
A = ctx->state[0];
|
||||||
|
B = ctx->state[1];
|
||||||
|
C = ctx->state[2];
|
||||||
|
D = ctx->state[3];
|
||||||
|
E = ctx->state[4];
|
||||||
|
F = ctx->state[5];
|
||||||
|
G = ctx->state[6];
|
||||||
|
H = ctx->state[7];
|
||||||
|
|
||||||
|
P( A, B, C, D, E, F, G, H, W[ 0], 0x428A2F98 );
|
||||||
|
P( H, A, B, C, D, E, F, G, W[ 1], 0x71374491 );
|
||||||
|
P( G, H, A, B, C, D, E, F, W[ 2], 0xB5C0FBCF );
|
||||||
|
P( F, G, H, A, B, C, D, E, W[ 3], 0xE9B5DBA5 );
|
||||||
|
P( E, F, G, H, A, B, C, D, W[ 4], 0x3956C25B );
|
||||||
|
P( D, E, F, G, H, A, B, C, W[ 5], 0x59F111F1 );
|
||||||
|
P( C, D, E, F, G, H, A, B, W[ 6], 0x923F82A4 );
|
||||||
|
P( B, C, D, E, F, G, H, A, W[ 7], 0xAB1C5ED5 );
|
||||||
|
P( A, B, C, D, E, F, G, H, W[ 8], 0xD807AA98 );
|
||||||
|
P( H, A, B, C, D, E, F, G, W[ 9], 0x12835B01 );
|
||||||
|
P( G, H, A, B, C, D, E, F, W[10], 0x243185BE );
|
||||||
|
P( F, G, H, A, B, C, D, E, W[11], 0x550C7DC3 );
|
||||||
|
P( E, F, G, H, A, B, C, D, W[12], 0x72BE5D74 );
|
||||||
|
P( D, E, F, G, H, A, B, C, W[13], 0x80DEB1FE );
|
||||||
|
P( C, D, E, F, G, H, A, B, W[14], 0x9BDC06A7 );
|
||||||
|
P( B, C, D, E, F, G, H, A, W[15], 0xC19BF174 );
|
||||||
|
P( A, B, C, D, E, F, G, H, R(16), 0xE49B69C1 );
|
||||||
|
P( H, A, B, C, D, E, F, G, R(17), 0xEFBE4786 );
|
||||||
|
P( G, H, A, B, C, D, E, F, R(18), 0x0FC19DC6 );
|
||||||
|
P( F, G, H, A, B, C, D, E, R(19), 0x240CA1CC );
|
||||||
|
P( E, F, G, H, A, B, C, D, R(20), 0x2DE92C6F );
|
||||||
|
P( D, E, F, G, H, A, B, C, R(21), 0x4A7484AA );
|
||||||
|
P( C, D, E, F, G, H, A, B, R(22), 0x5CB0A9DC );
|
||||||
|
P( B, C, D, E, F, G, H, A, R(23), 0x76F988DA );
|
||||||
|
P( A, B, C, D, E, F, G, H, R(24), 0x983E5152 );
|
||||||
|
P( H, A, B, C, D, E, F, G, R(25), 0xA831C66D );
|
||||||
|
P( G, H, A, B, C, D, E, F, R(26), 0xB00327C8 );
|
||||||
|
P( F, G, H, A, B, C, D, E, R(27), 0xBF597FC7 );
|
||||||
|
P( E, F, G, H, A, B, C, D, R(28), 0xC6E00BF3 );
|
||||||
|
P( D, E, F, G, H, A, B, C, R(29), 0xD5A79147 );
|
||||||
|
P( C, D, E, F, G, H, A, B, R(30), 0x06CA6351 );
|
||||||
|
P( B, C, D, E, F, G, H, A, R(31), 0x14292967 );
|
||||||
|
P( A, B, C, D, E, F, G, H, R(32), 0x27B70A85 );
|
||||||
|
P( H, A, B, C, D, E, F, G, R(33), 0x2E1B2138 );
|
||||||
|
P( G, H, A, B, C, D, E, F, R(34), 0x4D2C6DFC );
|
||||||
|
P( F, G, H, A, B, C, D, E, R(35), 0x53380D13 );
|
||||||
|
P( E, F, G, H, A, B, C, D, R(36), 0x650A7354 );
|
||||||
|
P( D, E, F, G, H, A, B, C, R(37), 0x766A0ABB );
|
||||||
|
P( C, D, E, F, G, H, A, B, R(38), 0x81C2C92E );
|
||||||
|
P( B, C, D, E, F, G, H, A, R(39), 0x92722C85 );
|
||||||
|
P( A, B, C, D, E, F, G, H, R(40), 0xA2BFE8A1 );
|
||||||
|
P( H, A, B, C, D, E, F, G, R(41), 0xA81A664B );
|
||||||
|
P( G, H, A, B, C, D, E, F, R(42), 0xC24B8B70 );
|
||||||
|
P( F, G, H, A, B, C, D, E, R(43), 0xC76C51A3 );
|
||||||
|
P( E, F, G, H, A, B, C, D, R(44), 0xD192E819 );
|
||||||
|
P( D, E, F, G, H, A, B, C, R(45), 0xD6990624 );
|
||||||
|
P( C, D, E, F, G, H, A, B, R(46), 0xF40E3585 );
|
||||||
|
P( B, C, D, E, F, G, H, A, R(47), 0x106AA070 );
|
||||||
|
P( A, B, C, D, E, F, G, H, R(48), 0x19A4C116 );
|
||||||
|
P( H, A, B, C, D, E, F, G, R(49), 0x1E376C08 );
|
||||||
|
P( G, H, A, B, C, D, E, F, R(50), 0x2748774C );
|
||||||
|
P( F, G, H, A, B, C, D, E, R(51), 0x34B0BCB5 );
|
||||||
|
P( E, F, G, H, A, B, C, D, R(52), 0x391C0CB3 );
|
||||||
|
P( D, E, F, G, H, A, B, C, R(53), 0x4ED8AA4A );
|
||||||
|
P( C, D, E, F, G, H, A, B, R(54), 0x5B9CCA4F );
|
||||||
|
P( B, C, D, E, F, G, H, A, R(55), 0x682E6FF3 );
|
||||||
|
P( A, B, C, D, E, F, G, H, R(56), 0x748F82EE );
|
||||||
|
P( H, A, B, C, D, E, F, G, R(57), 0x78A5636F );
|
||||||
|
P( G, H, A, B, C, D, E, F, R(58), 0x84C87814 );
|
||||||
|
P( F, G, H, A, B, C, D, E, R(59), 0x8CC70208 );
|
||||||
|
P( E, F, G, H, A, B, C, D, R(60), 0x90BEFFFA );
|
||||||
|
P( D, E, F, G, H, A, B, C, R(61), 0xA4506CEB );
|
||||||
|
P( C, D, E, F, G, H, A, B, R(62), 0xBEF9A3F7 );
|
||||||
|
P( B, C, D, E, F, G, H, A, R(63), 0xC67178F2 );
|
||||||
|
|
||||||
|
ctx->state[0] += A;
|
||||||
|
ctx->state[1] += B;
|
||||||
|
ctx->state[2] += C;
|
||||||
|
ctx->state[3] += D;
|
||||||
|
ctx->state[4] += E;
|
||||||
|
ctx->state[5] += F;
|
||||||
|
ctx->state[6] += G;
|
||||||
|
ctx->state[7] += H;
|
||||||
|
}
|
||||||
|
|
||||||
|
void sha256_update( sha256_context *ctx, uint8 *input, uint32 length )
|
||||||
|
{
|
||||||
|
uint32 left, fill;
|
||||||
|
|
||||||
|
if( ! length ) return;
|
||||||
|
|
||||||
|
left = ctx->total[0] & 0x3F;
|
||||||
|
fill = 64 - left;
|
||||||
|
|
||||||
|
ctx->total[0] += length;
|
||||||
|
ctx->total[0] &= 0xFFFFFFFF;
|
||||||
|
|
||||||
|
if( ctx->total[0] < length )
|
||||||
|
ctx->total[1]++;
|
||||||
|
|
||||||
|
if( left && length >= fill )
|
||||||
|
{
|
||||||
|
memcpy( (void *) (ctx->buffer + left),
|
||||||
|
(void *) input, fill );
|
||||||
|
sha256_process( ctx, ctx->buffer );
|
||||||
|
length -= fill;
|
||||||
|
input += fill;
|
||||||
|
left = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
while( length >= 64 )
|
||||||
|
{
|
||||||
|
sha256_process( ctx, input );
|
||||||
|
length -= 64;
|
||||||
|
input += 64;
|
||||||
|
}
|
||||||
|
|
||||||
|
if( length )
|
||||||
|
{
|
||||||
|
memcpy( (void *) (ctx->buffer + left),
|
||||||
|
(void *) input, length );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static uint8 sha256_padding[64] =
|
||||||
|
{
|
||||||
|
0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
|
||||||
|
};
|
||||||
|
|
||||||
|
void sha256_finish( sha256_context *ctx, uint8 digest[32] )
|
||||||
|
{
|
||||||
|
uint32 last, padn;
|
||||||
|
uint32 high, low;
|
||||||
|
uint8 msglen[8];
|
||||||
|
|
||||||
|
high = ( ctx->total[0] >> 29 )
|
||||||
|
| ( ctx->total[1] << 3 );
|
||||||
|
low = ( ctx->total[0] << 3 );
|
||||||
|
|
||||||
|
PUT_UINT32( high, msglen, 0 );
|
||||||
|
PUT_UINT32( low, msglen, 4 );
|
||||||
|
|
||||||
|
last = ctx->total[0] & 0x3F;
|
||||||
|
padn = ( last < 56 ) ? ( 56 - last ) : ( 120 - last );
|
||||||
|
|
||||||
|
sha256_update( ctx, sha256_padding, padn );
|
||||||
|
sha256_update( ctx, msglen, 8 );
|
||||||
|
|
||||||
|
PUT_UINT32( ctx->state[0], digest, 0 );
|
||||||
|
PUT_UINT32( ctx->state[1], digest, 4 );
|
||||||
|
PUT_UINT32( ctx->state[2], digest, 8 );
|
||||||
|
PUT_UINT32( ctx->state[3], digest, 12 );
|
||||||
|
PUT_UINT32( ctx->state[4], digest, 16 );
|
||||||
|
PUT_UINT32( ctx->state[5], digest, 20 );
|
||||||
|
PUT_UINT32( ctx->state[6], digest, 24 );
|
||||||
|
PUT_UINT32( ctx->state[7], digest, 28 );
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef TEST
|
||||||
|
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
/*
|
||||||
|
* those are the standard FIPS-180-2 test vectors
|
||||||
|
*/
|
||||||
|
|
||||||
|
static char *msg[] =
|
||||||
|
{
|
||||||
|
"abc",
|
||||||
|
"abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq",
|
||||||
|
NULL
|
||||||
|
};
|
||||||
|
|
||||||
|
static char *val[] =
|
||||||
|
{
|
||||||
|
"ba7816bf8f01cfea414140de5dae2223" \
|
||||||
|
"b00361a396177a9cb410ff61f20015ad",
|
||||||
|
"248d6a61d20638b8e5c026930c3e6039" \
|
||||||
|
"a33ce45964ff2167f6ecedd419db06c1",
|
||||||
|
"cdc76e5c9914fb9281a1c7e284d73e67" \
|
||||||
|
"f1809a48a497200e046d39ccc7112cd0"
|
||||||
|
};
|
||||||
|
|
||||||
|
int main( int argc, char *argv[] )
|
||||||
|
{
|
||||||
|
FILE *f;
|
||||||
|
int i, j;
|
||||||
|
char output[65];
|
||||||
|
sha256_context ctx;
|
||||||
|
unsigned char buf[1000];
|
||||||
|
unsigned char sha256sum[32];
|
||||||
|
|
||||||
|
if( argc < 2 )
|
||||||
|
{
|
||||||
|
printf( "\n SHA-256 Validation Tests:\n\n" );
|
||||||
|
|
||||||
|
for( i = 0; i < 3; i++ )
|
||||||
|
{
|
||||||
|
printf( " Test %d ", i + 1 );
|
||||||
|
|
||||||
|
sha256_starts( &ctx );
|
||||||
|
|
||||||
|
if( i < 2 )
|
||||||
|
{
|
||||||
|
sha256_update( &ctx, (uint8 *) msg[i],
|
||||||
|
strlen( msg[i] ) );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
memset( buf, 'a', 1000 );
|
||||||
|
|
||||||
|
for( j = 0; j < 1000; j++ )
|
||||||
|
{
|
||||||
|
sha256_update( &ctx, (uint8 *) buf, 1000 );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
sha256_finish( &ctx, sha256sum );
|
||||||
|
|
||||||
|
for( j = 0; j < 32; j++ )
|
||||||
|
{
|
||||||
|
sprintf( output + j * 2, "%02x", sha256sum[j] );
|
||||||
|
}
|
||||||
|
|
||||||
|
if( memcmp( output, val[i], 64 ) )
|
||||||
|
{
|
||||||
|
printf( "failed!\n" );
|
||||||
|
return( 1 );
|
||||||
|
}
|
||||||
|
|
||||||
|
printf( "passed.\n" );
|
||||||
|
}
|
||||||
|
|
||||||
|
printf( "\n" );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if( ! ( f = fopen( argv[1], "rb" ) ) )
|
||||||
|
{
|
||||||
|
perror( "fopen" );
|
||||||
|
return( 1 );
|
||||||
|
}
|
||||||
|
|
||||||
|
sha256_starts( &ctx );
|
||||||
|
|
||||||
|
while( ( i = fread( buf, 1, sizeof( buf ), f ) ) > 0 )
|
||||||
|
{
|
||||||
|
sha256_update( &ctx, buf, i );
|
||||||
|
}
|
||||||
|
|
||||||
|
sha256_finish( &ctx, sha256sum );
|
||||||
|
|
||||||
|
for( j = 0; j < 32; j++ )
|
||||||
|
{
|
||||||
|
printf( "%02x", sha256sum[j] );
|
||||||
|
}
|
||||||
|
|
||||||
|
printf( " %s\n", argv[1] );
|
||||||
|
}
|
||||||
|
|
||||||
|
return( 0 );
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
|
@ -0,0 +1,32 @@
|
||||||
|
#ifndef _SHA256_H
|
||||||
|
#define _SHA256_H
|
||||||
|
|
||||||
|
#ifndef uint8
|
||||||
|
#define uint8 unsigned char
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef uint32
|
||||||
|
#define uint32 unsigned long int
|
||||||
|
#endif
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
uint32 total[2];
|
||||||
|
uint32 state[8];
|
||||||
|
uint8 buffer[64];
|
||||||
|
}
|
||||||
|
sha256_context;
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" { //Für C++ Kompalibilität
|
||||||
|
#endif
|
||||||
|
|
||||||
|
extern void sha256_starts( sha256_context *ctx );
|
||||||
|
extern void sha256_update( sha256_context *ctx, uint8 *input, uint32 length );
|
||||||
|
extern void sha256_finish( sha256_context *ctx, uint8 digest[32] );
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* sha256.h */
|
|
@ -0,0 +1,148 @@
|
||||||
|
/*
|
||||||
|
Copyright (c) 2003/2004, Dominik Reichl <dominik.reichl@t-online.de>
|
||||||
|
All rights reserved.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without
|
||||||
|
modification, are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
- Redistributions of source code must retain the above copyright notice,
|
||||||
|
this list of conditions and the following disclaimer.
|
||||||
|
- 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.
|
||||||
|
- Neither the name of ReichlSoft nor the names of its contributors may be
|
||||||
|
used to endorse or promote products derived from this software without
|
||||||
|
specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "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 COPYRIGHT OWNER 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <qstring.h>
|
||||||
|
#include "twoclass.h"
|
||||||
|
|
||||||
|
static bool g_bInitialized = false;
|
||||||
|
|
||||||
|
CTwofish::CTwofish()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
CTwofish::~CTwofish()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CTwofish::init(UINT8 *pKey, unsigned long uKeyLen, UINT8 *initVector)
|
||||||
|
{
|
||||||
|
//ASSERT(pKey != NULL);
|
||||||
|
if(pKey == NULL) return false;
|
||||||
|
//ASSERT(uKeyLen != 0);
|
||||||
|
if(uKeyLen == 0) return false;
|
||||||
|
|
||||||
|
if(g_bInitialized == false)
|
||||||
|
{
|
||||||
|
Twofish_initialise();
|
||||||
|
g_bInitialized = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
Twofish_prepare_key((Twofish_Byte *)pKey, uKeyLen, &m_key);
|
||||||
|
|
||||||
|
if(initVector != NULL) memcpy(m_pInitVector, initVector, 16);
|
||||||
|
else memset(m_pInitVector, 0, 16);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
int CTwofish::padEncrypt(UINT8 *pInput, int nInputOctets, UINT8 *pOutBuffer)
|
||||||
|
{
|
||||||
|
int i, numBlocks, padLen;
|
||||||
|
UINT8 block[16], *iv;
|
||||||
|
|
||||||
|
//ASSERT((pInput != NULL) && (nInputOctets != NULL) && (pOutBuffer != NULL));
|
||||||
|
if((pInput == NULL) || (nInputOctets <= 0) || (pOutBuffer == NULL)) return 0;
|
||||||
|
|
||||||
|
numBlocks = nInputOctets / 16;
|
||||||
|
|
||||||
|
iv = m_pInitVector;
|
||||||
|
for(i = numBlocks; i > 0; i--)
|
||||||
|
{
|
||||||
|
((UINT32*)block)[0] = ((UINT32*)pInput)[0] ^ ((UINT32*)iv)[0];
|
||||||
|
((UINT32*)block)[1] = ((UINT32*)pInput)[1] ^ ((UINT32*)iv)[1];
|
||||||
|
((UINT32*)block)[2] = ((UINT32*)pInput)[2] ^ ((UINT32*)iv)[2];
|
||||||
|
((UINT32*)block)[3] = ((UINT32*)pInput)[3] ^ ((UINT32*)iv)[3];
|
||||||
|
|
||||||
|
Twofish_encrypt(&m_key, (Twofish_Byte *)block, (Twofish_Byte *)pOutBuffer);
|
||||||
|
|
||||||
|
iv = pOutBuffer;
|
||||||
|
pInput += 16;
|
||||||
|
pOutBuffer += 16;
|
||||||
|
}
|
||||||
|
|
||||||
|
padLen = 16 - (nInputOctets - (16 * numBlocks));
|
||||||
|
|
||||||
|
for (i = 0; i < 16 - padLen; i++)
|
||||||
|
{
|
||||||
|
block[i] = (UINT8)(pInput[i] ^ iv[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (i = 16 - padLen; i < 16; i++)
|
||||||
|
{
|
||||||
|
block[i] = (UINT8)((UINT8)padLen ^ iv[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
Twofish_encrypt(&m_key, (Twofish_Byte *)block, (Twofish_Byte *)pOutBuffer);
|
||||||
|
|
||||||
|
return 16 * (numBlocks + 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
int CTwofish::padDecrypt(UINT8 *pInput, int nInputOctets, UINT8 *pOutBuffer)
|
||||||
|
{
|
||||||
|
int i, numBlocks, padLen;
|
||||||
|
UINT8 block[16];
|
||||||
|
UINT32 iv[4];
|
||||||
|
|
||||||
|
//ASSERT((pInput != NULL) && (nInputOctets != NULL) && (pOutBuffer != NULL));
|
||||||
|
if((pInput == NULL) || (nInputOctets <= 0) || (pOutBuffer == NULL)) return 0;
|
||||||
|
|
||||||
|
if((nInputOctets % 16) != 0) { /*ASSERT(FALSE);*/ return -1; }
|
||||||
|
|
||||||
|
numBlocks = nInputOctets / 16;
|
||||||
|
|
||||||
|
memcpy(iv, m_pInitVector, 16);
|
||||||
|
|
||||||
|
for(i = numBlocks - 1; i > 0; i--)
|
||||||
|
{
|
||||||
|
Twofish_decrypt(&m_key, (Twofish_Byte *)pInput, (Twofish_Byte *)block);
|
||||||
|
((UINT32*)block)[0] ^= iv[0];
|
||||||
|
((UINT32*)block)[1] ^= iv[1];
|
||||||
|
((UINT32*)block)[2] ^= iv[2];
|
||||||
|
((UINT32*)block)[3] ^= iv[3];
|
||||||
|
memcpy(iv, pInput, 16);
|
||||||
|
memcpy(pOutBuffer, block, 16);
|
||||||
|
pInput += 16;
|
||||||
|
pOutBuffer += 16;
|
||||||
|
}
|
||||||
|
|
||||||
|
Twofish_decrypt(&m_key, (Twofish_Byte *)pInput, (Twofish_Byte *)block);
|
||||||
|
((UINT32*)block)[0] ^= iv[0];
|
||||||
|
((UINT32*)block)[1] ^= iv[1];
|
||||||
|
((UINT32*)block)[2] ^= iv[2];
|
||||||
|
((UINT32*)block)[3] ^= iv[3];
|
||||||
|
padLen = block[15];
|
||||||
|
if(padLen <= 0 || padLen > 16) return -1;
|
||||||
|
for(i = 16 - padLen; i < 16; i++)
|
||||||
|
{
|
||||||
|
if(block[i] != padLen) return -1;
|
||||||
|
}
|
||||||
|
memcpy(pOutBuffer, block, 16 - padLen);
|
||||||
|
|
||||||
|
return 16*numBlocks - padLen;
|
||||||
|
}
|
|
@ -0,0 +1,52 @@
|
||||||
|
/*
|
||||||
|
Copyright (c) 2003/2004, Dominik Reichl <dominik.reichl@t-online.de>
|
||||||
|
All rights reserved.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without
|
||||||
|
modification, are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
- Redistributions of source code must retain the above copyright notice,
|
||||||
|
this list of conditions and the following disclaimer.
|
||||||
|
- 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.
|
||||||
|
- Neither the name of ReichlSoft nor the names of its contributors may be
|
||||||
|
used to endorse or promote products derived from this software without
|
||||||
|
specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "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 COPYRIGHT OWNER 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef ___TWOFISH_CLASS_H___
|
||||||
|
#define ___TWOFISH_CLASS_H___
|
||||||
|
|
||||||
|
#include "twofish.h"
|
||||||
|
#include "crypto/rijndael.h"
|
||||||
|
|
||||||
|
class CTwofish
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
CTwofish();
|
||||||
|
virtual ~CTwofish();
|
||||||
|
|
||||||
|
bool init(UINT8 *pKey, unsigned long uKeyLen, UINT8 *initVector = NULL);
|
||||||
|
|
||||||
|
int padEncrypt(UINT8 *pInput, int nInputOctets, UINT8 *pOutBuffer);
|
||||||
|
int padDecrypt(UINT8 *pInput, int nInputOctets, UINT8 *pOutBuffer);
|
||||||
|
|
||||||
|
private:
|
||||||
|
Twofish_key m_key;
|
||||||
|
UINT8 m_pInitVector[16];
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
|
@ -0,0 +1,179 @@
|
||||||
|
/*
|
||||||
|
* Fast, portable, and easy-to-use Twofish implementation,
|
||||||
|
* Version 0.3.
|
||||||
|
* Copyright (c) 2002 by Niels Ferguson.
|
||||||
|
*
|
||||||
|
* See the twofish.c file for the details of the how and why of this code.
|
||||||
|
*
|
||||||
|
* The author hereby grants a perpetual license to everybody to
|
||||||
|
* use this code for any purpose as long as the copyright message is included
|
||||||
|
* in the source code of this or any derived work.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* PLATFORM FIXES
|
||||||
|
* ==============
|
||||||
|
*
|
||||||
|
* The following definitions have to be fixed for each particular platform
|
||||||
|
* you work on. If you have a multi-platform program, you no doubt have
|
||||||
|
* portable definitions that you can substitute here without changing
|
||||||
|
* the rest of the code.
|
||||||
|
*
|
||||||
|
* The defaults provided here should work on most PC compilers.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* A Twofish_Byte must be an unsigned 8-bit integer.
|
||||||
|
* It must also be the elementary data size of your C platform,
|
||||||
|
* i.e. sizeof( Twofish_Byte ) == 1.
|
||||||
|
*/
|
||||||
|
typedef unsigned char Twofish_Byte;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* A Twofish_UInt32 must be an unsigned integer of at least 32 bits.
|
||||||
|
*
|
||||||
|
* This type is used only internally in the implementation, so ideally it
|
||||||
|
* would not appear in the header file, but it is used inside the
|
||||||
|
* Twofish_key structure which means it has to be included here.
|
||||||
|
*/
|
||||||
|
typedef unsigned int Twofish_UInt32;
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* END OF PLATFORM FIXES
|
||||||
|
* =====================
|
||||||
|
*
|
||||||
|
* You should not have to touch the rest of this file, but the code
|
||||||
|
* in twofish.c has a few things you need to fix too.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Structure that contains a prepared Twofish key.
|
||||||
|
* A cipher key is used in two stages. In the first stage it is converted
|
||||||
|
* form the original form to an internal representation.
|
||||||
|
* This internal form is then used to encrypt and decrypt data.
|
||||||
|
* This structure contains the internal form. It is rather large: 4256 bytes
|
||||||
|
* on a platform with 32-bit unsigned values.
|
||||||
|
*
|
||||||
|
* Treat this as an opague structure, and don't try to manipulate the
|
||||||
|
* elements in it. I wish I could hide the inside of the structure,
|
||||||
|
* but C doesn't allow that.
|
||||||
|
*/
|
||||||
|
typedef
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
Twofish_UInt32 s[4][256]; /* pre-computed S-boxes */
|
||||||
|
Twofish_UInt32 K[40]; /* Round key words */
|
||||||
|
}
|
||||||
|
Twofish_key;
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Initialise and test the Twofish implementation.
|
||||||
|
*
|
||||||
|
* This function MUST be called before any other function in the
|
||||||
|
* Twofish implementation is called.
|
||||||
|
* It only needs to be called once.
|
||||||
|
*
|
||||||
|
* Apart from initialising the implementation it performs a self test.
|
||||||
|
* If the Twofish_fatal function is not called, the code passed the test.
|
||||||
|
* (See the twofish.c file for details on the Twofish_fatal function.)
|
||||||
|
*/
|
||||||
|
extern void Twofish_initialise();
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Convert a cipher key to the internal form used for
|
||||||
|
* encryption and decryption.
|
||||||
|
*
|
||||||
|
* The cipher key is an array of bytes; the Twofish_Byte type is
|
||||||
|
* defined above to a type suitable on your platform.
|
||||||
|
*
|
||||||
|
* Any key must be converted to an internal form in the Twofisk_key structure
|
||||||
|
* before it can be used.
|
||||||
|
* The encryption and decryption functions only work with the internal form.
|
||||||
|
* The conversion to internal form need only be done once for each key value.
|
||||||
|
*
|
||||||
|
* Be sure to wipe all key storage, including the Twofish_key structure,
|
||||||
|
* once you are done with the key data.
|
||||||
|
* A simple memset( TwofishKey, 0, sizeof( TwofishKey ) ) will do just fine.
|
||||||
|
*
|
||||||
|
* Unlike most implementations, this one allows any key size from 0 bytes
|
||||||
|
* to 32 bytes. According to the Twofish specifications,
|
||||||
|
* irregular key sizes are handled by padding the key with zeroes at the end
|
||||||
|
* until the key size is 16, 24, or 32 bytes, whichever
|
||||||
|
* comes first. Note that each key of irregular size is equivalent to exactly
|
||||||
|
* one key of 16, 24, or 32 bytes.
|
||||||
|
*
|
||||||
|
* WARNING: Short keys have low entropy, and result in low security.
|
||||||
|
* Anything less than 8 bytes is utterly insecure. For good security
|
||||||
|
* use at least 16 bytes. I prefer to use 32-byte keys to prevent
|
||||||
|
* any collision attacks on the key.
|
||||||
|
*
|
||||||
|
* The key length argument key_len must be in the proper range.
|
||||||
|
* If key_len is not in the range 0,...,32 this routine attempts to generate
|
||||||
|
* a fatal error (depending on the code environment),
|
||||||
|
* and at best (or worst) returns without having done anything.
|
||||||
|
*
|
||||||
|
* Arguments:
|
||||||
|
* key Array of key bytes
|
||||||
|
* key_len Number of key bytes, must be in the range 0,1,...,32.
|
||||||
|
* xkey Pointer to an Twofish_key structure that will be filled
|
||||||
|
* with the internal form of the cipher key.
|
||||||
|
*/
|
||||||
|
extern void Twofish_prepare_key(
|
||||||
|
Twofish_Byte key[],
|
||||||
|
int key_len,
|
||||||
|
Twofish_key * xkey
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Encrypt a single block of data.
|
||||||
|
*
|
||||||
|
* This function encrypts a single block of 16 bytes of data.
|
||||||
|
* If you want to encrypt a larger or variable-length message,
|
||||||
|
* you will have to use a cipher mode, such as CBC or CTR.
|
||||||
|
* These are outside the scope of this implementation.
|
||||||
|
*
|
||||||
|
* The xkey structure is not modified by this routine, and can be
|
||||||
|
* used for further encryption and decryption operations.
|
||||||
|
*
|
||||||
|
* Arguments:
|
||||||
|
* xkey pointer to Twofish_key, internal form of the key
|
||||||
|
* produces by Twofish_prepare_key()
|
||||||
|
* p Plaintext to be encrypted
|
||||||
|
* c Place to store the ciphertext
|
||||||
|
*/
|
||||||
|
extern void Twofish_encrypt(
|
||||||
|
Twofish_key * xkey,
|
||||||
|
Twofish_Byte p[16],
|
||||||
|
Twofish_Byte c[16]
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Decrypt a single block of data.
|
||||||
|
*
|
||||||
|
* This function decrypts a single block of 16 bytes of data.
|
||||||
|
* If you want to decrypt a larger or variable-length message,
|
||||||
|
* you will have to use a cipher mode, such as CBC or CTR.
|
||||||
|
* These are outside the scope of this implementation.
|
||||||
|
*
|
||||||
|
* The xkey structure is not modified by this routine, and can be
|
||||||
|
* used for further encryption and decryption operations.
|
||||||
|
*
|
||||||
|
* Arguments:
|
||||||
|
* xkey pointer to Twofish_key, internal form of the key
|
||||||
|
* produces by Twofish_prepare_key()
|
||||||
|
* c Ciphertext to be decrypted
|
||||||
|
* p Place to store the plaintext
|
||||||
|
*/
|
||||||
|
extern void Twofish_decrypt(
|
||||||
|
Twofish_key * xkey,
|
||||||
|
Twofish_Byte c[16],
|
||||||
|
Twofish_Byte p[16]
|
||||||
|
);
|
|
@ -0,0 +1,98 @@
|
||||||
|
/***************************************************************************
|
||||||
|
* Copyright (C) 2005 by Tarek Saidi *
|
||||||
|
* tarek@linux *
|
||||||
|
* *
|
||||||
|
* This program is free software; you can redistribute it and/or modify *
|
||||||
|
* it under the terms of the GNU General Public License as published by *
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or *
|
||||||
|
* (at your option) any later version. *
|
||||||
|
* *
|
||||||
|
* 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, write to the *
|
||||||
|
* Free Software Foundation, Inc., *
|
||||||
|
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
|
#include "mainwindow.h"
|
||||||
|
#include <qmessagebox.h>
|
||||||
|
#include <qscrollview.h>
|
||||||
|
#include <qlabel.h>
|
||||||
|
#include <qdialog.h>
|
||||||
|
#include <qfile.h>
|
||||||
|
|
||||||
|
#include "AboutDlg.h"
|
||||||
|
|
||||||
|
CAboutDialog::CAboutDialog(QWidget* parent, const char* name, bool modal, WFlags fl)
|
||||||
|
: AboutDlg(parent,name, modal,fl)
|
||||||
|
{
|
||||||
|
mainwnd=((CMainWindow*)parentWidget());
|
||||||
|
mainwnd->CreateBanner(Banner,mainwnd->Icon_Key32x32,trUtf8("Keepass für Linux"));
|
||||||
|
Link_Homepage=new LinkLabel(this,"Link_Homepage",trUtf8("http://keepass.de.vu"),80,143);
|
||||||
|
Link_EMail=new LinkLabel(this,"Link_EMail",trUtf8("tarek.saidi@arcor.de"),80,163);
|
||||||
|
Link_License=new LinkLabel(this,"Link_License",trUtf8("Lizenz"),80,183);
|
||||||
|
connect(Link_License,SIGNAL(clicked()),this,SLOT(OnLicenseClicked()));
|
||||||
|
connect(Link_EMail,SIGNAL(clicked()),this,SLOT(OnEMailClicked()));
|
||||||
|
connect(Link_Homepage,SIGNAL(clicked()),this,SLOT(OnHomepageClicked()));
|
||||||
|
Label0->setText(Label0->text().arg(KEEPASS_VERSION));
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
CAboutDialog::~CAboutDialog()
|
||||||
|
{
|
||||||
|
delete Link_Homepage;
|
||||||
|
delete Link_EMail;
|
||||||
|
delete Link_License;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CAboutDialog::OnClose()
|
||||||
|
{
|
||||||
|
close();
|
||||||
|
}
|
||||||
|
|
||||||
|
void CAboutDialog::OnLicenseClicked(){
|
||||||
|
|
||||||
|
QDialog dlg(this,NULL,true);
|
||||||
|
QScrollView scroll(&dlg);
|
||||||
|
QLabel label(&scroll,"License-Scroll");
|
||||||
|
scroll.addChild(&label);
|
||||||
|
QFile gpl(((CMainWindow*)parentWidget())->appdir+"/../share/keepass/license.txt");
|
||||||
|
if(!gpl.exists()){
|
||||||
|
QMessageBox::critical(this,trUtf8("Fehler"),trUtf8("Die Datei '%1' konnte nicht gefunden werden.")
|
||||||
|
.arg("'license.txt'")+"\n"+trUtf8("Die Anwendung wurde möglicherweiße nicht korrekt installiert.")
|
||||||
|
,trUtf8("OK"),0,0,2,1);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!gpl.open(IO_ReadOnly)){
|
||||||
|
QMessageBox::critical(this,trUtf8("Fehler"),trUtf8("Die Datei '%1' konnte nicht geöffnet werden.")
|
||||||
|
.arg("'license.txt'")+trUtf8("Es trat folgender Fehler auf:\n%1").arg(gpl.errorString())
|
||||||
|
,trUtf8("OK"),0,0,2,1);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
char* buffer=new char[gpl.size()];
|
||||||
|
long l=gpl.readBlock(buffer,gpl.size());
|
||||||
|
gpl.close();
|
||||||
|
label.setText(QString::fromUtf8(buffer,l));
|
||||||
|
label.setGeometry(0,0,500,800);
|
||||||
|
dlg.setFixedWidth(500);
|
||||||
|
dlg.setFixedHeight(400);
|
||||||
|
dlg.setCaption(trUtf8("Lizenz"));
|
||||||
|
scroll.setGeometry(0,0,500,400);
|
||||||
|
dlg.exec();
|
||||||
|
delete buffer;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void CAboutDialog::OnHomepageClicked(){
|
||||||
|
mainwnd->OpenURL("http://keepass.de.vu");
|
||||||
|
}
|
||||||
|
|
||||||
|
void CAboutDialog::OnEMailClicked(){
|
||||||
|
mainwnd->OpenURL("mailto:tarek.saidi@arcor.de");
|
||||||
|
}
|
||||||
|
|
|
@ -0,0 +1,57 @@
|
||||||
|
/***************************************************************************
|
||||||
|
* Copyright (C) 2005 by Tarek Saidi *
|
||||||
|
* tarek@linux *
|
||||||
|
* *
|
||||||
|
* This program is free software; you can redistribute it and/or modify *
|
||||||
|
* it under the terms of the GNU General Public License as published by *
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or *
|
||||||
|
* (at your option) any later version. *
|
||||||
|
* *
|
||||||
|
* 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, write to the *
|
||||||
|
* Free Software Foundation, Inc., *
|
||||||
|
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
|
||||||
|
***************************************************************************/
|
||||||
|
#ifndef _ABOUTDIALOG_H_
|
||||||
|
#define _ABOUTDIALOG_H_
|
||||||
|
#include "ui_AboutDlg.h"
|
||||||
|
#include "lib/UrlLabel.h"
|
||||||
|
#include "mainwindow.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
class CAboutDialog : public AboutDlg
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
LinkLabel *Link_Homepage,*Link_EMail,*Link_License;
|
||||||
|
public:
|
||||||
|
CAboutDialog(QWidget* parent = 0, const char* name = 0, bool modal = FALSE, WFlags fl = 0 );
|
||||||
|
~CAboutDialog();
|
||||||
|
|
||||||
|
CMainWindow* mainwnd;
|
||||||
|
/*$PUBLIC_FUNCTIONS$*/
|
||||||
|
|
||||||
|
public slots:
|
||||||
|
/*$PUBLIC_SLOTS$*/
|
||||||
|
|
||||||
|
protected:
|
||||||
|
/*$PROTECTED_FUNCTIONS$*/
|
||||||
|
|
||||||
|
protected slots:
|
||||||
|
/*$PROTECTED_SLOTS$*/
|
||||||
|
|
||||||
|
public slots:
|
||||||
|
virtual void OnClose();
|
||||||
|
void OnHomepageClicked();
|
||||||
|
void OnEMailClicked();
|
||||||
|
void OnLicenseClicked();
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
|
@ -0,0 +1,225 @@
|
||||||
|
/***************************************************************************
|
||||||
|
* Copyright (C) 2005 by Tarek Saidi *
|
||||||
|
* tarek@linux *
|
||||||
|
* *
|
||||||
|
* This program is free software; you can redistribute it and/or modify *
|
||||||
|
* it under the terms of the GNU General Public License as published by *
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or *
|
||||||
|
* (at your option) any later version. *
|
||||||
|
* *
|
||||||
|
* 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, write to the *
|
||||||
|
* Free Software Foundation, Inc., *
|
||||||
|
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
|
||||||
|
***************************************************************************/
|
||||||
|
#include "mainwindow.h"
|
||||||
|
#include "PwManager.h"
|
||||||
|
#include "../lib/random.h"
|
||||||
|
#include "ChangeKeyDlg.h"
|
||||||
|
//QT
|
||||||
|
#include <qlineedit.h>
|
||||||
|
#include <qcombobox.h>
|
||||||
|
#include <qpushbutton.h>
|
||||||
|
#include <qcheckbox.h>
|
||||||
|
#include <qdir.h>
|
||||||
|
#include <qfiledialog.h>
|
||||||
|
#include <qmessagebox.h>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
CChangeKeyDlg::CChangeKeyDlg(QWidget* parent,PwDatabase* _db,const char* name, bool modal, WFlags fl)
|
||||||
|
: ChangeKeyDialog(parent,name, modal,fl)
|
||||||
|
{
|
||||||
|
db=_db;
|
||||||
|
parentwnd=((CMainWindow*)parentWidget());
|
||||||
|
parentwnd->CreateBanner(Banner,parentwnd->Icon_Key32x32,trUtf8("Hauptschlüssel ändern"));
|
||||||
|
if(!parentwnd->config.ShowPasswords)ChangeEchoMode();
|
||||||
|
///@PlatformSpecific
|
||||||
|
QDir media("/media");
|
||||||
|
if(media.exists()){
|
||||||
|
Paths=media.entryList("*",QDir::Dirs);
|
||||||
|
Paths.erase(Paths.begin()); // delete "."
|
||||||
|
Paths.erase(Paths.begin()); // delete ".."
|
||||||
|
|
||||||
|
for(int i=0;i<Paths.count();i++){
|
||||||
|
Paths[i]="/media/"+Paths[i];
|
||||||
|
}
|
||||||
|
Paths.prepend("< none >");
|
||||||
|
}
|
||||||
|
for(int i=0;i<Paths.count();i++){
|
||||||
|
Combo_Dirs->insertItem(0,Paths[i]);
|
||||||
|
IsFile.append(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
CChangeKeyDlg::~CChangeKeyDlg()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void CChangeKeyDlg::OnOK()
|
||||||
|
{
|
||||||
|
if(CheckBox_Both->isChecked()){
|
||||||
|
if(password==""){QMessageBox::warning(this,trUtf8("Fehler"),trUtf8("Bitte geben Sie ein Passwort ein.")
|
||||||
|
,trUtf8("OK"),"","",0,0);
|
||||||
|
return;}
|
||||||
|
if(keyfile==""){QMessageBox::warning(this,trUtf8("Fehler"),trUtf8("Bitte wählen Sie eine Schlüsseldatei.")
|
||||||
|
,trUtf8("OK"),"","",0,0);
|
||||||
|
return;}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if(password=="" && keyfile==""){QMessageBox::warning(this,trUtf8("Fehler"),trUtf8("Geben Sie bitte ein Passwort ein oder wählen Sie eine Schlüsseldatei.")
|
||||||
|
,trUtf8("OK"),"","",0,0);
|
||||||
|
return;}
|
||||||
|
}
|
||||||
|
|
||||||
|
UINT8 file_key[32]={0};
|
||||||
|
UINT8 pw_key[32]={0};
|
||||||
|
|
||||||
|
if(keyfile!=""){
|
||||||
|
QFile file(keyfile);
|
||||||
|
if(file.exists()){
|
||||||
|
int r=QMessageBox::warning(this,trUtf8("Vorhandene Datei überschreiben?"),trUtf8("Unter dem gewählten Dateinamen existiert bereits eine Datei.\nSoll sie überschrieben werden?"),"Ja","Nein",NULL,1,1);
|
||||||
|
if(r==1)return;}
|
||||||
|
getRandomBytes(file_key,1,32,true);
|
||||||
|
if(file.open(IO_WriteOnly | IO_Truncate)==false){
|
||||||
|
QMessageBox::critical(this,trUtf8("Fehler"),trUtf8("Schlüsseldatei konnte nicht geöffnet werden."),"OK",0,0,2,1);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if(file.writeBlock((char*)file_key,32)!=32){
|
||||||
|
file.close();
|
||||||
|
QMessageBox::critical(this,trUtf8("Fehler"),trUtf8("Das Schreiben der Schlüsseldatei ist fehlgeschlagen."),"OK",0,0,2,1);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
file.close();
|
||||||
|
}
|
||||||
|
|
||||||
|
if(CheckBox_Both->isChecked() || keyfile==""){
|
||||||
|
if(password!=Edit_Password_2->text()){
|
||||||
|
QMessageBox::critical(this,trUtf8("Fehler"),trUtf8("Passwort und Passwortwiederholung stimmen nicht überein.\nBitte prüfen Sie Ihre Eingabe."),"OK",0,0,2,1);
|
||||||
|
return;}}
|
||||||
|
|
||||||
|
if(CheckBox_Both->isChecked())db->CalcMasterKeyByFileAndPw(keyfile, password);
|
||||||
|
else if(password=="")db->CalcMasterKeyByFile(keyfile);
|
||||||
|
else if(keyfile==""){db->CalcMasterKeyByPassword(password);}
|
||||||
|
|
||||||
|
done(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
void CChangeKeyDlg::OnSelect()
|
||||||
|
{
|
||||||
|
if(Button_Browse->isEnabled()){
|
||||||
|
keyfile=QFileDialog::getSaveFileName(QDir::homeDirPath(),"",this,trUtf8("Schlüsseldatei öffnen"));
|
||||||
|
if(keyfile=="")return;
|
||||||
|
Combo_Dirs->insertItem(keyfile);
|
||||||
|
Combo_Dirs->setCurrentItem(Combo_Dirs->count()-1);
|
||||||
|
if(!CheckBox_Both->isChecked()){
|
||||||
|
Edit_Password->setDisabled(true);
|
||||||
|
Edit_Password->setText("");
|
||||||
|
password="";
|
||||||
|
}
|
||||||
|
Paths.append(keyfile);
|
||||||
|
IsFile.append(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void CChangeKeyDlg::OnBrowse()
|
||||||
|
{
|
||||||
|
QString dir=QFileDialog::getExistingDirectory(QDir::homeDirPath(),NULL,trUtf8("Verzeichnis wählen"));
|
||||||
|
if(dir=="")return;
|
||||||
|
keyfile=dir+"/pwsafe.key";
|
||||||
|
Combo_Dirs->insertItem(dir);
|
||||||
|
Combo_Dirs->setCurrentItem(Combo_Dirs->count()-1);
|
||||||
|
if(!CheckBox_Both->isChecked()){
|
||||||
|
Edit_Password->setDisabled(true);
|
||||||
|
Edit_Password_2->setDisabled(true);
|
||||||
|
Edit_Password->setText("");
|
||||||
|
Edit_Password_2->setText("");
|
||||||
|
password="";
|
||||||
|
}
|
||||||
|
Paths.append(dir);
|
||||||
|
IsFile.append(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void CChangeKeyDlg::OnCancel()
|
||||||
|
{
|
||||||
|
done(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
void CChangeKeyDlg::OnPasswordChanged(const QString& str)
|
||||||
|
{
|
||||||
|
if(str!="" && !(CheckBox_Both->isChecked())){
|
||||||
|
Combo_Dirs->setDisabled(true);
|
||||||
|
Button_Browse->setDisabled(true);}
|
||||||
|
else{
|
||||||
|
Combo_Dirs->setEnabled(true);
|
||||||
|
Button_Browse->setEnabled(true);}
|
||||||
|
Edit_Password_2->setText("");
|
||||||
|
password=str;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CChangeKeyDlg::OnPassword2Changed(const QString& str)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void CChangeKeyDlg::OnComboChanged(int i)
|
||||||
|
{
|
||||||
|
if(i==0){
|
||||||
|
keyfile="";
|
||||||
|
Edit_Password->setEnabled(true);
|
||||||
|
Edit_Password_2->setEnabled(true);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if(IsFile[i]==true)keyfile=Paths[i];
|
||||||
|
else keyfile=Paths[i]+"/pwsafe.key";
|
||||||
|
|
||||||
|
if(!CheckBox_Both->isChecked()){
|
||||||
|
Edit_Password->setText("");
|
||||||
|
Edit_Password->setDisabled(true);
|
||||||
|
Edit_Password_2->setText("");
|
||||||
|
Edit_Password_2->setDisabled(true);}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void CChangeKeyDlg::OnCheckBoxChanged(int i)
|
||||||
|
{
|
||||||
|
if(i==QButton::NoChange)return;
|
||||||
|
if(i==QButton::On){
|
||||||
|
Combo_Dirs->setEnabled(true);
|
||||||
|
Button_Browse->setEnabled(true);
|
||||||
|
Edit_Password->setEnabled(true);
|
||||||
|
Edit_Password_2->setEnabled(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void CChangeKeyDlg::ChangeEchoMode()
|
||||||
|
{
|
||||||
|
if(Edit_Password->echoMode()==QLineEdit::Normal){
|
||||||
|
Edit_Password->setEchoMode(QLineEdit::Password);
|
||||||
|
Edit_Password_2->setEchoMode(QLineEdit::Password);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Edit_Password->setEchoMode(QLineEdit::Normal);
|
||||||
|
Edit_Password_2->setEchoMode(QLineEdit::Normal);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*$SPECIALIZATION$*/
|
||||||
|
|
||||||
|
|
||||||
|
//#include "changekeydlg.moc"
|
||||||
|
|
|
@ -0,0 +1,71 @@
|
||||||
|
/***************************************************************************
|
||||||
|
* Copyright (C) 2005 by Tarek Saidi *
|
||||||
|
* tarek@linux *
|
||||||
|
* *
|
||||||
|
* This program is free software; you can redistribute it and/or modify *
|
||||||
|
* it under the terms of the GNU General Public License as published by *
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or *
|
||||||
|
* (at your option) any later version. *
|
||||||
|
* *
|
||||||
|
* 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, write to the *
|
||||||
|
* Free Software Foundation, Inc., *
|
||||||
|
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
|
||||||
|
***************************************************************************/
|
||||||
|
#include "mainwindow.h"
|
||||||
|
#ifndef _CHANGEKEYDLG_H_
|
||||||
|
#define _CHANGEKEYDLG_H_
|
||||||
|
#include "ui_ChangeKeyDlg.h"
|
||||||
|
#include <qstringlist.h>
|
||||||
|
#include <qvaluelist.h>
|
||||||
|
#include <qfile.h>
|
||||||
|
|
||||||
|
class CChangeKeyDlg : public ChangeKeyDialog
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
public:
|
||||||
|
CChangeKeyDlg(QWidget* parent,PwDatabase* db, const char* name = 0, bool modal = true, WFlags fl = 0 );
|
||||||
|
~CChangeKeyDlg();
|
||||||
|
/*$PUBLIC_FUNCTIONS$*/
|
||||||
|
|
||||||
|
public slots:
|
||||||
|
/*$PUBLIC_SLOTS$*/
|
||||||
|
|
||||||
|
protected:
|
||||||
|
/*$PROTECTED_FUNCTIONS$*/
|
||||||
|
|
||||||
|
protected slots:
|
||||||
|
/*$PROTECTED_SLOTS$*/
|
||||||
|
|
||||||
|
public slots:
|
||||||
|
virtual void OnSelect();
|
||||||
|
virtual void OnBrowse();
|
||||||
|
virtual void OnCancel();
|
||||||
|
virtual void OnOK();
|
||||||
|
virtual void OnComboChanged(int i);
|
||||||
|
virtual void OnCheckBoxChanged(int i);
|
||||||
|
virtual void OnPasswordChanged(const QString& str);
|
||||||
|
virtual void OnPassword2Changed(const QString& str);
|
||||||
|
virtual void ChangeEchoMode();
|
||||||
|
|
||||||
|
|
||||||
|
private:
|
||||||
|
PwDatabase* db;
|
||||||
|
CMainWindow* parentwnd;
|
||||||
|
QStringList Paths;
|
||||||
|
QValueList<bool> IsFile;
|
||||||
|
|
||||||
|
public:
|
||||||
|
QString keyfile;
|
||||||
|
QFile* pKeyFile;
|
||||||
|
QString password;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
|
@ -0,0 +1,84 @@
|
||||||
|
/***************************************************************************
|
||||||
|
* Copyright (C) 2005 by Tarek Saidi *
|
||||||
|
* tarek@linux *
|
||||||
|
* *
|
||||||
|
* This program is free software; you can redistribute it and/or modify *
|
||||||
|
* it under the terms of the GNU General Public License as published by *
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or *
|
||||||
|
* (at your option) any later version. *
|
||||||
|
* *
|
||||||
|
* 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, write to the *
|
||||||
|
* Free Software Foundation, Inc., *
|
||||||
|
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
|
||||||
|
***************************************************************************/
|
||||||
|
#include <qcombobox.h>
|
||||||
|
#include <qlineedit.h>
|
||||||
|
#include <qmessagebox.h>
|
||||||
|
#include "mainwindow.h"
|
||||||
|
#include "DatabaseSettingsDlg.h"
|
||||||
|
|
||||||
|
|
||||||
|
CDbSettingsDlg::CDbSettingsDlg(CMainWindow* parent,Database* db, const char* name, bool modal, WFlags fl)
|
||||||
|
: dbsettingdlg_base(parent,name, modal,fl)
|
||||||
|
{
|
||||||
|
database=db;
|
||||||
|
}
|
||||||
|
|
||||||
|
CDbSettingsDlg::~CDbSettingsDlg()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void CDbSettingsDlg::showEvent(QShowEvent *event){
|
||||||
|
if(event->spontaneous()==false){
|
||||||
|
((CMainWindow*)parentWidget())->CreateBanner(Banner,((CMainWindow*)parentWidget())->Icon_Settings32x32,"Einstellungen");
|
||||||
|
ComboAlgo->insertItem(trUtf8("AES(Rijndael): 256 Bit (Standard)"),0);
|
||||||
|
ComboAlgo->insertItem(trUtf8("Twofish: 256 Bit"),1);
|
||||||
|
ComboAlgo->setCurrentItem(database->CryptoAlgorithmus); //Achtung: AlgoID muss gleich dem ComboBox Index sein!
|
||||||
|
EditRounds->setText(QString::number(database->KeyEncRounds));
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void CDbSettingsDlg::OnCancel()
|
||||||
|
{
|
||||||
|
close();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void CDbSettingsDlg::OnOK()
|
||||||
|
{
|
||||||
|
if(EditRounds->text()==""){
|
||||||
|
QMessageBox::warning(NULL,trUtf8("Fehler"),trUtf8("Geben Sie bitte die Anzahl der Verschlüsselungsrunden an."),trUtf8("OK"));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
bool valid;
|
||||||
|
int rounds=EditRounds->text().toUInt(&valid,10);
|
||||||
|
if(valid==false){
|
||||||
|
QMessageBox::warning(NULL,trUtf8("Fehler"),EditRounds->text()+trUtf8(" ist kein gültiger Zahlenwert"),trUtf8("OK"));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if(rounds==0){
|
||||||
|
QMessageBox::warning(NULL,trUtf8("Fehler"),trUtf8("Die Anzahl an Verschlüsselungsrunden muss mindestens 1 betragen."),trUtf8("OK"));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
database->KeyEncRounds=rounds;
|
||||||
|
database->CryptoAlgorithmus=ComboAlgo->currentItem();
|
||||||
|
|
||||||
|
close();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*$SPECIALIZATION$*/
|
||||||
|
|
||||||
|
|
||||||
|
//#include "databasesettingsdlg.moc"
|
||||||
|
|
|
@ -0,0 +1,54 @@
|
||||||
|
/***************************************************************************
|
||||||
|
* Copyright (C) 2005 by Tarek Saidi *
|
||||||
|
* tarek@linux *
|
||||||
|
* *
|
||||||
|
* This program is free software; you can redistribute it and/or modify *
|
||||||
|
* it under the terms of the GNU General Public License as published by *
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or *
|
||||||
|
* (at your option) any later version. *
|
||||||
|
* *
|
||||||
|
* 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, write to the *
|
||||||
|
* Free Software Foundation, Inc., *
|
||||||
|
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
|
||||||
|
***************************************************************************/
|
||||||
|
#ifndef DBSETTINGSDLG_H
|
||||||
|
#define DBSETTINGSDLG_H
|
||||||
|
#include "ui_DatabaseSettingsDlg.h"
|
||||||
|
#include "mainwindow.h"
|
||||||
|
#include "Database.h"
|
||||||
|
|
||||||
|
class CDbSettingsDlg : public dbsettingdlg_base
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
public:
|
||||||
|
CDbSettingsDlg(CMainWindow* parent,Database* db,const char* name = 0, bool modal = FALSE, WFlags fl = 0 );
|
||||||
|
~CDbSettingsDlg();
|
||||||
|
virtual void showEvent(QShowEvent *);
|
||||||
|
/*$PUBLIC_FUNCTIONS$*/
|
||||||
|
|
||||||
|
public slots:
|
||||||
|
/*$PUBLIC_SLOTS$*/
|
||||||
|
|
||||||
|
protected:
|
||||||
|
/*$PROTECTED_FUNCTIONS$*/
|
||||||
|
|
||||||
|
protected slots:
|
||||||
|
/*$PROTECTED_SLOTS$*/
|
||||||
|
|
||||||
|
public slots:
|
||||||
|
virtual void OnCancel();
|
||||||
|
virtual void OnOK();
|
||||||
|
|
||||||
|
private:
|
||||||
|
Database* database;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
|
@ -0,0 +1,371 @@
|
||||||
|
/***************************************************************************
|
||||||
|
* Copyright (C) 2005 by Tarek Saidi *
|
||||||
|
* tarek@linux *
|
||||||
|
* *
|
||||||
|
* This program is free software; you can redistribute it and/or modify *
|
||||||
|
* it under the terms of the GNU General Public License as published by *
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or *
|
||||||
|
* (at your option) any later version. *
|
||||||
|
* *
|
||||||
|
* 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, write to the *
|
||||||
|
* Free Software Foundation, Inc., *
|
||||||
|
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
|
||||||
|
***************************************************************************/
|
||||||
|
#include "mainwindow.h"
|
||||||
|
|
||||||
|
#include <qpushbutton.h>
|
||||||
|
#include <qpalette.h>
|
||||||
|
#include <qfont.h>
|
||||||
|
#include <qlineedit.h>
|
||||||
|
#include <qlabel.h>
|
||||||
|
#include <qprogressbar.h>
|
||||||
|
#include <qtextedit.h>
|
||||||
|
#include <qpixmap.h>
|
||||||
|
#include <qcolor.h>
|
||||||
|
#include <qcombobox.h>
|
||||||
|
#include <qpainter.h>
|
||||||
|
#include <qpen.h>
|
||||||
|
#include <qfiledialog.h>
|
||||||
|
#include <qmessagebox.h>
|
||||||
|
|
||||||
|
|
||||||
|
#include "PasswordGenDlg.h"
|
||||||
|
#include "EditEntryDlg.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
CEditEntryDlg::CEditEntryDlg(QWidget* parent, const char* name, bool modal, WFlags fl)
|
||||||
|
: EditEntryDialog(parent,name, modal,fl)
|
||||||
|
{
|
||||||
|
|
||||||
|
pw=((CMainWindow*)parentWidget())->db;
|
||||||
|
mainwnd=((CMainWindow*)parentWidget());
|
||||||
|
mainwnd->CreateBanner(Banner,mainwnd->Icon_Key32x32,trUtf8("Eintrag bearbeiten"));
|
||||||
|
ModFlag=false;
|
||||||
|
}
|
||||||
|
|
||||||
|
CEditEntryDlg::~CEditEntryDlg()
|
||||||
|
{
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void CEditEntryDlg::showEvent(QShowEvent *event){
|
||||||
|
|
||||||
|
if(event->spontaneous()==false){
|
||||||
|
if(entry->pBinaryData==NULL){
|
||||||
|
ButtonSaveAttachment->setDisabled(true);
|
||||||
|
ButtonDeleteAttachment->setDisabled(true);
|
||||||
|
}
|
||||||
|
setCaption(entry->Title);
|
||||||
|
setIcon(mainwnd->EntryIcons[entry->ImageID]);
|
||||||
|
Edit_Title->setText(entry->Title);
|
||||||
|
Edit_UserName->setText(entry->UserName);
|
||||||
|
Edit_URL->setText(entry->URL);
|
||||||
|
Edit_Password->setText(entry->Password.getString());
|
||||||
|
Edit_Password_w->setText(entry->Password.getString());
|
||||||
|
entry->Password.delRef();
|
||||||
|
if(!mainwnd->config.ShowPasswords)ChangeEchoMode();
|
||||||
|
OnPasswordwLostFocus();
|
||||||
|
int bits=(entry->Password.length()*8);
|
||||||
|
Label_Bits->setText(QString::number(bits)+" Bit");
|
||||||
|
if(bits>128)bits=128;
|
||||||
|
Progress_Quali->setProgress(bits,128);
|
||||||
|
Progress_Quali->setPercentageVisible(false);
|
||||||
|
Edit_Attachment->setText(entry->BinaryDesc);
|
||||||
|
Edit_Comment->setText(entry->Additional);
|
||||||
|
InitGroupComboBox();
|
||||||
|
InitIconComboBox();
|
||||||
|
Edit_Expire_Date->setText((entry->Expire.GetString(0)).mid(0,10));
|
||||||
|
Edit_Expire_Time->setText((entry->Expire.GetString(0)).mid(11,8));
|
||||||
|
if(entry->BinaryDataLength==0){
|
||||||
|
Label_AttachmentSize->setText("");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
QString unit;
|
||||||
|
int faktor;
|
||||||
|
int prec;
|
||||||
|
if(entry->BinaryDataLength<1000){unit=" Byte";faktor=1;prec=0;}
|
||||||
|
else {if(entry->BinaryDataLength<1000000){unit=" kB";faktor=1000;prec=1;}
|
||||||
|
else{unit=" MB";faktor=1000000;prec=1;}
|
||||||
|
}
|
||||||
|
Label_AttachmentSize->setText(QString::number((float)entry->BinaryDataLength/(float)faktor,'f',prec)+unit);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void CEditEntryDlg::InitIconComboBox(){
|
||||||
|
for(int i=0;i<52;i++){
|
||||||
|
Combo_IconPicker->insertItem(((CMainWindow*)parentWidget())->EntryIcons[i],"",i);
|
||||||
|
}
|
||||||
|
Combo_IconPicker->setCurrentItem(entry->ImageID);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void CEditEntryDlg::InitGroupComboBox(){
|
||||||
|
QString tmp;
|
||||||
|
int i;
|
||||||
|
for(i=0;i!=pw->Groups.size();i++){
|
||||||
|
tmp="";
|
||||||
|
for(int j=0;j<pw->Groups[i].Level;j++)tmp+=" ";
|
||||||
|
Combo_Group->insertItem(((CMainWindow*)parentWidget())->EntryIcons[pw->Groups[i].ImageID],
|
||||||
|
tmp+pw->Groups[i].Name,i);
|
||||||
|
}
|
||||||
|
Combo_Group->setCurrentItem(pw->getGroupIndex(entry->GroupID));
|
||||||
|
}
|
||||||
|
|
||||||
|
void CEditEntryDlg::OnButtonOK()
|
||||||
|
{
|
||||||
|
|
||||||
|
if(QString::compare(Edit_Password->text(),Edit_Password_w->text())!=0){
|
||||||
|
QMessageBox::warning(NULL,"Stopp",QString::fromUtf8("Passwort und Passwortwiederholung stimmen\nnicht überein."),"OK");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
QString str=Edit_Expire_Date->text();
|
||||||
|
if(CPwmTime::IsValidDate(str)==false){
|
||||||
|
QMessageBox::warning(NULL,"Stopp",QString::fromUtf8(str+" ist kein gültiges Datum."),"OK");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
str=Edit_Expire_Time->text();
|
||||||
|
if(CPwmTime::IsValidTime(str)==false){
|
||||||
|
QMessageBox::warning(NULL,"Stopp",QString::fromUtf8(str+" ist keine gültige Uhrzeit."),"OK");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
CPwmTime tmp_Expire;
|
||||||
|
tmp_Expire.SetDate(Edit_Expire_Date->text());
|
||||||
|
tmp_Expire.SetTime(Edit_Expire_Time->text());
|
||||||
|
if(tmp_Expire!=entry->Expire)
|
||||||
|
ModFlag=true;
|
||||||
|
if(entry->Title!=Edit_Title->text())
|
||||||
|
ModFlag=true;
|
||||||
|
if(entry->UserName!=Edit_UserName->text())
|
||||||
|
ModFlag=true;
|
||||||
|
if(entry->URL!=Edit_URL->text())
|
||||||
|
ModFlag=true;
|
||||||
|
if(entry->Additional!=Edit_Comment->text())
|
||||||
|
ModFlag=true;
|
||||||
|
QString& passw=entry->Password.getString();
|
||||||
|
if(passw!=Edit_Password->text())
|
||||||
|
ModFlag=true;
|
||||||
|
entry->Password.delRef();
|
||||||
|
|
||||||
|
entry->Expire.SetDate(Edit_Expire_Date->text());
|
||||||
|
entry->Expire.SetTime(Edit_Expire_Time->text());
|
||||||
|
entry->LastAccess.SetToNow();
|
||||||
|
if(ModFlag)entry->LastMod.SetToNow();
|
||||||
|
entry->Title=Edit_Title->text();
|
||||||
|
entry->UserName=Edit_UserName->text();
|
||||||
|
entry->URL=Edit_URL->text();
|
||||||
|
QString s=Edit_Password->text();
|
||||||
|
entry->Password.setString(s,true);
|
||||||
|
entry->Additional=Edit_Comment->text();
|
||||||
|
if(Combo_Group->currentItem()!=pw->getGroupIndex(entry->GroupID)){
|
||||||
|
pw->moveEntry(entry,&pw->Groups[Combo_Group->currentItem()]);
|
||||||
|
}
|
||||||
|
entry->ImageID=Combo_IconPicker->currentItem();
|
||||||
|
done(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
void CEditEntryDlg::OnButtonCancel()
|
||||||
|
{
|
||||||
|
entry->LastAccess.SetToNow();
|
||||||
|
done(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
void CEditEntryDlg::ChangeEchoMode()
|
||||||
|
{
|
||||||
|
if(Edit_Password->echoMode()==QLineEdit::Normal){
|
||||||
|
Edit_Password->setEchoMode(QLineEdit::Password);
|
||||||
|
Edit_Password_w->setEchoMode(QLineEdit::Password);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Edit_Password->setEchoMode(QLineEdit::Normal);
|
||||||
|
Edit_Password_w->setEchoMode(QLineEdit::Normal);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void CEditEntryDlg::OnPasswordTextChanged(const QString& txt)
|
||||||
|
{
|
||||||
|
Edit_Password_w->setText("");
|
||||||
|
int bits=(Edit_Password->text().length()*8);
|
||||||
|
Label_Bits->setText(QString::number(bits)+" Bit");
|
||||||
|
if(bits>128)bits=128;
|
||||||
|
Progress_Quali->setProgress(bits,128);
|
||||||
|
}
|
||||||
|
|
||||||
|
void CEditEntryDlg::OnPasswordwTextChanged(const QString& w)
|
||||||
|
{
|
||||||
|
|
||||||
|
if(QString::compare(Edit_Password_w->text(),Edit_Password->text().mid(0,(Edit_Password_w->text().length())))!=0){
|
||||||
|
Edit_Password_w->setPaletteBackgroundColor(QColor(255,125,125));
|
||||||
|
}else
|
||||||
|
{
|
||||||
|
Edit_Password_w->setPaletteBackgroundColor(QColor(255,255,255)); ///@FIXME Standart-Hintergrundfarbe nicht weiß
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void CEditEntryDlg::OnPasswordwLostFocus()
|
||||||
|
{
|
||||||
|
if(QString::compare(Edit_Password_w->text(),Edit_Password->text())!=0){
|
||||||
|
Edit_Password_w->setPaletteBackgroundColor(QColor(255,125,125));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Edit_Password_w->setPaletteBackgroundColor(QColor(255,255,255)); ///@FIXME Standart-Hintergrundfarbe nicht weiß
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void CEditEntryDlg::OnExpDateLostFocus()
|
||||||
|
{
|
||||||
|
QString str=Edit_Expire_Date->text();
|
||||||
|
if(CPwmTime::IsValidDate(str)==false){
|
||||||
|
Edit_Expire_Date->setPaletteBackgroundColor(QColor(255,125,125));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Edit_Expire_Date->setPaletteBackgroundColor(QColor(255,255,255));///@FIXME Standart-Hintergrundfarbe nicht weiß
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void CEditEntryDlg::OnExpTimeLostFocus()
|
||||||
|
{
|
||||||
|
QString str=Edit_Expire_Time->text();
|
||||||
|
if(CPwmTime::IsValidTime(str)==false){
|
||||||
|
Edit_Expire_Time->setPaletteBackgroundColor(QColor(255,125,125));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Edit_Expire_Time->setPaletteBackgroundColor(QColor(255,255,255));///@FIXME Standart-Hintergrundfarbe nicht weiß
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void CEditEntryDlg::OnNewAttachment()
|
||||||
|
{
|
||||||
|
QString filename=QFileDialog::getOpenFileName(QDir::homeDirPath(),"",this,QString::fromUtf8("Anhang hinzufügen..."));
|
||||||
|
if(filename=="")return;
|
||||||
|
QFile file(filename);
|
||||||
|
if(file.open(IO_ReadOnly)==false){
|
||||||
|
file.close();
|
||||||
|
QMessageBox::warning(NULL,trUtf8("Fehler"),trUtf8("Datei konnte nicht geöffnet werden."),"OK");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
ModFlag=true;
|
||||||
|
if(entry->pBinaryData)delete [] entry->pBinaryData;
|
||||||
|
entry->pBinaryData = new UINT8 [file.size()];
|
||||||
|
|
||||||
|
if(entry->pBinaryData==NULL){
|
||||||
|
file.close();
|
||||||
|
QMessageBox::critical(NULL,"Fehler",QString::fromUtf8("Es ist nicht genügend Arbeitsspeicher für diesen Vorgang vorhanden."),"OK");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
entry->BinaryDataLength=file.size();
|
||||||
|
file.readBlock((char*)entry->pBinaryData,file.size());
|
||||||
|
file.close();
|
||||||
|
QFileInfo info(filename);
|
||||||
|
entry->BinaryDesc=info.fileName();
|
||||||
|
file.close();
|
||||||
|
Edit_Attachment->setText(entry->BinaryDesc);
|
||||||
|
QString unit;
|
||||||
|
int faktor;
|
||||||
|
int prec;
|
||||||
|
if(entry->BinaryDataLength<1000){unit=" Byte";faktor=1;prec=0;}
|
||||||
|
else {if(entry->BinaryDataLength<1000000){unit=" kB";faktor=1000;prec=1;}
|
||||||
|
else{unit=" MB";faktor=1000000;prec=1;}
|
||||||
|
}
|
||||||
|
Label_AttachmentSize->setText(QString::number((float)entry->BinaryDataLength/(float)faktor,'f',prec)+unit);
|
||||||
|
ButtonOpenAttachment->setEnabled(true);
|
||||||
|
ButtonSaveAttachment->setEnabled(true);
|
||||||
|
ButtonDeleteAttachment->setEnabled(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
void CEditEntryDlg::OnSaveAttachment()
|
||||||
|
{
|
||||||
|
QString filename=QFileDialog::getSaveFileName(QDir::homeDirPath(),"",this,trUtf8("Anhang speichern..."));
|
||||||
|
if(filename=="")return;
|
||||||
|
QFile file(filename);
|
||||||
|
if(file.exists()){
|
||||||
|
int r=QMessageBox::warning(this,QString::fromUtf8("Vorhandene Datei überschreiben?"),QString::fromUtf8("Unter dem gewählten Dateinamen existiert bereits eine Datei.\nSoll sie überschrieben werden?"),"Ja","Nein",NULL,1,1);
|
||||||
|
if(r==1)return;
|
||||||
|
if(file.remove()==false){
|
||||||
|
QMessageBox::critical(NULL,"Fehler",QString::fromUtf8("Datei konnte nicht überschrieben werden."),"OK");
|
||||||
|
return;}
|
||||||
|
}
|
||||||
|
if(file.open(IO_WriteOnly)==false){
|
||||||
|
QMessageBox::critical(NULL,"Fehler",QString::fromUtf8("Datei konnte nicht erstellt werden."),"OK");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
int r=file.writeBlock((char*)entry->pBinaryData,entry->BinaryDataLength);
|
||||||
|
if(r==-1){
|
||||||
|
file.close();
|
||||||
|
QMessageBox::critical(NULL,"Fehler",QString::fromUtf8("Beim schreiben in der Datei ist ein Fehler aufgetreten."),"OK");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if(r!=entry->BinaryDataLength){
|
||||||
|
file.close();
|
||||||
|
QMessageBox::critical(NULL,"Fehler",QString::fromUtf8("Die Datei konnte nicht vollständig geschrieben werden."),"OK");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
file.close();
|
||||||
|
}
|
||||||
|
|
||||||
|
void CEditEntryDlg::OnDeleteAttachment()
|
||||||
|
{
|
||||||
|
int r=QMessageBox::warning(this,trUtf8("Anhang löschen?"),trUtf8("Sie sind dabei den Anhang zu löschen.\nSind Sie sicher, dass Sie dies tun wollen?"),trUtf8("Ja"),trUtf8("Nein"),NULL,1,1);
|
||||||
|
if(r==0){
|
||||||
|
ModFlag=true;
|
||||||
|
delete[]entry->pBinaryData;
|
||||||
|
entry->pBinaryData=NULL;
|
||||||
|
entry->BinaryDataLength=0;
|
||||||
|
entry->BinaryDesc="";
|
||||||
|
Edit_Attachment->setText("");
|
||||||
|
Label_AttachmentSize->setText("");
|
||||||
|
ButtonOpenAttachment->setEnabled(true);
|
||||||
|
ButtonSaveAttachment->setDisabled(true);
|
||||||
|
ButtonDeleteAttachment->setDisabled(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void CEditEntryDlg::OnButtonGenPw()
|
||||||
|
{
|
||||||
|
CGenPwDialog* pDlg=new CGenPwDialog(this,0,true);
|
||||||
|
pDlg->show();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*$SPECIALIZATION$*/
|
||||||
|
|
||||||
|
|
||||||
|
//#include "editentrydlg.moc"
|
||||||
|
|
|
@ -0,0 +1,74 @@
|
||||||
|
/***************************************************************************
|
||||||
|
* Copyright (C) 2005 by Tarek Saidi *
|
||||||
|
* tarek@linux *
|
||||||
|
* *
|
||||||
|
* This program is free software; you can redistribute it and/or modify *
|
||||||
|
* it under the terms of the GNU General Public License as published by *
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or *
|
||||||
|
* (at your option) any later version. *
|
||||||
|
* *
|
||||||
|
* 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, write to the *
|
||||||
|
* Free Software Foundation, Inc., *
|
||||||
|
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
|
||||||
|
***************************************************************************/
|
||||||
|
#include "mainwindow.h"
|
||||||
|
#ifndef EDITENTRYDLG_H
|
||||||
|
#define EDITENTRYDLG_H
|
||||||
|
#include "ui_EditEntryDlg.h"
|
||||||
|
|
||||||
|
class CEditEntryDlg : public EditEntryDialog
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
public:
|
||||||
|
CEditEntryDlg(QWidget* parent = 0, const char* name = 0, bool modal = FALSE, WFlags fl = 0);
|
||||||
|
~CEditEntryDlg();
|
||||||
|
virtual void showEvent(QShowEvent *);
|
||||||
|
/*$PUBLIC_FUNCTIONS$*/
|
||||||
|
|
||||||
|
public slots:
|
||||||
|
virtual void OnButtonOK();
|
||||||
|
/*$PUBLIC_SLOTS$*/
|
||||||
|
|
||||||
|
protected:
|
||||||
|
/*$PROTECTED_FUNCTIONS$*/
|
||||||
|
|
||||||
|
protected slots:
|
||||||
|
/*$PROTECTED_SLOTS$*/
|
||||||
|
|
||||||
|
public:
|
||||||
|
CMainWindow* mainwnd;
|
||||||
|
CEntry* entry;
|
||||||
|
PwDatabase* pw;
|
||||||
|
QPixmap* banner_pixmap;
|
||||||
|
bool ModFlag;
|
||||||
|
|
||||||
|
|
||||||
|
void CreateBanner();
|
||||||
|
void InitGroupComboBox();
|
||||||
|
void InitIconComboBox();
|
||||||
|
|
||||||
|
|
||||||
|
public slots:
|
||||||
|
virtual void OnExpTimeLostFocus();
|
||||||
|
virtual void OnExpDateLostFocus();
|
||||||
|
virtual void OnPasswordwLostFocus();
|
||||||
|
virtual void OnPasswordwTextChanged(const QString&);
|
||||||
|
virtual void OnPasswordTextChanged(const QString&);
|
||||||
|
virtual void ChangeEchoMode();
|
||||||
|
virtual void OnButtonCancel();
|
||||||
|
virtual void OnNewAttachment();
|
||||||
|
virtual void OnDeleteAttachment();
|
||||||
|
virtual void OnSaveAttachment();
|
||||||
|
virtual void OnButtonGenPw();
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
|
@ -0,0 +1,68 @@
|
||||||
|
/***************************************************************************
|
||||||
|
* Copyright (C) 2005 by Tarek Saidi *
|
||||||
|
* tarek@linux *
|
||||||
|
* *
|
||||||
|
* This program is free software; you can redistribute it and/or modify *
|
||||||
|
* it under the terms of the GNU General Public License as published by *
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or *
|
||||||
|
* (at your option) any later version. *
|
||||||
|
* *
|
||||||
|
* 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, write to the *
|
||||||
|
* Free Software Foundation, Inc., *
|
||||||
|
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
|
#include "mainwindow.h"
|
||||||
|
|
||||||
|
#include <qcombobox.h>
|
||||||
|
#include <qlineedit.h>
|
||||||
|
#include "EditGroupDlg.h"
|
||||||
|
|
||||||
|
|
||||||
|
CEditGroupDialog::CEditGroupDialog(QWidget* parent, const char* name, bool modal, WFlags fl)
|
||||||
|
: EditGroupDialog(parent,name, modal,fl)
|
||||||
|
{
|
||||||
|
IconID=0;
|
||||||
|
}
|
||||||
|
|
||||||
|
CEditGroupDialog::~CEditGroupDialog()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void CEditGroupDialog::showEvent(QShowEvent *event){
|
||||||
|
if(event->spontaneous()==false){
|
||||||
|
EditTitle->setText(GroupName);
|
||||||
|
for(int i=0;i<52;i++){
|
||||||
|
ComboIconPicker->insertItem(((CMainWindow*)parentWidget())->EntryIcons[i],"",i);
|
||||||
|
}
|
||||||
|
ComboIconPicker->setCurrentItem(IconID);
|
||||||
|
}}
|
||||||
|
|
||||||
|
void CEditGroupDialog::OnOK()
|
||||||
|
{
|
||||||
|
GroupName=EditTitle->text();
|
||||||
|
IconID=ComboIconPicker->currentItem();
|
||||||
|
OK=true;
|
||||||
|
close();
|
||||||
|
}
|
||||||
|
|
||||||
|
void CEditGroupDialog::OnCancel()
|
||||||
|
{
|
||||||
|
OK=false;
|
||||||
|
close();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*$SPECIALIZATION$*/
|
||||||
|
|
||||||
|
|
||||||
|
//#include "editgroupdlg.moc"
|
||||||
|
|
|
@ -0,0 +1,55 @@
|
||||||
|
/***************************************************************************
|
||||||
|
* Copyright (C) 2005 by Tarek Saidi *
|
||||||
|
* tarek@linux *
|
||||||
|
* *
|
||||||
|
* This program is free software; you can redistribute it and/or modify *
|
||||||
|
* it under the terms of the GNU General Public License as published by *
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or *
|
||||||
|
* (at your option) any later version. *
|
||||||
|
* *
|
||||||
|
* 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, write to the *
|
||||||
|
* Free Software Foundation, Inc., *
|
||||||
|
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
|
#ifndef EDITGROUPDLG_H
|
||||||
|
#define EDITGROUPDLG_H
|
||||||
|
|
||||||
|
#include "ui_EditGroupDlg.h"
|
||||||
|
#include <qstring.h>
|
||||||
|
|
||||||
|
class CEditGroupDialog : public EditGroupDialog
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
public:
|
||||||
|
CEditGroupDialog(QWidget* parent = 0, const char* name = 0, bool modal = FALSE, WFlags fl = 0 );
|
||||||
|
~CEditGroupDialog();
|
||||||
|
virtual void showEvent(QShowEvent *event);
|
||||||
|
/*$PUBLIC_FUNCTIONS$*/
|
||||||
|
|
||||||
|
protected:
|
||||||
|
/*$PROTECTED_FUNCTIONS$*/
|
||||||
|
|
||||||
|
protected slots:
|
||||||
|
/*$PROTECTED_SLOTS$*/
|
||||||
|
|
||||||
|
public:
|
||||||
|
int IconID;
|
||||||
|
QString GroupName;
|
||||||
|
bool OK;
|
||||||
|
|
||||||
|
|
||||||
|
public slots:
|
||||||
|
virtual void OnOK();
|
||||||
|
virtual void OnCancel();
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
|
@ -0,0 +1,149 @@
|
||||||
|
/***************************************************************************
|
||||||
|
* Copyright (C) 2005 by Tarek Saidi *
|
||||||
|
* mail@tarek-saidi.de *
|
||||||
|
* *
|
||||||
|
* This program is free software; you can redistribute it and/or modify *
|
||||||
|
* it under the terms of the GNU General Public License as published by *
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or *
|
||||||
|
* (at your option) any later version. *
|
||||||
|
* *
|
||||||
|
* 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, write to the *
|
||||||
|
* Free Software Foundation, Inc., *
|
||||||
|
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
|
||||||
|
***************************************************************************/
|
||||||
|
#include "mainwindow.h"
|
||||||
|
#include "LanguageDlg.h"
|
||||||
|
#include <qtranslator.h>
|
||||||
|
#include <qdir.h>
|
||||||
|
#include <qstringlist.h>
|
||||||
|
#include <qlistview.h>
|
||||||
|
#include <qmessagebox.h>
|
||||||
|
#include <iostream.h>
|
||||||
|
|
||||||
|
const char* infostrings[]={
|
||||||
|
QT_TRANSLATE_NOOP("_INFO","$TRANSL_AUTHOR"),
|
||||||
|
QT_TRANSLATE_NOOP("_INFO","$TRANSL_AUTHOR_CONTACT"),
|
||||||
|
QT_TRANSLATE_NOOP("_INFO","$TRANSL_LANGUAGE"),
|
||||||
|
QT_TRANSLATE_NOOP("_INFO","$TRANSL_VERSION")};
|
||||||
|
const char* msg[]={QT_TRANSLATE_NOOP("_MSG","Die Änderung der Sprache wird erst nach einem Neustart von Keepass wirksam."),
|
||||||
|
QT_TRANSLATE_NOOP("_MSG","OK"),
|
||||||
|
QT_TRANSLATE_NOOP("_MSG","Hinweis")};
|
||||||
|
|
||||||
|
CLanguageDlg::CLanguageDlg(QWidget* parent, const char* name, WFlags fl)
|
||||||
|
: LanguageDlg(parent,name,fl)
|
||||||
|
{
|
||||||
|
parentwnd=((CMainWindow*)parentWidget());
|
||||||
|
parentwnd->CreateBanner(Banner,parentwnd->Icon_I18n32x32,trUtf8("Spracheinstellungen"));
|
||||||
|
|
||||||
|
QListViewItem* item;
|
||||||
|
QString& config_lang=parentwnd->config.Language;
|
||||||
|
QStringList files;
|
||||||
|
|
||||||
|
QString langdir=parentwnd->appdir+"/../share/keepass/i18n/";
|
||||||
|
QDir dir(langdir);
|
||||||
|
if(dir.exists()){
|
||||||
|
files=dir.entryList("*.qm",QDir::Files);
|
||||||
|
}
|
||||||
|
|
||||||
|
List->insertItem(item=new QListViewItem(List,"","Deutsch","-","-"));
|
||||||
|
if(config_lang=="_DEUTSCH_")item->setPixmap(0,*parentwnd->Icon_Ok16x16);
|
||||||
|
pItems.push_back(item);
|
||||||
|
filenames.push_back("_DEUTSCH_");
|
||||||
|
|
||||||
|
|
||||||
|
for(int i=0;i<files.count();i++){
|
||||||
|
QTranslator translator;
|
||||||
|
if(!translator.load(langdir+files[i])){
|
||||||
|
QMessageBox::warning(this,tr("Warnung"),tr("Die Datei '%1' konnte nicht geladen werden.").arg(files[i]),tr("OK"),0,0,2,1);
|
||||||
|
continue;}
|
||||||
|
List->insertItem(item=new QListViewItem(List,"",translator.findMessage("_INFO","$TRANSL_LANGUAGE").translation()
|
||||||
|
,translator.findMessage("_INFO","$TRANSL_VERSION").translation()
|
||||||
|
,translator.findMessage("_INFO","$TRANSL_AUTHOR").translation()));
|
||||||
|
if(config_lang==files[i])item->setPixmap(0,*parentwnd->Icon_Ok16x16);
|
||||||
|
pItems.push_back(item);
|
||||||
|
filenames.push_back(files[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
CLanguageDlg::~CLanguageDlg()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void CLanguageDlg::showEvent(QShowEvent *event){
|
||||||
|
if(event->spontaneous()==false){
|
||||||
|
List->setColumnWidth(0,20);
|
||||||
|
int width=(List->width()-4-20)/3;
|
||||||
|
List->setColumnWidth(1,width);
|
||||||
|
List->setColumnWidth(2,width);
|
||||||
|
List->setColumnWidth(3,width);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void CLanguageDlg::OnItemRightClick(QListViewItem* item)
|
||||||
|
{
|
||||||
|
//CTX-MENU
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void CLanguageDlg::OnItemDoubleClicked(QListViewItem* item) // == Slot für Button "wählen"
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
QString langdir=parentwnd->appdir+"/../share/keepass/i18n/";
|
||||||
|
|
||||||
|
for(i=0;i<pItems.size();i++){
|
||||||
|
if(item==pItems[i])break;
|
||||||
|
if(i==pItems.size()-1){
|
||||||
|
cout << QString("unexpected error in %1, line %2").arg(__FILE__).arg(__LINE__) << endl;
|
||||||
|
exit(-1);}
|
||||||
|
}
|
||||||
|
if(filenames[i]!="_DEUTSCH_"){
|
||||||
|
QTranslator translator;
|
||||||
|
if(!translator.load(langdir+filenames[i])){
|
||||||
|
QMessageBox::warning(this,tr("Warnung"),tr("Die Datei '%1' konnte nicht geladen werden.").arg(filenames[i]),tr("OK"),0,0,2,1);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
QMessageBox::information(this,translator.findMessage("_MSG",msg[2]).translation()
|
||||||
|
,translator.findMessage("_MSG",msg[0]).translation()
|
||||||
|
,translator.findMessage("_MSG",msg[1]).translation()
|
||||||
|
,0,0,2,1);
|
||||||
|
}
|
||||||
|
else QMessageBox::information(this,QString::fromUtf8(msg[2]),QString::fromUtf8(msg[0]),QString::fromUtf8(msg[1]),0,0,2,1);
|
||||||
|
parentwnd->config.Language=filenames[i];
|
||||||
|
|
||||||
|
for(int j=0;j<pItems.size();j++){
|
||||||
|
if(j==i)pItems[j]->setPixmap(0,*parentwnd->Icon_Ok16x16);
|
||||||
|
else pItems[j]->setPixmap(0,0);}
|
||||||
|
|
||||||
|
List->setColumnWidth(0,20);
|
||||||
|
int width=(List->width()-4-20)/3;
|
||||||
|
List->setColumnWidth(1,width);
|
||||||
|
List->setColumnWidth(2,width);
|
||||||
|
List->setColumnWidth(3,width);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void CLanguageDlg::OnApplyButtonClicked()
|
||||||
|
{
|
||||||
|
QListViewItem* item=List->selectedItem();
|
||||||
|
if(item)OnItemDoubleClicked(item);
|
||||||
|
else QMessageBox::information(this,tr("Hinweis"),trUtf8("Es ist keine Übersetzung aufsgewählt."),tr("OK"),0,0,2,1);
|
||||||
|
}
|
||||||
|
|
||||||
|
void CLanguageDlg::OnButtonCloseClicked()
|
||||||
|
{
|
||||||
|
done(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*$SPECIALIZATION$*/
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,59 @@
|
||||||
|
/***************************************************************************
|
||||||
|
* Copyright (C) 2005 by Tarek Saidi *
|
||||||
|
* mail@tarek-saidi.de *
|
||||||
|
* *
|
||||||
|
* This program is free software; you can redistribute it and/or modify *
|
||||||
|
* it under the terms of the GNU General Public License as published by *
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or *
|
||||||
|
* (at your option) any later version. *
|
||||||
|
* *
|
||||||
|
* 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, write to the *
|
||||||
|
* Free Software Foundation, Inc., *
|
||||||
|
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
|
||||||
|
***************************************************************************/
|
||||||
|
#include "mainwindow.h"
|
||||||
|
#ifndef _LANGUAGEDLG_H_
|
||||||
|
#define _LANGUAGEDLG_H_
|
||||||
|
#include "ui_LanguageDlg.h"
|
||||||
|
#include <qpixmap.h>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
class CLanguageDlg : public LanguageDlg
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
public:
|
||||||
|
CLanguageDlg(QWidget* parent = 0, const char* name = 0, WFlags fl = 0 );
|
||||||
|
~CLanguageDlg();
|
||||||
|
CMainWindow* parentwnd;
|
||||||
|
vector<QString> filenames;
|
||||||
|
vector<QListViewItem*> pItems;
|
||||||
|
/*$PUBLIC_FUNCTIONS$*/
|
||||||
|
|
||||||
|
public slots:
|
||||||
|
/*$PUBLIC_SLOTS$*/
|
||||||
|
|
||||||
|
|
||||||
|
protected:
|
||||||
|
/*$PROTECTED_FUNCTIONS$*/
|
||||||
|
|
||||||
|
|
||||||
|
protected slots:
|
||||||
|
/*$PROTECTED_SLOTS$*/
|
||||||
|
virtual void showEvent(QShowEvent *e);
|
||||||
|
virtual void OnItemDoubleClicked(QListViewItem* item);
|
||||||
|
virtual void OnItemRightClick(QListViewItem* item);
|
||||||
|
virtual void OnButtonCloseClicked();
|
||||||
|
virtual void OnApplyButtonClicked();
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
|
@ -0,0 +1,206 @@
|
||||||
|
/***************************************************************************
|
||||||
|
* Copyright (C) 2005 by Tarek Saidi *
|
||||||
|
* tarek@linux *
|
||||||
|
* *
|
||||||
|
* This program is free software; you can redistribute it and/or modify *
|
||||||
|
* it under the terms of the GNU General Public License as published by *
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or *
|
||||||
|
* (at your option) any later version. *
|
||||||
|
* *
|
||||||
|
* 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, write to the *
|
||||||
|
* Free Software Foundation, Inc., *
|
||||||
|
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
|
#include "mainwindow.h"
|
||||||
|
|
||||||
|
#include "PasswordDlg.h"
|
||||||
|
#include <qdir.h>
|
||||||
|
#include <qstringlist.h>
|
||||||
|
#include <qcheckbox.h>
|
||||||
|
#include <qvaluelist.h>
|
||||||
|
#include <qlineedit.h>
|
||||||
|
#include <qcombobox.h>
|
||||||
|
#include <qpushbutton.h>
|
||||||
|
#include <qfiledialog.h>
|
||||||
|
#include <qmessagebox.h>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
CPasswordDialog::CPasswordDialog(QWidget* parent, const char* name, bool modal, WFlags fl)
|
||||||
|
: PasswordDlg(parent,name, modal,fl)
|
||||||
|
{
|
||||||
|
parentwnd=((CMainWindow*)parentWidget());
|
||||||
|
parentwnd->CreateBanner(Banner,parentwnd->Icon_Key32x32,trUtf8("Datenbank öffnen"));
|
||||||
|
Label_select=new LinkLabel((QWidget*)groupframe,"Select",trUtf8("Datei manuell wählen..."),410,100);
|
||||||
|
connect(Label_select,SIGNAL(clicked()),this,SLOT(OnSelectClicked()));
|
||||||
|
///@PlatformSpecific
|
||||||
|
QDir media("/media");
|
||||||
|
if(media.exists()){
|
||||||
|
Paths=media.entryList("*",QDir::Dirs);
|
||||||
|
Paths.erase(Paths.begin()); // delete "."
|
||||||
|
Paths.erase(Paths.begin()); // delete ".."
|
||||||
|
|
||||||
|
for(int i=0;i<Paths.count();i++){
|
||||||
|
Paths[i]="/media/"+Paths[i];
|
||||||
|
}
|
||||||
|
Paths.prepend(trUtf8("< keiner >"));
|
||||||
|
}
|
||||||
|
for(int i=0;i<Paths.count();i++){
|
||||||
|
Combo_Dirs->insertItem(0,Paths[i]);
|
||||||
|
IsFile.append(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!parentwnd->config.ShowPasswords)ChangeEchoMode();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
CPasswordDialog::~CPasswordDialog()
|
||||||
|
{
|
||||||
|
delete Label_select;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CPasswordDialog::OnComboSelectionChanged(int i)
|
||||||
|
{
|
||||||
|
if(i==0){
|
||||||
|
keyfile="";
|
||||||
|
Edit_Password->setEnabled(true);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
QFile file;
|
||||||
|
if(IsFile[i]==true)file.setName(Paths[i]);
|
||||||
|
else file.setName(Paths[i]+"/pwsafe.key");
|
||||||
|
|
||||||
|
if(file.exists()){
|
||||||
|
keyfile=file.name();
|
||||||
|
if(!CheckBox_Both->isChecked()){
|
||||||
|
Edit_Password->setText("");
|
||||||
|
Edit_Password->setDisabled(true);}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
QMessageBox::warning(this,"Datei nicht gefunden",QString::fromUtf8("Im gewählten Verzeichnis konnte keine Schlüsseldatei gefunden werden.\nStellen Sie sicher, dass der Schlüssel-Datenträger ordnungsgemäß eingehängt (mounted) ist.\nSollte die Schlüsseldatei nicht den Dateinamen 'pwsafe.key' haben, nutzen Sie bitte die manuelle Dateiauswahl."),"OK","","",0,0);
|
||||||
|
Edit_Password->setEnabled(true);
|
||||||
|
Combo_Dirs->setCurrentItem(0);
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void CPasswordDialog::OnButtonBrowse()
|
||||||
|
{
|
||||||
|
///@PlatformSpecific
|
||||||
|
QString dir=QFileDialog::getExistingDirectory(QDir::homeDirPath(),NULL,QString::fromUtf8("Verzeichnis wählen"));
|
||||||
|
if(dir=="")return;
|
||||||
|
|
||||||
|
QFile file(dir+"/pwsafe.key");
|
||||||
|
if(file.exists()){
|
||||||
|
keyfile=dir+"/pwsafe.key";
|
||||||
|
Combo_Dirs->insertItem(dir);
|
||||||
|
Combo_Dirs->setCurrentItem(Combo_Dirs->count()-1);
|
||||||
|
if(!CheckBox_Both->isChecked()){
|
||||||
|
Edit_Password->setDisabled(true);
|
||||||
|
Edit_Password->setText("");
|
||||||
|
password="";
|
||||||
|
}
|
||||||
|
Paths.append(dir);
|
||||||
|
IsFile.append(false);
|
||||||
|
return;}
|
||||||
|
QMessageBox::warning(this,"Datei nicht gefunden",QString::fromUtf8("Im gewählten Verzeichnis konnte keine Schlüsseldatei gefunden werden.\nStellen Sie sicher, dass der Schlüssel-Datenträger ordnungsgemäß eingehängt (mounted) ist.\nSollte die Schlüsseldatei nicht den Dateinamen 'pwsafe.key' haben, nutzen Sie bitte die manuelle Dateiauswahl."),"OK","","",0,0);
|
||||||
|
}
|
||||||
|
|
||||||
|
void CPasswordDialog::OnSelectClicked()
|
||||||
|
{
|
||||||
|
if(Button_Browse->isEnabled()){
|
||||||
|
keyfile=QFileDialog::getOpenFileName(QDir::homeDirPath(),"",this,QString::fromUtf8("Schlüsseldatei öffnen"));
|
||||||
|
if(keyfile=="")return;
|
||||||
|
Combo_Dirs->insertItem(keyfile);
|
||||||
|
Combo_Dirs->setCurrentItem(Combo_Dirs->count()-1);
|
||||||
|
if(!CheckBox_Both->isChecked()){
|
||||||
|
Edit_Password->setDisabled(true);
|
||||||
|
Edit_Password->setText("");
|
||||||
|
password="";
|
||||||
|
}
|
||||||
|
Paths.append(keyfile);
|
||||||
|
IsFile.append(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void CPasswordDialog::OnCancel()
|
||||||
|
{
|
||||||
|
canceled=true;
|
||||||
|
close();
|
||||||
|
}
|
||||||
|
|
||||||
|
void CPasswordDialog::OnOK()
|
||||||
|
{
|
||||||
|
canceled=false;
|
||||||
|
|
||||||
|
if(CheckBox_Both->isChecked()){
|
||||||
|
if(password==""){QMessageBox::warning(this,trUtf8("Fehler"),trUtf8("Bitte geben Sie ein Passwort ein.")
|
||||||
|
,trUtf8("OK"),"","",0,0);
|
||||||
|
return;}
|
||||||
|
if(keyfile==""){QMessageBox::warning(this,trUtf8("Fehler"),trUtf8("Bitte wählen Sie eine Schlüsseldatei.")
|
||||||
|
,trUtf8("OK"),"","",0,0);
|
||||||
|
return;}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if(password=="" && keyfile==""){QMessageBox::warning(this,trUtf8("Fehler"),trUtf8("Geben Sie bitte ein Passwort ein oder wählen Sie eine Schlüsseldatei.")
|
||||||
|
,trUtf8("OK"),"","",0,0);
|
||||||
|
return;}
|
||||||
|
}
|
||||||
|
close();
|
||||||
|
}
|
||||||
|
|
||||||
|
void CPasswordDialog::OnPasswordChanged(const QString &txt)
|
||||||
|
{
|
||||||
|
password=Edit_Password->text();
|
||||||
|
if(txt!="" && !(CheckBox_Both->isChecked())){
|
||||||
|
Combo_Dirs->setDisabled(true);
|
||||||
|
Button_Browse->setDisabled(true);}
|
||||||
|
else{
|
||||||
|
Combo_Dirs->setEnabled(true);
|
||||||
|
Button_Browse->setEnabled(true);}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void CPasswordDialog::OnCheckBox_BothChanged(int state)
|
||||||
|
{
|
||||||
|
if(state==QButton::On){
|
||||||
|
Combo_Dirs->setEnabled(true);
|
||||||
|
Button_Browse->setEnabled(true);
|
||||||
|
Edit_Password->setEnabled(true);}
|
||||||
|
else{
|
||||||
|
Edit_Password->setText("");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void CPasswordDialog::ChangeEchoMode()
|
||||||
|
{
|
||||||
|
|
||||||
|
if(Edit_Password->echoMode()==QLineEdit::Normal){
|
||||||
|
Edit_Password->setEchoMode(QLineEdit::Password);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Edit_Password->setEchoMode(QLineEdit::Normal);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*$SPECIALIZATION$*/
|
||||||
|
|
||||||
|
|
||||||
|
//#include "passworddialog.moc"
|
||||||
|
|
|
@ -0,0 +1,71 @@
|
||||||
|
/***************************************************************************
|
||||||
|
* Copyright (C) 2005 by Tarek Saidi *
|
||||||
|
* tarek@linux *
|
||||||
|
* *
|
||||||
|
* This program is free software; you can redistribute it and/or modify *
|
||||||
|
* it under the terms of the GNU General Public License as published by *
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or *
|
||||||
|
* (at your option) any later version. *
|
||||||
|
* *
|
||||||
|
* 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, write to the *
|
||||||
|
* Free Software Foundation, Inc., *
|
||||||
|
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
|
||||||
|
***************************************************************************/
|
||||||
|
#include "mainwindow.h"
|
||||||
|
#ifndef PASSWORDDIALOG_H
|
||||||
|
#define PASSWORDDIALOG_H
|
||||||
|
#include "lib/UrlLabel.h"
|
||||||
|
#include "ui_PasswordDlg.h"
|
||||||
|
|
||||||
|
class CPasswordDialog : public PasswordDlg
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
private:
|
||||||
|
CMainWindow* parentwnd;
|
||||||
|
int NumComboEntries;
|
||||||
|
QStringList Paths;
|
||||||
|
QValueList<bool> IsFile;
|
||||||
|
LinkLabel* Label_select;
|
||||||
|
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
QString keyfile;
|
||||||
|
QString password;
|
||||||
|
bool canceled;
|
||||||
|
|
||||||
|
|
||||||
|
public:
|
||||||
|
CPasswordDialog(QWidget* parent = 0, const char* name = 0, bool modal = FALSE, WFlags fl = 0 );
|
||||||
|
~CPasswordDialog();
|
||||||
|
/*$PUBLIC_FUNCTIONS$*/
|
||||||
|
|
||||||
|
public slots:
|
||||||
|
/*$PUBLIC_SLOTS$*/
|
||||||
|
|
||||||
|
virtual void OnOK();
|
||||||
|
virtual void OnCancel();
|
||||||
|
virtual void OnSelectClicked();
|
||||||
|
virtual void OnButtonBrowse();
|
||||||
|
protected:
|
||||||
|
/*$PROTECTED_FUNCTIONS$*/
|
||||||
|
|
||||||
|
protected slots:
|
||||||
|
/*$PROTECTED_SLOTS$*/
|
||||||
|
|
||||||
|
public slots:
|
||||||
|
virtual void OnComboSelectionChanged(int);
|
||||||
|
virtual void OnPasswordChanged(const QString &txt);
|
||||||
|
virtual void OnCheckBox_BothChanged(int state);
|
||||||
|
virtual void ChangeEchoMode();
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
|
@ -0,0 +1,236 @@
|
||||||
|
/***************************************************************************
|
||||||
|
* Copyright (C) 2005 by Tarek Saidi *
|
||||||
|
* tarek@linux *
|
||||||
|
* *
|
||||||
|
* This program is free software; you can redistribute it and/or modify *
|
||||||
|
* it under the terms of the GNU General Public License as published by *
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or *
|
||||||
|
* (at your option) any later version. *
|
||||||
|
* *
|
||||||
|
* 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, write to the *
|
||||||
|
* Free Software Foundation, Inc., *
|
||||||
|
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
|
#include <fstream>
|
||||||
|
#include <qspinbox.h>
|
||||||
|
#include <qmessagebox.h>
|
||||||
|
#include "PasswordGenDlg.h"
|
||||||
|
#include <qradiobutton.h>
|
||||||
|
#include <qlineedit.h>
|
||||||
|
#include <qcheckbox.h>
|
||||||
|
#include <qprogressbar.h>
|
||||||
|
|
||||||
|
CGenPwDialog::CGenPwDialog(QWidget* parent, const char* name, bool modal, WFlags fl)
|
||||||
|
: GenPwDlg(parent,name, modal,fl)
|
||||||
|
{
|
||||||
|
mainwnd=(CMainWindow*)(((CEditEntryDlg*)parentWidget())->parentWidget());
|
||||||
|
mainwnd->CreateBanner(Banner,mainwnd->Icon_Key32x32,QString::fromUtf8("Passwort generieren"));
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Radio_1->setChecked(true);
|
||||||
|
|
||||||
|
Edit_chars->setDisabled(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
CGenPwDialog::~CGenPwDialog()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void CGenPwDialog::OnRadio1StateChanged(int state)
|
||||||
|
{
|
||||||
|
switch (state){
|
||||||
|
case QButton::On:
|
||||||
|
Radio_2->setChecked(false);
|
||||||
|
checkBox1->setEnabled(true);
|
||||||
|
checkBox2->setEnabled(true);
|
||||||
|
checkBox3->setEnabled(true);
|
||||||
|
checkBox4->setEnabled(true);
|
||||||
|
checkBox5->setEnabled(true);
|
||||||
|
checkBox6->setEnabled(true);
|
||||||
|
checkBox7->setEnabled(true);
|
||||||
|
checkBox8->setEnabled(true);
|
||||||
|
break;
|
||||||
|
case QButton::Off:
|
||||||
|
if(Radio_2->isChecked()==false)Radio_2->setChecked(true);
|
||||||
|
checkBox1->setDisabled(true);
|
||||||
|
checkBox2->setDisabled(true);
|
||||||
|
checkBox3->setDisabled(true);
|
||||||
|
checkBox4->setDisabled(true);
|
||||||
|
checkBox5->setDisabled(true);
|
||||||
|
checkBox6->setDisabled(true);
|
||||||
|
checkBox7->setDisabled(true);
|
||||||
|
checkBox8->setDisabled(true);
|
||||||
|
|
||||||
|
break;
|
||||||
|
case QButton::NoChange:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void CGenPwDialog::OnRadio2StateChanged(int state)
|
||||||
|
{
|
||||||
|
switch (state){
|
||||||
|
case QButton::On:
|
||||||
|
Radio_1->setChecked(false);
|
||||||
|
Edit_chars->setEnabled(true);
|
||||||
|
break;
|
||||||
|
case QButton::Off:
|
||||||
|
if(Radio_1->isChecked()==false)Radio_1->setChecked(true);
|
||||||
|
Edit_chars->setDisabled(true);
|
||||||
|
break;
|
||||||
|
case QButton::NoChange:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void CGenPwDialog::OnGeneratePw()
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
Großbuchstaben 65...90
|
||||||
|
Kleinbuchstaben 97...122
|
||||||
|
Zahlen 48...57
|
||||||
|
Sonderzeichen 33...47;58...64;91...96;123...126
|
||||||
|
Minus 45
|
||||||
|
Unterstrich 95
|
||||||
|
ANSI >127
|
||||||
|
*/
|
||||||
|
|
||||||
|
int num=0;
|
||||||
|
char assoctable[255];
|
||||||
|
|
||||||
|
if(Radio_1->isChecked()){
|
||||||
|
if(checkBox1->isChecked()){
|
||||||
|
num+=AddToAssoctable(assoctable,65,90,num);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(checkBox2->isChecked()){
|
||||||
|
num+=AddToAssoctable(assoctable,97,122,num);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(checkBox3->isChecked()){
|
||||||
|
num+=AddToAssoctable(assoctable,48,57,num);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(checkBox4->isChecked()){
|
||||||
|
num+=AddToAssoctable(assoctable,33,47,num);
|
||||||
|
num+=AddToAssoctable(assoctable,58,64,num);
|
||||||
|
num+=AddToAssoctable(assoctable,91,96,num);
|
||||||
|
num+=AddToAssoctable(assoctable,123,126,num);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(checkBox5->isChecked()){
|
||||||
|
num+=AddToAssoctable(assoctable,32,32,num);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if(checkBox6->isChecked() && !checkBox4->isChecked()){
|
||||||
|
num+=AddToAssoctable(assoctable,45,45,num);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(checkBox7->isChecked() && !checkBox4->isChecked()){
|
||||||
|
num+=AddToAssoctable(assoctable,95,95,num);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(checkBox8->isChecked()){
|
||||||
|
num+=AddToAssoctable(assoctable,128,255,num);
|
||||||
|
}
|
||||||
|
}else
|
||||||
|
{
|
||||||
|
QString str=Edit_chars->text();
|
||||||
|
int i=0;
|
||||||
|
while(str.length()>0){
|
||||||
|
assoctable[i]=(char)((QChar)str[0]);
|
||||||
|
str.remove(str[0]);
|
||||||
|
i++;
|
||||||
|
num++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(num==0){
|
||||||
|
if(Radio_2->isChecked())QMessageBox::information(this,"Hinweis",QString::fromUtf8("Es wird mindestens ein Zeichen benötigt"),"OK");
|
||||||
|
else QMessageBox::information(this,"Hinweis",QString::fromUtf8("Es muss mindestens ein Gruppe von Zeichen gewählt werden"),"OK");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
int length=Spin_Num->value();
|
||||||
|
char* buffer=new char[length+1];
|
||||||
|
buffer[length]=0;
|
||||||
|
FILE *dev_random;
|
||||||
|
if(Check_strongrandom->isChecked()){
|
||||||
|
dev_random = fopen("/dev/random","r");}
|
||||||
|
else
|
||||||
|
{dev_random = fopen("/dev/urandom","r");}
|
||||||
|
|
||||||
|
if (dev_random==NULL){
|
||||||
|
QMessageBox::critical(this,"Fehler",QString::fromUtf8("'/dev/random' bzw. '/dev/urandom' konnte nicht zum lesen geöffnet werden."),"OK");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
unsigned char tmp;
|
||||||
|
|
||||||
|
for(int i=0;i<length;i++){
|
||||||
|
|
||||||
|
do{
|
||||||
|
fread(&tmp,1,1,dev_random);
|
||||||
|
}while(trim(tmp,num)==false);
|
||||||
|
|
||||||
|
buffer[i]=assoctable[tmp];
|
||||||
|
}
|
||||||
|
|
||||||
|
Edit_dest->setText(buffer);
|
||||||
|
delete [] buffer;
|
||||||
|
fclose(dev_random);
|
||||||
|
|
||||||
|
int bits;
|
||||||
|
if(checkBox8->isChecked())bits=length*8;
|
||||||
|
else bits=length*7;
|
||||||
|
Label_Bits->setText(QString::number(bits)+" Bit");
|
||||||
|
if(bits>128)bits=128;
|
||||||
|
Progress_Quali->setProgress(bits,128);
|
||||||
|
Progress_Quali->setPercentageVisible(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
int CGenPwDialog::AddToAssoctable(char* table,int start,int end,int pos){
|
||||||
|
for(int i=start;i<=end;i++){
|
||||||
|
table[pos]=i;
|
||||||
|
pos++;
|
||||||
|
}
|
||||||
|
return (end-start)+1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool CGenPwDialog::trim(unsigned char &x, int r){
|
||||||
|
if(x<r)return true;
|
||||||
|
if(256%r!=0)return false;
|
||||||
|
x=x-(x/r)*r;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CGenPwDialog::OnAccept()
|
||||||
|
{
|
||||||
|
((CEditEntryDlg*)parentWidget())->Edit_Password->setText(Edit_dest->text());
|
||||||
|
((CEditEntryDlg*)parentWidget())->Edit_Password_w->setText(Edit_dest->text());
|
||||||
|
((CEditEntryDlg*)parentWidget())->ModFlag=true;
|
||||||
|
close();
|
||||||
|
}
|
||||||
|
|
||||||
|
void CGenPwDialog::OnCancel()
|
||||||
|
{
|
||||||
|
close();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*$SPECIALIZATION$*/
|
||||||
|
|
||||||
|
|
||||||
|
//#include "genpwdialog.moc"
|
||||||
|
|
|
@ -0,0 +1,60 @@
|
||||||
|
/***************************************************************************
|
||||||
|
* Copyright (C) 2005 by Tarek Saidi *
|
||||||
|
* tarek@linux *
|
||||||
|
* *
|
||||||
|
* This program is free software; you can redistribute it and/or modify *
|
||||||
|
* it under the terms of the GNU General Public License as published by *
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or *
|
||||||
|
* (at your option) any later version. *
|
||||||
|
* *
|
||||||
|
* 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, write to the *
|
||||||
|
* Free Software Foundation, Inc., *
|
||||||
|
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
|
||||||
|
***************************************************************************/
|
||||||
|
#include "mainwindow.h"
|
||||||
|
#ifndef GENPWDIALOG_H
|
||||||
|
#define GENPWDIALOG_H
|
||||||
|
#include "ui_PasswordGenDlg.h"
|
||||||
|
#include "EditEntryDlg.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
class CGenPwDialog : public GenPwDlg
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
private:
|
||||||
|
int AddToAssoctable(char* table,int start,int end,int pos);
|
||||||
|
bool trim(unsigned char &value,int range);
|
||||||
|
public:
|
||||||
|
CGenPwDialog(QWidget* parent = 0, const char* name = 0, bool modal = FALSE, WFlags fl = 0 );
|
||||||
|
~CGenPwDialog();
|
||||||
|
/*$PUBLIC_FUNCTIONS$*/
|
||||||
|
|
||||||
|
public slots:
|
||||||
|
/*$PUBLIC_SLOTS$*/
|
||||||
|
|
||||||
|
protected:
|
||||||
|
/*$PROTECTED_FUNCTIONS$*/
|
||||||
|
|
||||||
|
protected slots:
|
||||||
|
/*$PROTECTED_SLOTS$*/
|
||||||
|
public:
|
||||||
|
CMainWindow* mainwnd;
|
||||||
|
public slots:
|
||||||
|
virtual void OnGeneratePw();
|
||||||
|
public slots:
|
||||||
|
virtual void OnRadio2StateChanged(int);
|
||||||
|
public slots:
|
||||||
|
virtual void OnRadio1StateChanged(int);
|
||||||
|
virtual void OnCancel();
|
||||||
|
virtual void OnAccept();
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
|
@ -0,0 +1,97 @@
|
||||||
|
/***************************************************************************
|
||||||
|
* Copyright (C) 2005 by Tarek Saidi *
|
||||||
|
* mail@tarek-saidi.de *
|
||||||
|
* *
|
||||||
|
* This program is free software; you can redistribute it and/or modify *
|
||||||
|
* it under the terms of the GNU General Public License as published by *
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or *
|
||||||
|
* (at your option) any later version. *
|
||||||
|
* *
|
||||||
|
* 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, write to the *
|
||||||
|
* Free Software Foundation, Inc., *
|
||||||
|
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
|
#include "PwManager.h"
|
||||||
|
#include "SearchDlg.h"
|
||||||
|
#include <qlineedit.h>
|
||||||
|
#include <qcheckbox.h>
|
||||||
|
#include <qregexp.h>
|
||||||
|
#include <qmessagebox.h>
|
||||||
|
|
||||||
|
CSearchDlg::CSearchDlg(CGroup* pGroup,QWidget* parent, const char* name, bool modal, WFlags fl)
|
||||||
|
: Search_Dlg(parent,name, modal,fl)
|
||||||
|
{
|
||||||
|
parentwnd=(CMainWindow*)parent;
|
||||||
|
parentwnd->CreateBanner(Banner,parentwnd->Icon_Search32x32,tr("Suchen"));
|
||||||
|
group=pGroup;
|
||||||
|
pw=parentwnd->db;
|
||||||
|
|
||||||
|
checkBox_Cs->setChecked(parentwnd->config.SearchOptions[0]);
|
||||||
|
checkBox_regExp->setChecked(parentwnd->config.SearchOptions[1]);
|
||||||
|
checkBox_Title->setChecked(parentwnd->config.SearchOptions[2]);
|
||||||
|
checkBox_Username->setChecked(parentwnd->config.SearchOptions[3]);
|
||||||
|
checkBox_Password->setChecked(parentwnd->config.SearchOptions[4]);
|
||||||
|
checkBox_Comment->setChecked(parentwnd->config.SearchOptions[5]);
|
||||||
|
checkBox_URL->setChecked(parentwnd->config.SearchOptions[6]);
|
||||||
|
checkBox_Attachment->setChecked(parentwnd->config.SearchOptions[7]);
|
||||||
|
}
|
||||||
|
|
||||||
|
CSearchDlg::~CSearchDlg()
|
||||||
|
{
|
||||||
|
parentwnd->config.SearchOptions[0]=checkBox_Cs->isChecked();
|
||||||
|
parentwnd->config.SearchOptions[1]=checkBox_regExp->isChecked();
|
||||||
|
parentwnd->config.SearchOptions[2]=checkBox_Title->isChecked();
|
||||||
|
parentwnd->config.SearchOptions[3]=checkBox_Username->isChecked();
|
||||||
|
parentwnd->config.SearchOptions[4]=checkBox_Password->isChecked();
|
||||||
|
parentwnd->config.SearchOptions[5]=checkBox_Comment->isChecked();
|
||||||
|
parentwnd->config.SearchOptions[6]=checkBox_URL->isChecked();
|
||||||
|
parentwnd->config.SearchOptions[7]=checkBox_Attachment->isChecked();
|
||||||
|
}
|
||||||
|
|
||||||
|
void CSearchDlg::OnButtonClose()
|
||||||
|
{
|
||||||
|
done(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void CSearchDlg::OnButtonSearch()
|
||||||
|
{
|
||||||
|
txt=Edit_Search->text();
|
||||||
|
regexp=checkBox_regExp->isChecked();
|
||||||
|
if(txt==""){
|
||||||
|
QMessageBox::information(this,trUtf8("Hinweis"),trUtf8("Bitte geben Sie einen Suchbegriff ein."),"OK",0,0);
|
||||||
|
return;}
|
||||||
|
|
||||||
|
for(int i=0;i<pw->Entries.size();i++){
|
||||||
|
if(group){if(pw->Entries[i].GroupID != group->ID)continue;}
|
||||||
|
bool hit=false;
|
||||||
|
if(checkBox_Title->isChecked()) hit=hit||search(pw->Entries[i].Title);
|
||||||
|
if(checkBox_Username->isChecked()) hit=hit||search(pw->Entries[i].UserName);
|
||||||
|
if(checkBox_URL->isChecked()) hit=hit||search(pw->Entries[i].URL);
|
||||||
|
if(checkBox_Comment->isChecked()) hit=hit||search(pw->Entries[i].Additional);
|
||||||
|
if(checkBox_Attachment->isChecked()) hit=hit||search(pw->Entries[i].BinaryDesc);
|
||||||
|
if(checkBox_Password->isChecked()) hit=hit||search(pw->Entries[i].Password.getString());
|
||||||
|
pw->Entries[i].Password.delRef();
|
||||||
|
if(hit)hits.push_back(&pw->Entries[i]);
|
||||||
|
}
|
||||||
|
done(1);
|
||||||
|
}
|
||||||
|
bool CSearchDlg::search(QString& str){
|
||||||
|
if(regexp){
|
||||||
|
QRegExp exp(txt,checkBox_Cs->isChecked());
|
||||||
|
if(str.contains(exp)==0)return false;}
|
||||||
|
else{
|
||||||
|
if(str.contains(txt,checkBox_Cs->isChecked())==0)return false;}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*$SPECIALIZATION$*/
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,63 @@
|
||||||
|
/***************************************************************************
|
||||||
|
* Copyright (C) 2005 by Tarek Saidi *
|
||||||
|
* mail@tarek-saidi.de *
|
||||||
|
* *
|
||||||
|
* This program is free software; you can redistribute it and/or modify *
|
||||||
|
* it under the terms of the GNU General Public License as published by *
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or *
|
||||||
|
* (at your option) any later version. *
|
||||||
|
* *
|
||||||
|
* 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, write to the *
|
||||||
|
* Free Software Foundation, Inc., *
|
||||||
|
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
|
||||||
|
***************************************************************************/
|
||||||
|
#include "mainwindow.h"
|
||||||
|
#ifndef SEARCHDLG_H
|
||||||
|
#define SEARCHDLG_H
|
||||||
|
#include "ui_SearchDlg.h"
|
||||||
|
|
||||||
|
class CSearchDlg : public Search_Dlg
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
public:
|
||||||
|
CSearchDlg(CGroup* pGroup=NULL,QWidget* parent = 0, const char* name = 0, bool modal = FALSE, WFlags fl = 0 );
|
||||||
|
~CSearchDlg();
|
||||||
|
/*$PUBLIC_FUNCTIONS$*/
|
||||||
|
|
||||||
|
public slots:
|
||||||
|
/*$PUBLIC_SLOTS$*/
|
||||||
|
|
||||||
|
protected:
|
||||||
|
/*$PROTECTED_FUNCTIONS$*/
|
||||||
|
|
||||||
|
protected slots:
|
||||||
|
/*$PROTECTED_SLOTS$*/
|
||||||
|
|
||||||
|
public slots:
|
||||||
|
virtual void OnButtonClose();
|
||||||
|
public slots:
|
||||||
|
virtual void OnButtonSearch();
|
||||||
|
|
||||||
|
|
||||||
|
private:
|
||||||
|
CMainWindow* parentwnd;
|
||||||
|
CGroup* group;
|
||||||
|
PwDatabase* pw;
|
||||||
|
QString txt;
|
||||||
|
bool regexp;
|
||||||
|
bool search(QString&);
|
||||||
|
|
||||||
|
public:
|
||||||
|
vector<CEntry*> hits;
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
|
@ -0,0 +1,125 @@
|
||||||
|
/***************************************************************************
|
||||||
|
* Copyright (C) 2005 by Tarek Saidi *
|
||||||
|
* tarek@linux *
|
||||||
|
* *
|
||||||
|
* This program is free software; you can redistribute it and/or modify *
|
||||||
|
* it under the terms of the GNU General Public License as published by *
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or *
|
||||||
|
* (at your option) any later version. *
|
||||||
|
* *
|
||||||
|
* 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, write to the *
|
||||||
|
* Free Software Foundation, Inc., *
|
||||||
|
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
|
||||||
|
***************************************************************************/
|
||||||
|
#include "mainwindow.h"
|
||||||
|
#include <qpixmap.h>
|
||||||
|
#include <qcheckbox.h>
|
||||||
|
#include <qspinbox.h>
|
||||||
|
#include <qcolordialog.h>
|
||||||
|
#include <qlineedit.h>
|
||||||
|
#include "SettingsDlg.h"
|
||||||
|
|
||||||
|
|
||||||
|
CSettingsDlg::CSettingsDlg(QWidget* parent, const char* name, bool modal, WFlags fl)
|
||||||
|
: SettingsDialog(parent,name, modal,fl)
|
||||||
|
{
|
||||||
|
pw=((CMainWindow*)parentWidget())->db;
|
||||||
|
mainwnd=((CMainWindow*)parentWidget());
|
||||||
|
mainwnd->CreateBanner(Banner,mainwnd->Icon_Settings32x32,trUtf8("Einstellungen"));
|
||||||
|
|
||||||
|
CheckBox_OpenLast->setChecked(mainwnd->config.OpenLast);
|
||||||
|
SpinBox_ClipboardTime->setValue(mainwnd->config.ClipboardTimeOut);
|
||||||
|
pixmTextColor->setPixmap(*(new QPixmap(pixmTextColor->width(),pixmTextColor->height())));
|
||||||
|
pixmTextColor->pixmap()->fill(mainwnd->config.BannerTextColor);
|
||||||
|
|
||||||
|
pixmColor1->setPixmap(*(new QPixmap(pixmColor1->width(),pixmColor1->height())));
|
||||||
|
pixmColor1->pixmap()->fill(mainwnd->config.BannerColor1);
|
||||||
|
|
||||||
|
pixmColor2->setPixmap(*(new QPixmap(pixmColor2->width(),pixmColor2->height())));
|
||||||
|
pixmColor2->pixmap()->fill(mainwnd->config.BannerColor2);
|
||||||
|
|
||||||
|
color1=mainwnd->config.BannerColor1;
|
||||||
|
color2=mainwnd->config.BannerColor2;
|
||||||
|
textcolor=mainwnd->config.BannerTextColor;
|
||||||
|
|
||||||
|
CheckBox_ShowPasswords->setChecked(mainwnd->config.ShowPasswords);
|
||||||
|
Edit_BrowserCmd->setText(mainwnd->config.OpenUrlCommand);
|
||||||
|
CheckBox_ExpandGroupTree->setChecked(mainwnd->config.ExpandGroupTree);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
CSettingsDlg::~CSettingsDlg()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void CSettingsDlg::OnOK()
|
||||||
|
{
|
||||||
|
mainwnd->config.OpenLast=CheckBox_OpenLast->isChecked();
|
||||||
|
mainwnd->config.ClipboardTimeOut=SpinBox_ClipboardTime->value();
|
||||||
|
mainwnd->config.BannerColor1=color1;
|
||||||
|
mainwnd->config.BannerColor2=color2;
|
||||||
|
mainwnd->config.BannerTextColor=textcolor;
|
||||||
|
mainwnd->config.ShowPasswords=CheckBox_ShowPasswords->isChecked();
|
||||||
|
mainwnd->config.OpenUrlCommand=Edit_BrowserCmd->text();
|
||||||
|
mainwnd->config.ExpandGroupTree=CheckBox_ExpandGroupTree->isChecked();
|
||||||
|
close();
|
||||||
|
}
|
||||||
|
|
||||||
|
void CSettingsDlg::OnCancel()
|
||||||
|
{
|
||||||
|
close();
|
||||||
|
}
|
||||||
|
|
||||||
|
void CSettingsDlg::OnTextColor()
|
||||||
|
{
|
||||||
|
QColor c=QColorDialog::getColor(textcolor,this);
|
||||||
|
if(c.isValid()){
|
||||||
|
textcolor=c;
|
||||||
|
QPixmap *px=new QPixmap(pixmTextColor->width(),pixmTextColor->height());
|
||||||
|
px->fill(c);
|
||||||
|
pixmTextColor->clear();
|
||||||
|
pixmTextColor->setPixmap(*px);
|
||||||
|
mainwnd->CreateBanner(Banner,mainwnd->Icon_Settings32x32,trUtf8("Einstellungen"),color1,color2,textcolor);}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void CSettingsDlg::OnColor2()
|
||||||
|
{
|
||||||
|
QColor c=QColorDialog::getColor(color2,this);
|
||||||
|
if(c.isValid()){
|
||||||
|
color2=c;
|
||||||
|
QPixmap *px=new QPixmap(pixmColor2->width(),pixmColor2->height());
|
||||||
|
px->fill(c);
|
||||||
|
pixmColor2->clear();
|
||||||
|
pixmColor2->setPixmap(*px);
|
||||||
|
mainwnd->CreateBanner(Banner,mainwnd->Icon_Settings32x32,trUtf8("Einstellungen"),color1,color2,textcolor);}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void CSettingsDlg::OnColor1()
|
||||||
|
{
|
||||||
|
QColor c=QColorDialog::getColor(color1,this);
|
||||||
|
if(c.isValid()){
|
||||||
|
color1=c;
|
||||||
|
QPixmap *px=new QPixmap(pixmColor1->width(),pixmColor1->height());
|
||||||
|
px->fill(c);
|
||||||
|
pixmColor1->clear();
|
||||||
|
pixmColor1->setPixmap(*px);
|
||||||
|
mainwnd->CreateBanner(Banner,mainwnd->Icon_Settings32x32,trUtf8("Einstellungen"),color1,color2,textcolor);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*$SPECIALIZATION$*/
|
||||||
|
|
||||||
|
|
||||||
|
//#include "settingsdlg.moc"
|
||||||
|
|
|
@ -0,0 +1,60 @@
|
||||||
|
/***************************************************************************
|
||||||
|
* Copyright (C) 2005 by Tarek Saidi *
|
||||||
|
* tarek@linux *
|
||||||
|
* *
|
||||||
|
* This program is free software; you can redistribute it and/or modify *
|
||||||
|
* it under the terms of the GNU General Public License as published by *
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or *
|
||||||
|
* (at your option) any later version. *
|
||||||
|
* *
|
||||||
|
* 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, write to the *
|
||||||
|
* Free Software Foundation, Inc., *
|
||||||
|
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
|
||||||
|
***************************************************************************/
|
||||||
|
#include "mainwindow.h"
|
||||||
|
#ifndef SETTINGSDLG_H
|
||||||
|
#define SETTINGSDLG_H
|
||||||
|
|
||||||
|
#include "ui_SettingsDlg.h"
|
||||||
|
#include <qcolor.h>
|
||||||
|
|
||||||
|
class CSettingsDlg : public SettingsDialog
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
public:
|
||||||
|
CMainWindow* mainwnd;
|
||||||
|
PwDatabase* pw;
|
||||||
|
CSettingsDlg(QWidget* parent = 0, const char* name = 0, bool modal = FALSE, WFlags fl = 0 );
|
||||||
|
~CSettingsDlg();
|
||||||
|
/*$PUBLIC_FUNCTIONS$*/
|
||||||
|
|
||||||
|
public slots:
|
||||||
|
/*$PUBLIC_SLOTS$*/
|
||||||
|
|
||||||
|
protected:
|
||||||
|
/*$PROTECTED_FUNCTIONS$*/
|
||||||
|
|
||||||
|
protected slots:
|
||||||
|
/*$PROTECTED_SLOTS$*/
|
||||||
|
|
||||||
|
public slots:
|
||||||
|
virtual void OnCancel();
|
||||||
|
public slots:
|
||||||
|
virtual void OnOK();
|
||||||
|
virtual void OnTextColor();
|
||||||
|
virtual void OnColor2();
|
||||||
|
virtual void OnColor1();
|
||||||
|
|
||||||
|
private:
|
||||||
|
QColor color1,color2,textcolor;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
|
@ -0,0 +1,58 @@
|
||||||
|
/***************************************************************************
|
||||||
|
* Copyright (C) 2005 by Tarek Saidi *
|
||||||
|
* mail@tarek-saidi.de *
|
||||||
|
* *
|
||||||
|
* This program is free software; you can redistribute it and/or modify *
|
||||||
|
* it under the terms of the GNU General Public License as published by *
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or *
|
||||||
|
* (at your option) any later version. *
|
||||||
|
* *
|
||||||
|
* 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, write to the *
|
||||||
|
* Free Software Foundation, Inc., *
|
||||||
|
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
|
|
||||||
|
#include "SimplePasswordDlg.h"
|
||||||
|
#include <qlineedit.h>
|
||||||
|
#include <qpushbutton.h>
|
||||||
|
|
||||||
|
CSimplePasswordDialog::CSimplePasswordDialog(bool HidePw,QWidget* parent, const char* name, bool modal, WFlags fl)
|
||||||
|
: SimplePasswordDialog(parent,name, modal,fl)
|
||||||
|
{
|
||||||
|
if(HidePw)Button_HidePassword->toggle();
|
||||||
|
}
|
||||||
|
|
||||||
|
CSimplePasswordDialog::~CSimplePasswordDialog()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void CSimplePasswordDialog::OnCancel()
|
||||||
|
{
|
||||||
|
done(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void CSimplePasswordDialog::OnOK()
|
||||||
|
{
|
||||||
|
password=EditPassword->text();
|
||||||
|
done(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void CSimplePasswordDialog::OnHidePasswordToggled(bool state)
|
||||||
|
{
|
||||||
|
if(state)EditPassword->setEchoMode(QLineEdit::Password);
|
||||||
|
else EditPassword->setEchoMode(QLineEdit::Normal);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*$SPECIALIZATION$*/
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,54 @@
|
||||||
|
/***************************************************************************
|
||||||
|
* Copyright (C) 2005 by Tarek Saidi *
|
||||||
|
* mail@tarek-saidi.de *
|
||||||
|
* *
|
||||||
|
* This program is free software; you can redistribute it and/or modify *
|
||||||
|
* it under the terms of the GNU General Public License as published by *
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or *
|
||||||
|
* (at your option) any later version. *
|
||||||
|
* *
|
||||||
|
* 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, write to the *
|
||||||
|
* Free Software Foundation, Inc., *
|
||||||
|
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
|
#ifndef _SIMPLEPASSWORDDIALOG_H
|
||||||
|
#define _SIMPLEPASSWORDDIALOG_H
|
||||||
|
|
||||||
|
#include "ui_SimplePasswordDlg.h"
|
||||||
|
|
||||||
|
class CSimplePasswordDialog : public SimplePasswordDialog
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
public:
|
||||||
|
CSimplePasswordDialog(bool HidePw,QWidget* parent = 0, const char* name = 0, bool modal = FALSE, WFlags fl = 0 );
|
||||||
|
~CSimplePasswordDialog();
|
||||||
|
/*$PUBLIC_FUNCTIONS$*/
|
||||||
|
|
||||||
|
public slots:
|
||||||
|
/*$PUBLIC_SLOTS$*/
|
||||||
|
|
||||||
|
protected:
|
||||||
|
/*$PROTECTED_FUNCTIONS$*/
|
||||||
|
|
||||||
|
protected slots:
|
||||||
|
/*$PROTECTED_SLOTS$*/
|
||||||
|
public: QString password;
|
||||||
|
|
||||||
|
public slots:
|
||||||
|
virtual void OnCancel();
|
||||||
|
public slots:
|
||||||
|
virtual void OnOK();
|
||||||
|
public slots:
|
||||||
|
virtual void OnHidePasswordToggled(bool state);
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
|
@ -0,0 +1,2 @@
|
||||||
|
Mit QMake 4.x bekommen die vom uic erstellten Header
|
||||||
|
automatisch den Präfix ui_* - also vor der Portierung entfernen!
|
|
@ -0,0 +1,196 @@
|
||||||
|
<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
|
||||||
|
<class>AboutDlg</class>
|
||||||
|
<widget class="QDialog">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>AboutDlg</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>419</width>
|
||||||
|
<height>211</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy>
|
||||||
|
<hsizetype>0</hsizetype>
|
||||||
|
<vsizetype>0</vsizetype>
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="minimumSize">
|
||||||
|
<size>
|
||||||
|
<width>419</width>
|
||||||
|
<height>211</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="maximumSize">
|
||||||
|
<size>
|
||||||
|
<width>211</width>
|
||||||
|
<height>32767</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="caption">
|
||||||
|
<string>Über...</string>
|
||||||
|
</property>
|
||||||
|
<widget class="Line">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>line1</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>10</x>
|
||||||
|
<y>120</y>
|
||||||
|
<width>400</width>
|
||||||
|
<height>20</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="frameShape">
|
||||||
|
<enum>HLine</enum>
|
||||||
|
</property>
|
||||||
|
<property name="frameShadow">
|
||||||
|
<enum>Sunken</enum>
|
||||||
|
</property>
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Horizontal</enum>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QLabel">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>Label3</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>10</x>
|
||||||
|
<y>140</y>
|
||||||
|
<width>60</width>
|
||||||
|
<height>20</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Homepage:</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QLabel">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>Banner</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>420</width>
|
||||||
|
<height>50</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="pixmap">
|
||||||
|
<pixmap>image0</pixmap>
|
||||||
|
</property>
|
||||||
|
<property name="scaledContents">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QLabel">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>Label4</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>10</x>
|
||||||
|
<y>160</y>
|
||||||
|
<width>54</width>
|
||||||
|
<height>20</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>EMail:</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QPushButton">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>ButtonClose</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>326</x>
|
||||||
|
<y>183</y>
|
||||||
|
<width>80</width>
|
||||||
|
<height>20</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Schlie&ßen</string>
|
||||||
|
</property>
|
||||||
|
<property name="accel">
|
||||||
|
<string>Alt+ß</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QLabel">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>Label2</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>10</x>
|
||||||
|
<y>100</y>
|
||||||
|
<width>400</width>
|
||||||
|
<height>20</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Keepass/L steht unter der General Public License.</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QLabel">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>Label1</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>10</x>
|
||||||
|
<y>80</y>
|
||||||
|
<width>240</width>
|
||||||
|
<height>20</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Copyright (c) Tarek Saidi 2005</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QLabel">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>Label0</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>10</x>
|
||||||
|
<y>60</y>
|
||||||
|
<width>220</width>
|
||||||
|
<height>20</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Keepass/L Version %1</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</widget>
|
||||||
|
<images>
|
||||||
|
<image name="image0">
|
||||||
|
<data format="XPM.GZ" length="4833">789c8597596f23470e80dfe75718c3b7c182e9eabb11ec834fc9873cbeaf601fc86ec9966df994cfc5fef794483633934d10c836fcb9582cde55fee5dbd2d9de68e9db2f5f9ee7349fb64bed153d2d7deb5e66b38fdffef3efff7ef99aa64b8baf2c5b4abffeebcb57dc5c6a9720499290640b8613e110ff22eb941b07657e7256f90be742e4a7c6a9ed076791c7a1732efbd784d3f817615a71167db0e55c0a17ce95c88f8ced3c7e74d6f306cea29fd159f583b3e8a75367d18f5bce8df0b63389be67e3ccfcd97716fd78e22cfaf1d459edefedcbedbc63e75af4cf85b33edeb8616cfef1b5b39eb7e72cf6c28b7166fb53678df7b5b3fadf388b3d503a8b3d40c6b9eaa35767d9cf37c6a5e53f73d6f3769d55bedf5f2789ac6bfcf2de1fda33ce4cdfbb716eeb6fce1acf1de3c2f2bbe7acf573605cdafe2b67f5efd359f20bb97165febe38b3c453fd2bfa7cd0a67165fea97c9db416ff1de3b1e9d77a6d12567bf8c159ed9d1ab7969fc2b8d378e2ba304579c93769bd719457fd524f2184cae221f51bd250a8fd3c35ae4cfec1b8b6fa06e3c6eaffc859d651f215b2d0c7efdab8327b969d459e9e8d7bfd57c68df587c43be4c1e20b685c1b9f0b17c1e283cfce927f96f911ca40d63fcbce7afebd31eb3a91b3fa37376ead9e64dea5759606a94f546eb23499883d9bc69932bef4acf22cf594725c1f8bfca9b3c8d3aa711e82c82bb73de3817111a4fe2171d67e1a1b97ba8e87ce5a8f12bfb48b2cfae8ceb85206894f9666135bff2e5c45d6fae894a3393a3f5be13aaeb7729eca4ff2d6ce3f5b701ef2b1c95f0aa7715dfb4de657519675d0fc8d8c9ba0f527f12faab234fd8fc695f1ab716dfa3f84ebb2089dec5f779678d381711d74beae398b7f540b3751bfd6e39ab1c9033b6bbd07e326687dcb3c2da8ecf47cfa301e9bbe37e389c94b3c0a2edba0f5f361dc194b3c8b36eed77acf9c453fab7f6d95587e6e8d83c957c25dc9668fdc5fc538b2c6e3a6e754e7adcc836252b6a9d69bccffb2ad535d67e98fb2ab538befaab3e8439947e5b84e82f6ffa17165f1bd7096fcc1ccb8b67a981b375a0f20f92d2775b078493dd54c75aaef0de9dfba75167fea2eb2f683dc5771388d753fbe396b7fca7c6b52ea2c5e57ce621fcbfdd26464f1812767ed8f63e3ced665de34c464fe9e1bb3d5b3f45bc3dca67a7fc9fba7697b46a9bf66cc13cb8fcc8b66c2960f3832b6f3988dad1e2828b799c53371d6f9766b9c5b7f4afe286983f5c3aeb3be177ace6c1ecc9cb51f6a678def8a7169f351fca710f5a93d9db3d64febacf9981aa76a2f5e3b6b7d5d1af7f6df3aebfb67e4acf93f72d6f972675cd83c7d77d67cac3bebfdfce9acf7eb87b3c66b665cdabc5feed9f44bfd51caade59395dbc4fc3f33cecc9f9b9e35bf786fdccfffc459e7ffc059eb7fe2acefcfd459df13dbceda5f4367bddffed8affdf0665c243a6f769c351f6367f51f7ad6fcefcf9dd57e72567fd959e3dd3a6bbc3b677daf34ce6affadb3dadbdb57263a5f46ce7adf8e9dd5dededfbe5e2f9cb5de5b678df7bb71a5fa59f767dccf77cd57d6f7136c185b7e79d359f3159cf53df7e8acf19e19f7f57ee5acef9b0d67f5b733b6fa844b63f38f07ceea9fcc3fca5b9bef58199b3dbce5acefa53567bd6fee8c73d54f95b3fa3b34b6fcc3b3b3f6dba1b3f6afe6a788fb6bad9f1f3f08f19b90b18ddff0f3dafefc2fe4bb284948f1b7f1e2e73fca4ff012af708ad77883b77f2f8f33bc8b9aeff1011ff1099f718e2ff88a6ff88e1ff8196da33fc92fe30aaee21aaee3060e70889bb885dbb88323dc8d7a407df941be8dd2dfa3ec5e94dac7033cc4233cc6133cc5333cc78bffb327c18029669863812556d1ef1a9ba8168080a1850ec608daaf30814bb882296ec035dc486426700b33b8837b78c0213cc2133ce367af3f7a93c01c5e700b5ee10d6fe11d093ee01396610556f104d6601d36a2d77abf0da2f41036610bb6b1841d18c12e7c873dd887033884233886133885b318297d3fc558e114cee1021208d1e01432c8a180122aa8e3c5190f2322c63bb507995aea62bc37698c9f34a14bba822d9ad235ddd02dcde80e87744f0f7fc823d1233de1363d634d737aa1577aa3ebf8047ba70ffaa4655aa1555aa375b37f0c298e6923ca0fb0a1212cd3266dd136edd08876e93bedd13e1dd0211d997e88f6031dd3099d624e67744e17f15f8b40296594cb273ef61632aa5ff34515d5d43032707c19449fd6e993db283b8217ee62fc0630fa31bf1cdf037c493bb1724ef98a162d30e56bcae185467cc3b731dfa0f935f919dff13daef1033ff2133fc77d039e73d41da55ff90d268b8afba17ea27d30a18edff9833f7999577895d7a88421aff31b6fc0e04ff5c6314acc031ef2266cc4c7ce036ff12ca66a10ff75d95eacfd2ccf3b0bfd38e651ac93f7d83b77f84e47d1e6f1222e0bf9c5ef3ff7a3f690766f4ffd0490aa85affffbf5cbef985d44a8</data>
|
||||||
|
</image>
|
||||||
|
</images>
|
||||||
|
<connections>
|
||||||
|
<connection>
|
||||||
|
<sender>ButtonClose</sender>
|
||||||
|
<signal>clicked()</signal>
|
||||||
|
<receiver>AboutDlg</receiver>
|
||||||
|
<slot>OnClose()</slot>
|
||||||
|
</connection>
|
||||||
|
</connections>
|
||||||
|
<slots>
|
||||||
|
<slot>OnClose()</slot>
|
||||||
|
</slots>
|
||||||
|
<layoutdefaults spacing="6" margin="11"/>
|
||||||
|
</UI>
|
|
@ -0,0 +1,345 @@
|
||||||
|
<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
|
||||||
|
<class>ChangeKeyDialog</class>
|
||||||
|
<widget class="QDialog">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>ChangeKeyDialog</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>560</width>
|
||||||
|
<height>270</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="caption">
|
||||||
|
<string>Hauptschlüssel ändern</string>
|
||||||
|
</property>
|
||||||
|
<widget class="QLabel">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>Banner</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>560</width>
|
||||||
|
<height>50</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="pixmap">
|
||||||
|
<pixmap>image0</pixmap>
|
||||||
|
</property>
|
||||||
|
<property name="scaledContents">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QLabel">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>textLabel1</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>56</y>
|
||||||
|
<width>450</width>
|
||||||
|
<height>16</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="frameShape">
|
||||||
|
<enum>NoFrame</enum>
|
||||||
|
</property>
|
||||||
|
<property name="frameShadow">
|
||||||
|
<enum>Plain</enum>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Geben Sie das Passwort ein und/oder wählen Sie eine Schlüsseldatei.</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QPushButton">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>ButtonCancel</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>457</x>
|
||||||
|
<y>240</y>
|
||||||
|
<width>90</width>
|
||||||
|
<height>20</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Abb&rechen</string>
|
||||||
|
</property>
|
||||||
|
<property name="accel">
|
||||||
|
<string>Alt+R</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QPushButton">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>ButtonOK</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>360</x>
|
||||||
|
<y>240</y>
|
||||||
|
<width>90</width>
|
||||||
|
<height>20</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>O&K</string>
|
||||||
|
</property>
|
||||||
|
<property name="accel">
|
||||||
|
<string>Alt+K</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QGroupBox">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>groupBox1</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>10</x>
|
||||||
|
<y>80</y>
|
||||||
|
<width>540</width>
|
||||||
|
<height>150</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="title">
|
||||||
|
<string>Schlüssel</string>
|
||||||
|
</property>
|
||||||
|
<widget class="QLabel">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>textLabel3</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>10</x>
|
||||||
|
<y>90</y>
|
||||||
|
<width>177</width>
|
||||||
|
<height>20</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Schlüsseldatei oder Datenträger:</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QLabel">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>textLabel2</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>10</x>
|
||||||
|
<y>30</y>
|
||||||
|
<width>180</width>
|
||||||
|
<height>20</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Passwort:</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QLabel">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>textLabel1_2</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>30</x>
|
||||||
|
<y>118</y>
|
||||||
|
<width>300</width>
|
||||||
|
<height>18</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Passwort <b>und</b> Schlüsseldatei verwenden</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QComboBox">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>Combo_Dirs</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>201</x>
|
||||||
|
<y>90</y>
|
||||||
|
<width>240</width>
|
||||||
|
<height>21</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QPushButton">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>Button_Browse</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>450</x>
|
||||||
|
<y>90</y>
|
||||||
|
<width>80</width>
|
||||||
|
<height>22</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>W&ählen...</string>
|
||||||
|
</property>
|
||||||
|
<property name="accel">
|
||||||
|
<string>Alt+ä</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QCheckBox">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>CheckBox_Both</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>10</x>
|
||||||
|
<y>120</y>
|
||||||
|
<width>16</width>
|
||||||
|
<height>16</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string></string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QLineEdit">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>Edit_Password</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>200</x>
|
||||||
|
<y>30</y>
|
||||||
|
<width>310</width>
|
||||||
|
<height>20</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QLineEdit">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>Edit_Password_2</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>200</x>
|
||||||
|
<y>60</y>
|
||||||
|
<width>310</width>
|
||||||
|
<height>20</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QPushButton">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>ButtonChangeEchoMode</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>510</x>
|
||||||
|
<y>30</y>
|
||||||
|
<width>20</width>
|
||||||
|
<height>20</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>...</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QLabel">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>textLabel1_3</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>10</x>
|
||||||
|
<y>60</y>
|
||||||
|
<width>180</width>
|
||||||
|
<height>20</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Passwortwiederholung:</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</widget>
|
||||||
|
</widget>
|
||||||
|
<images>
|
||||||
|
<image name="image0">
|
||||||
|
<data format="XPM.GZ" length="4833">789c8597596f23470e80dfe75718c3b7c182e9eabb11ec834fc9873cbeaf601fc86ec9966df994cfc5fef794483633934d10c836fcb9582cde55fee5dbd2d9de68e9db2f5f9ee7349fb64bed153d2d7deb5e66b38fdffef3efff7ef99aa64b8baf2c5b4abffeebcb57dc5c6a9720499290640b8613e110ff22eb941b07657e7256f90be742e4a7c6a9ed076791c7a1732efbd784d3f817615a71167db0e55c0a17ce95c88f8ced3c7e74d6f306cea29fd159f583b3e8a75367d18f5bce8df0b63389be67e3ccfcd97716fd78e22cfaf1d459edefedcbedbc63e75af4cf85b33edeb8616cfef1b5b39eb7e72cf6c28b7166fb53678df7b5b3fadf388b3d503a8b3d40c6b9eaa35767d9cf37c6a5e53f73d6f3769d55bedf5f2789ac6bfcf2de1fda33ce4cdfbb716eeb6fce1acf1de3c2f2bbe7acf573605cdafe2b67f5efd359f20bb97165febe38b3c453fd2bfa7cd0a67165fea97c9db416ff1de3b1e9d77a6d12567bf8c159ed9d1ab7969fc2b8d378e2ba304579c93769bd719457fd524f2184cae221f51bd250a8fd3c35ae4cfec1b8b6fa06e3c6eaffc859d651f215b2d0c7efdab8327b969d459e9e8d7bfd57c68df587c43be4c1e20b685c1b9f0b17c1e283cfce927f96f911ca40d63fcbce7afebd31eb3a91b3fa37376ead9e64dea5759606a94f546eb23499883d9bc69932bef4acf22cf594725c1f8bfca9b3c8d3aa711e82c82bb73de3817111a4fe2171d67e1a1b97ba8e87ce5a8f12bfb48b2cfae8ceb85206894f9666135bff2e5c45d6fae894a3393a3f5be13aaeb7729eca4ff2d6ce3f5b701ef2b1c95f0aa7715dfb4de657519675d0fc8d8c9ba0f527f12faab234fd8fc695f1ab716dfa3f84ebb2089dec5f779678d381711d74beae398b7f540b3751bfd6e39ab1c9033b6bbd07e326687dcb3c2da8ecf47cfa301e9bbe37e389c94b3c0a2edba0f5f361dc194b3c8b36eed77acf9c453fab7f6d95587e6e8d83c957c25dc9668fdc5fc538b2c6e3a6e754e7adcc836252b6a9d69bccffb2ad535d67e98fb2ab538befaab3e8439947e5b84e82f6ffa17165f1bd7096fcc1ccb8b67a981b375a0f20f92d2775b078493dd54c75aaef0de9dfba75167fea2eb2f683dc5771388d753fbe396b7fca7c6b52ea2c5e57ce621fcbfdd26464f1812767ed8f63e3ced665de34c464fe9e1bb3d5b3f45bc3dca67a7fc9fba7697b46a9bf66cc13cb8fcc8b66c2960f3832b6f3988dad1e2828b799c53371d6f9766b9c5b7f4afe286983f5c3aeb3be177ace6c1ecc9cb51f6a678def8a7169f351fca710f5a93d9db3d64febacf9981aa76a2f5e3b6b7d5d1af7f6df3aebfb67e4acf93f72d6f972675cd83c7d77d67cac3bebfdfce9acf7eb87b3c66b665cdabc5feed9f44bfd51caade59395dbc4fc3f33cecc9f9b9e35bf786fdccfffc459e7ffc059eb7fe2acefcfd459df13dbceda5f4367bddffed8affdf0665c243a6f769c351f6367f51f7ad6fcefcf9dd57e72567fd959e3dd3a6bbc3b677daf34ce6affadb3dadbdb57263a5f46ce7adf8e9dd5dededfbe5e2f9cb5de5b678df7bb71a5fa59f767dccf77cd57d6f7136c185b7e79d359f3159cf53df7e8acf19e19f7f57ee5acef9b0d67f5b733b6fa844b63f38f07ceea9fcc3fca5b9bef58199b3dbce5acefa53567bd6fee8c73d54f95b3fa3b34b6fcc3b3b3f6dba1b3f6afe6a788fb6bad9f1f3f08f19b90b18ddff0f3dafefc2fe4bb284948f1b7f1e2e73fca4ff012af708ad77883b77f2f8f33bc8b9aeff1011ff1099f718e2ff88a6ff88e1ff8196da33fc92fe30aaee21aaee3060e70889bb885dbb88323dc8d7a407df941be8dd2dfa3ec5e94dac7033cc4233cc6133cc5333cc78bffb327c18029669863812556d1ef1a9ba8168080a1850ec608daaf30814bb882296ec035dc486426700b33b8837b78c0213cc2133ce367af3f7a93c01c5e700b5ee10d6fe11d093ee01396610556f104d6601d36a2d77abf0da2f41036610bb6b1841d18c12e7c873dd887033884233886133885b318297d3fc558e114cee1021208d1e01432c8a180122aa8e3c5190f2322c63bb507995aea62bc37698c9f34a14bba822d9ad235ddd02dcde80e87744f0f7fc823d1233de1363d634d737aa1577aa3ebf8047ba70ffaa4655aa1555aa375b37f0c298e6923ca0fb0a1212cd3266dd136edd08876e93bedd13e1dd0211d997e88f6031dd3099d624e67744e17f15f8b40296594cb273ef61632aa5ff34515d5d43032707c19449fd6e993db283b8217ee62fc0630fa31bf1cdf037c493bb1724ef98a162d30e56bcae185467cc3b731dfa0f935f919dff13daef1033ff2133fc77d039e73d41da55ff90d268b8afba17ea27d30a18edff9833f7999577895d7a88421aff31b6fc0e04ff5c6314acc031ef2266cc4c7ce036ff12ca66a10ff75d95eacfd2ccf3b0bfd38e651ac93f7d83b77f84e47d1e6f1222e0bf9c5ef3ff7a3f690766f4ffd0490aa85affffbf5cbef985d44a8</data>
|
||||||
|
</image>
|
||||||
|
</images>
|
||||||
|
<connections>
|
||||||
|
<connection>
|
||||||
|
<sender>ButtonOK</sender>
|
||||||
|
<signal>clicked()</signal>
|
||||||
|
<receiver>ChangeKeyDialog</receiver>
|
||||||
|
<slot>OnOK()</slot>
|
||||||
|
</connection>
|
||||||
|
<connection>
|
||||||
|
<sender>ButtonCancel</sender>
|
||||||
|
<signal>clicked()</signal>
|
||||||
|
<receiver>ChangeKeyDialog</receiver>
|
||||||
|
<slot>OnCancel()</slot>
|
||||||
|
</connection>
|
||||||
|
<connection>
|
||||||
|
<sender>Button_Browse</sender>
|
||||||
|
<signal>clicked()</signal>
|
||||||
|
<receiver>ChangeKeyDialog</receiver>
|
||||||
|
<slot>OnBrowse()</slot>
|
||||||
|
</connection>
|
||||||
|
<connection>
|
||||||
|
<sender>Edit_Password</sender>
|
||||||
|
<signal>textChanged(const QString&)</signal>
|
||||||
|
<receiver>ChangeKeyDialog</receiver>
|
||||||
|
<slot>OnPasswordChanged(const QString&)</slot>
|
||||||
|
</connection>
|
||||||
|
<connection>
|
||||||
|
<sender>Edit_Password_2</sender>
|
||||||
|
<signal>textChanged(const QString&)</signal>
|
||||||
|
<receiver>ChangeKeyDialog</receiver>
|
||||||
|
<slot>OnPassword2Changed(const QString&)</slot>
|
||||||
|
</connection>
|
||||||
|
<connection>
|
||||||
|
<sender>Combo_Dirs</sender>
|
||||||
|
<signal>activated(int)</signal>
|
||||||
|
<receiver>ChangeKeyDialog</receiver>
|
||||||
|
<slot>OnComboChanged(int)</slot>
|
||||||
|
</connection>
|
||||||
|
<connection>
|
||||||
|
<sender>CheckBox_Both</sender>
|
||||||
|
<signal>stateChanged(int)</signal>
|
||||||
|
<receiver>ChangeKeyDialog</receiver>
|
||||||
|
<slot>OnCheckBoxChanged(int)</slot>
|
||||||
|
</connection>
|
||||||
|
<connection>
|
||||||
|
<sender>ButtonChangeEchoMode</sender>
|
||||||
|
<signal>clicked()</signal>
|
||||||
|
<receiver>ChangeKeyDialog</receiver>
|
||||||
|
<slot>ChangeEchoMode()</slot>
|
||||||
|
</connection>
|
||||||
|
</connections>
|
||||||
|
<tabstops>
|
||||||
|
<tabstop>Edit_Password</tabstop>
|
||||||
|
<tabstop>Edit_Password_2</tabstop>
|
||||||
|
<tabstop>Combo_Dirs</tabstop>
|
||||||
|
<tabstop>Button_Browse</tabstop>
|
||||||
|
<tabstop>CheckBox_Both</tabstop>
|
||||||
|
<tabstop>ButtonOK</tabstop>
|
||||||
|
<tabstop>ButtonCancel</tabstop>
|
||||||
|
<tabstop>ButtonChangeEchoMode</tabstop>
|
||||||
|
</tabstops>
|
||||||
|
<slots>
|
||||||
|
<slot>OnOK()</slot>
|
||||||
|
<slot>OnCancel()</slot>
|
||||||
|
<slot>OnBrowse()</slot>
|
||||||
|
<slot>OnSelect()</slot>
|
||||||
|
<slot>OnPasswordChanged(const QString& str)</slot>
|
||||||
|
<slot>OnPassword2Changed(const QString& str)</slot>
|
||||||
|
<slot>OnCheckBoxChanged(int i)</slot>
|
||||||
|
<slot>OnComboChanged(int i)</slot>
|
||||||
|
<slot>ChangeEchoMode()</slot>
|
||||||
|
</slots>
|
||||||
|
<layoutdefaults spacing="6" margin="11"/>
|
||||||
|
</UI>
|
|
@ -0,0 +1,220 @@
|
||||||
|
<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
|
||||||
|
<class>dbsettingdlg_base</class>
|
||||||
|
<widget class="QDialog">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>dbsettingdlg_base</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>440</width>
|
||||||
|
<height>213</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy>
|
||||||
|
<hsizetype>0</hsizetype>
|
||||||
|
<vsizetype>0</vsizetype>
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="minimumSize">
|
||||||
|
<size>
|
||||||
|
<width>440</width>
|
||||||
|
<height>213</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="maximumSize">
|
||||||
|
<size>
|
||||||
|
<width>440</width>
|
||||||
|
<height>213</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="caption">
|
||||||
|
<string>Datenbankeinstellungen</string>
|
||||||
|
</property>
|
||||||
|
<widget class="QGroupBox">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>groupBox1</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>10</x>
|
||||||
|
<y>60</y>
|
||||||
|
<width>420</width>
|
||||||
|
<height>110</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="title">
|
||||||
|
<string>Verschlüsselung</string>
|
||||||
|
</property>
|
||||||
|
<widget class="QLabel">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>textLabel2</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>10</x>
|
||||||
|
<y>30</y>
|
||||||
|
<width>90</width>
|
||||||
|
<height>20</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Algorithmus:</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QPushButton">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>pushButton1</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>390</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>20</width>
|
||||||
|
<height>20</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>?</string>
|
||||||
|
</property>
|
||||||
|
<property name="accel">
|
||||||
|
<string></string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QComboBox">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>ComboAlgo</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>109</x>
|
||||||
|
<y>30</y>
|
||||||
|
<width>300</width>
|
||||||
|
<height>21</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QLineEdit">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>EditRounds</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>180</x>
|
||||||
|
<y>70</y>
|
||||||
|
<width>230</width>
|
||||||
|
<height>21</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QLabel">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>textLabel3</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>10</x>
|
||||||
|
<y>70</y>
|
||||||
|
<width>150</width>
|
||||||
|
<height>20</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Verschlüsselungsrunden:</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</widget>
|
||||||
|
<widget class="QLabel">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>Banner</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>440</width>
|
||||||
|
<height>51</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="pixmap">
|
||||||
|
<pixmap>image0</pixmap>
|
||||||
|
</property>
|
||||||
|
<property name="scaledContents">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QPushButton">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>ButtonOK</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>210</x>
|
||||||
|
<y>180</y>
|
||||||
|
<width>102</width>
|
||||||
|
<height>23</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>O&K</string>
|
||||||
|
</property>
|
||||||
|
<property name="accel">
|
||||||
|
<string>Alt+K</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QPushButton">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>ButtonCancel</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>320</x>
|
||||||
|
<y>180</y>
|
||||||
|
<width>102</width>
|
||||||
|
<height>23</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Abbre&chen</string>
|
||||||
|
</property>
|
||||||
|
<property name="accel">
|
||||||
|
<string>Alt+C</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</widget>
|
||||||
|
<images>
|
||||||
|
<image name="image0">
|
||||||
|
<data format="XPM.GZ" length="4833">789c8597596f23470e80dfe75718c3b7c182e9eabb11ec834fc9873cbeaf601fc86ec9966df994cfc5fef794483633934d10c836fcb9582cde55fee5dbd2d9de68e9db2f5f9ee7349fb64bed153d2d7deb5e66b38fdffef3efff7ef99aa64b8baf2c5b4abffeebcb57dc5c6a9720499290640b8613e110ff22eb941b07657e7256f90be742e4a7c6a9ed076791c7a1732efbd784d3f817615a71167db0e55c0a17ce95c88f8ced3c7e74d6f306cea29fd159f583b3e8a75367d18f5bce8df0b63389be67e3ccfcd97716fd78e22cfaf1d459edefedcbedbc63e75af4cf85b33edeb8616cfef1b5b39eb7e72cf6c28b7166fb53678df7b5b3fadf388b3d503a8b3d40c6b9eaa35767d9cf37c6a5e53f73d6f3769d55bedf5f2789ac6bfcf2de1fda33ce4cdfbb716eeb6fce1acf1de3c2f2bbe7acf573605cdafe2b67f5efd359f20bb97165febe38b3c453fd2bfa7cd0a67165fea97c9db416ff1de3b1e9d77a6d12567bf8c159ed9d1ab7969fc2b8d378e2ba304579c93769bd719457fd524f2184cae221f51bd250a8fd3c35ae4cfec1b8b6fa06e3c6eaffc859d651f215b2d0c7efdab8327b969d459e9e8d7bfd57c68df587c43be4c1e20b685c1b9f0b17c1e283cfce927f96f911ca40d63fcbce7afebd31eb3a91b3fa37376ead9e64dea5759606a94f546eb23499883d9bc69932bef4acf22cf594725c1f8bfca9b3c8d3aa711e82c82bb73de3817111a4fe2171d67e1a1b97ba8e87ce5a8f12bfb48b2cfae8ceb85206894f9666135bff2e5c45d6fae894a3393a3f5be13aaeb7729eca4ff2d6ce3f5b701ef2b1c95f0aa7715dfb4de657519675d0fc8d8c9ba0f527f12faab234fd8fc695f1ab716dfa3f84ebb2089dec5f779678d381711d74beae398b7f540b3751bfd6e39ab1c9033b6bbd07e326687dcb3c2da8ecf47cfa301e9bbe37e389c94b3c0a2edba0f5f361dc194b3c8b36eed77acf9c453fab7f6d95587e6e8d83c957c25dc9668fdc5fc538b2c6e3a6e754e7adcc836252b6a9d69bccffb2ad535d67e98fb2ab538befaab3e8439947e5b84e82f6ffa17165f1bd7096fcc1ccb8b67a981b375a0f20f92d2775b078493dd54c75aaef0de9dfba75167fea2eb2f683dc5771388d753fbe396b7fca7c6b52ea2c5e57ce621fcbfdd26464f1812767ed8f63e3ced665de34c464fe9e1bb3d5b3f45bc3dca67a7fc9fba7697b46a9bf66cc13cb8fcc8b66c2960f3832b6f3988dad1e2828b799c53371d6f9766b9c5b7f4afe286983f5c3aeb3be177ace6c1ecc9cb51f6a678def8a7169f351fca710f5a93d9db3d64febacf9981aa76a2f5e3b6b7d5d1af7f6df3aebfb67e4acf93f72d6f972675cd83c7d77d67cac3bebfdfce9acf7eb87b3c66b665cdabc5feed9f44bfd51caade59395dbc4fc3f33cecc9f9b9e35bf786fdccfffc459e7ffc059eb7fe2acefcfd459df13dbceda5f4367bddffed8affdf0665c243a6f769c351f6367f51f7ad6fcefcf9dd57e72567fd959e3dd3a6bbc3b677daf34ce6affadb3dadbdb57263a5f46ce7adf8e9dd5dededfbe5e2f9cb5de5b678df7bb71a5fa59f767dccf77cd57d6f7136c185b7e79d359f3159cf53df7e8acf19e19f7f57ee5acef9b0d67f5b733b6fa844b63f38f07ceea9fcc3fca5b9bef58199b3dbce5acefa53567bd6fee8c73d54f95b3fa3b34b6fcc3b3b3f6dba1b3f6afe6a788fb6bad9f1f3f08f19b90b18ddff0f3dafefc2fe4bb284948f1b7f1e2e73fca4ff012af708ad77883b77f2f8f33bc8b9aeff1011ff1099f718e2ff88a6ff88e1ff8196da33fc92fe30aaee21aaee3060e70889bb885dbb88323dc8d7a407df941be8dd2dfa3ec5e94dac7033cc4233cc6133cc5333cc78bffb327c18029669863812556d1ef1a9ba8168080a1850ec608daaf30814bb882296ec035dc486426700b33b8837b78c0213cc2133ce367af3f7a93c01c5e700b5ee10d6fe11d093ee01396610556f104d6601d36a2d77abf0da2f41036610bb6b1841d18c12e7c873dd887033884233886133885b318297d3fc558e114cee1021208d1e01432c8a180122aa8e3c5190f2322c63bb507995aea62bc37698c9f34a14bba822d9ad235ddd02dcde80e87744f0f7fc823d1233de1363d634d737aa1577aa3ebf8047ba70ffaa4655aa1555aa375b37f0c298e6923ca0fb0a1212cd3266dd136edd08876e93bedd13e1dd0211d997e88f6031dd3099d624e67744e17f15f8b40296594cb273ef61632aa5ff34515d5d43032707c19449fd6e993db283b8217ee62fc0630fa31bf1cdf037c493bb1724ef98a162d30e56bcae185467cc3b731dfa0f935f919dff13daef1033ff2133fc77d039e73d41da55ff90d268b8afba17ea27d30a18edff9833f7999577895d7a88421aff31b6fc0e04ff5c6314acc031ef2266cc4c7ce036ff12ca66a10ff75d95eacfd2ccf3b0bfd38e651ac93f7d83b77f84e47d1e6f1222e0bf9c5ef3ff7a3f690766f4ffd0490aa85affffbf5cbef985d44a8</data>
|
||||||
|
</image>
|
||||||
|
</images>
|
||||||
|
<connections>
|
||||||
|
<connection>
|
||||||
|
<sender>ButtonOK</sender>
|
||||||
|
<signal>clicked()</signal>
|
||||||
|
<receiver>dbsettingdlg_base</receiver>
|
||||||
|
<slot>OnOK()</slot>
|
||||||
|
</connection>
|
||||||
|
<connection>
|
||||||
|
<sender>ButtonCancel</sender>
|
||||||
|
<signal>clicked()</signal>
|
||||||
|
<receiver>dbsettingdlg_base</receiver>
|
||||||
|
<slot>OnCancel()</slot>
|
||||||
|
</connection>
|
||||||
|
</connections>
|
||||||
|
<tabstops>
|
||||||
|
<tabstop>ComboAlgo</tabstop>
|
||||||
|
<tabstop>EditRounds</tabstop>
|
||||||
|
<tabstop>ButtonOK</tabstop>
|
||||||
|
<tabstop>ButtonCancel</tabstop>
|
||||||
|
<tabstop>pushButton1</tabstop>
|
||||||
|
</tabstops>
|
||||||
|
<slots>
|
||||||
|
<slot>OnOK()</slot>
|
||||||
|
<slot>OnCancel()</slot>
|
||||||
|
</slots>
|
||||||
|
<layoutdefaults spacing="6" margin="11"/>
|
||||||
|
</UI>
|
|
@ -0,0 +1,712 @@
|
||||||
|
<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
|
||||||
|
<class>EditEntryDialog</class>
|
||||||
|
<widget class="QDialog">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>EditEntryDialog</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>493</width>
|
||||||
|
<height>526</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy>
|
||||||
|
<hsizetype>1</hsizetype>
|
||||||
|
<vsizetype>1</vsizetype>
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="minimumSize">
|
||||||
|
<size>
|
||||||
|
<width>493</width>
|
||||||
|
<height>526</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="maximumSize">
|
||||||
|
<size>
|
||||||
|
<width>493</width>
|
||||||
|
<height>526</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="caption">
|
||||||
|
<string>Eintrag bearbeiten</string>
|
||||||
|
</property>
|
||||||
|
<property name="modal">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
<widget class="QLineEdit">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>Edit_Title</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>111</x>
|
||||||
|
<y>90</y>
|
||||||
|
<width>370</width>
|
||||||
|
<height>21</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QLineEdit">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>Edit_Expire_Time</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>220</x>
|
||||||
|
<y>410</y>
|
||||||
|
<width>260</width>
|
||||||
|
<height>21</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QLabel">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>Label_Bits</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>400</x>
|
||||||
|
<y>228</y>
|
||||||
|
<width>44</width>
|
||||||
|
<height>14</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>120 Bits</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QPushButton">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>ButtonDeleteAttachment</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>450</x>
|
||||||
|
<y>440</y>
|
||||||
|
<width>31</width>
|
||||||
|
<height>21</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string></string>
|
||||||
|
</property>
|
||||||
|
<property name="pixmap">
|
||||||
|
<pixmap>image0</pixmap>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QPushButton">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>ButtonGenPw</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>450</x>
|
||||||
|
<y>200</y>
|
||||||
|
<width>31</width>
|
||||||
|
<height>21</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Ge&n.</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QLineEdit">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>Edit_Password_w</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>111</x>
|
||||||
|
<y>200</y>
|
||||||
|
<width>330</width>
|
||||||
|
<height>21</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QProgressBar">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>Progress_Quali</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="enabled">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>111</x>
|
||||||
|
<y>226</y>
|
||||||
|
<width>280</width>
|
||||||
|
<height>22</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="progress">
|
||||||
|
<number>50</number>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QLineEdit">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>Edit_UserName</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>111</x>
|
||||||
|
<y>120</y>
|
||||||
|
<width>370</width>
|
||||||
|
<height>21</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QLineEdit">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>Edit_Attachment</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="enabled">
|
||||||
|
<bool>false</bool>
|
||||||
|
</property>
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>110</x>
|
||||||
|
<y>440</y>
|
||||||
|
<width>280</width>
|
||||||
|
<height>21</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QLineEdit">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>Edit_Password</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>111</x>
|
||||||
|
<y>180</y>
|
||||||
|
<width>330</width>
|
||||||
|
<height>21</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QLabel">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>textLabel1</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>400</x>
|
||||||
|
<y>60</y>
|
||||||
|
<width>27</width>
|
||||||
|
<height>21</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Icon:</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QPushButton">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>ButtonEchoMode</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>450</x>
|
||||||
|
<y>180</y>
|
||||||
|
<width>31</width>
|
||||||
|
<height>21</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>...</string>
|
||||||
|
</property>
|
||||||
|
<property name="flat">
|
||||||
|
<bool>false</bool>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QPushButton">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>ButtonSaveAttachment</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>420</x>
|
||||||
|
<y>440</y>
|
||||||
|
<width>31</width>
|
||||||
|
<height>21</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string></string>
|
||||||
|
</property>
|
||||||
|
<property name="pixmap">
|
||||||
|
<pixmap>image1</pixmap>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QPushButton">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>ButtonOpenAttachment</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>390</x>
|
||||||
|
<y>440</y>
|
||||||
|
<width>30</width>
|
||||||
|
<height>21</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string></string>
|
||||||
|
</property>
|
||||||
|
<property name="pixmap">
|
||||||
|
<pixmap>image2</pixmap>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QComboBox">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>Combo_Group</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>110</x>
|
||||||
|
<y>60</y>
|
||||||
|
<width>220</width>
|
||||||
|
<height>21</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QComboBox">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>Combo_IconPicker</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>431</x>
|
||||||
|
<y>60</y>
|
||||||
|
<width>50</width>
|
||||||
|
<height>21</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QLabel">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>textLabel5</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>10</x>
|
||||||
|
<y>120</y>
|
||||||
|
<width>90</width>
|
||||||
|
<height>21</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Benutzername:</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QLabel">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>textLabel8</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>10</x>
|
||||||
|
<y>200</y>
|
||||||
|
<width>97</width>
|
||||||
|
<height>21</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Passwort Wdhlg.:</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QLabel">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>textLabel4</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>10</x>
|
||||||
|
<y>90</y>
|
||||||
|
<width>90</width>
|
||||||
|
<height>20</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Titel:</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QLabel">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>textLabel7</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>10</x>
|
||||||
|
<y>150</y>
|
||||||
|
<width>90</width>
|
||||||
|
<height>21</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>URL:</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QLabel">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>textLabel6</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>10</x>
|
||||||
|
<y>180</y>
|
||||||
|
<width>100</width>
|
||||||
|
<height>21</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Passwort:</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QLabel">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>textLabel9</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>10</x>
|
||||||
|
<y>225</y>
|
||||||
|
<width>90</width>
|
||||||
|
<height>16</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Qualität:</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QLabel">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>textLabel10</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>10</x>
|
||||||
|
<y>250</y>
|
||||||
|
<width>100</width>
|
||||||
|
<height>21</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Kommentar:</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QLineEdit">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>Edit_Expire_Date</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>110</x>
|
||||||
|
<y>410</y>
|
||||||
|
<width>110</width>
|
||||||
|
<height>21</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="maxLength">
|
||||||
|
<number>10</number>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QLabel">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>textLabel11</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>10</x>
|
||||||
|
<y>410</y>
|
||||||
|
<width>100</width>
|
||||||
|
<height>21</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>gültig bis:</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QLabel">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>textLabel12</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>10</x>
|
||||||
|
<y>440</y>
|
||||||
|
<width>90</width>
|
||||||
|
<height>21</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Anhang:</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QLineEdit">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>Edit_URL</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>111</x>
|
||||||
|
<y>150</y>
|
||||||
|
<width>370</width>
|
||||||
|
<height>21</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QLabel">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>textLabel3</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>10</x>
|
||||||
|
<y>60</y>
|
||||||
|
<width>90</width>
|
||||||
|
<height>21</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Gruppe:</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QLabel">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>Banner</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>493</width>
|
||||||
|
<height>50</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy>
|
||||||
|
<hsizetype>7</hsizetype>
|
||||||
|
<vsizetype>5</vsizetype>
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="scaledContents">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="Line">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>line1</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>476</y>
|
||||||
|
<width>490</width>
|
||||||
|
<height>16</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="frameShape">
|
||||||
|
<enum>HLine</enum>
|
||||||
|
</property>
|
||||||
|
<property name="frameShadow">
|
||||||
|
<enum>Sunken</enum>
|
||||||
|
</property>
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Horizontal</enum>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QLabel">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>Label_AttachmentSize</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>110</x>
|
||||||
|
<y>461</y>
|
||||||
|
<width>120</width>
|
||||||
|
<height>16</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>5,30 MB</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QPushButton">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>ButtonCancel</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>380</x>
|
||||||
|
<y>497</y>
|
||||||
|
<width>104</width>
|
||||||
|
<height>23</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Abbre&chen</string>
|
||||||
|
</property>
|
||||||
|
<property name="accel">
|
||||||
|
<string>Alt+C</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QPushButton">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>ButtonOK</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>270</x>
|
||||||
|
<y>497</y>
|
||||||
|
<width>103</width>
|
||||||
|
<height>23</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>O&K</string>
|
||||||
|
</property>
|
||||||
|
<property name="accel">
|
||||||
|
<string>Alt+K</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QTextEdit">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>Edit_Comment</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>111</x>
|
||||||
|
<y>250</y>
|
||||||
|
<width>370</width>
|
||||||
|
<height>151</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</widget>
|
||||||
|
<images>
|
||||||
|
<image name="image0">
|
||||||
|
<data format="PNG" length="219">89504e470d0a1a0a0000000d49484452000000100000001008060000001ff3ff61000000a249444154388da553c10d8440081cece03ad0a74fb7246bf35ab00bf79e57c69530be301c82c62c09c926300303ac90448b754d684b50a5b04a79dcce41f0c5ef20ba02f8b8f819684261950c6c63a71968d0574a894986be61e2829efeed3d2550e0868933108249e66bb412862c2993a0952339b7123cf88ee44f82b6ad37e1b733e285b70cf11d58cdd10df8229ad379d08acfd5c85058c57678bac4a7d6fc1b77b26fedbde105cdd30000000049454e44ae426082</data>
|
||||||
|
</image>
|
||||||
|
<image name="image1">
|
||||||
|
<data format="PNG" length="441">89504e470d0a1a0a0000000d49484452000000100000001008060000001ff3ff610000018049444154388d8d933d4b034110869f88c51e58ec818507165e619172c5346727dad8fa135269fe81a412ff820a622c84945ac6c6fa2c2eb8a5a58d7081087b85982902671192dce5fc7aab6566e7e19d99dd5a9ee714757e715e0ab8cce16b1ff7ee00f0577d5ac7adda34bf5cbcdcbdede6bd871eca5368fd4ab46d0856c1345e01b009f41e2d403e859400006b414ae7c800a6108dc0804d62dcd0e13237cb2c2d02aa8aca2c80f1fc5872202288d4c1447f73ffef602eed6fe1ad78a55865064abd80551317169e89b109c47d4b96851568053048039a9796413a98ad4e440008d6e5f716642c8c3e46d804d2b77456a8b59eb8f3d4df0ebc156f5658172112c1c8135bc021d516be1d625384589ee86001b0953dfe00983e90de6648b3714df7ea93ddfb3bccd11cb0d846750b9ee2604fd36c00ec40667197d0c1e0866eb2c6e55f0000f42dcfdc60fb8638310cd60394a708b526dc08699fb4bfff4c003212ba43cd7d7a80f635c17e40a875a9a8a8dae2773e3b3dcba7d89f8a8afa0278938fbf2fda853f0000000049454e44ae426082</data>
|
||||||
|
</image>
|
||||||
|
<image name="image2">
|
||||||
|
<data format="PNG" length="290">89504e470d0a1a0a0000000d49484452000000100000001008060000001ff3ff61000000e949444154388da593416ec32010451f56b3e87140cd26d741e2465115247a9c6c9232c7e9a28be902db01ecda51fb25160cff7ffe8cc0a82affc14bbdc9d1356e2e64b3eba0aaa82a9f17ab3dc61a5bcba82a393a752103a9b3f7e4e8562f9ed2552df4e2522bc62d7274a4e0d4c76cda19c8196e3dfdbc9ac0be410a461f0642111f2dce8e69bebfe0f0ba544b02eb91bba95bb896deece9d1ce61f5f2990bd50c32f21b7b810c20c56498ab37e0f8845ac021c8fb073e6a3b44871d49d735699b60c4d09cd8d3ae784e3bc24c7fa17fc65b903bf8581e92a93f530acf994ce285c15f30ec53b6f103005182147f92e4240000000049454e44ae426082</data>
|
||||||
|
</image>
|
||||||
|
</images>
|
||||||
|
<connections>
|
||||||
|
<connection>
|
||||||
|
<sender>ButtonEchoMode</sender>
|
||||||
|
<signal>clicked()</signal>
|
||||||
|
<receiver>EditEntryDialog</receiver>
|
||||||
|
<slot>ChangeEchoMode()</slot>
|
||||||
|
</connection>
|
||||||
|
<connection>
|
||||||
|
<sender>Edit_Password</sender>
|
||||||
|
<signal>textChanged(const QString&)</signal>
|
||||||
|
<receiver>EditEntryDialog</receiver>
|
||||||
|
<slot>OnPasswordTextChanged(const QString&)</slot>
|
||||||
|
</connection>
|
||||||
|
<connection>
|
||||||
|
<sender>Edit_Password_w</sender>
|
||||||
|
<signal>textChanged(const QString&)</signal>
|
||||||
|
<receiver>EditEntryDialog</receiver>
|
||||||
|
<slot>OnPasswordwTextChanged(const QString&)</slot>
|
||||||
|
</connection>
|
||||||
|
<connection>
|
||||||
|
<sender>Edit_Password_w</sender>
|
||||||
|
<signal>lostFocus()</signal>
|
||||||
|
<receiver>EditEntryDialog</receiver>
|
||||||
|
<slot>OnPasswordwLostFocus()</slot>
|
||||||
|
</connection>
|
||||||
|
<connection>
|
||||||
|
<sender>Edit_Expire_Date</sender>
|
||||||
|
<signal>lostFocus()</signal>
|
||||||
|
<receiver>EditEntryDialog</receiver>
|
||||||
|
<slot>OnExpDateLostFocus()</slot>
|
||||||
|
</connection>
|
||||||
|
<connection>
|
||||||
|
<sender>Edit_Expire_Time</sender>
|
||||||
|
<signal>lostFocus()</signal>
|
||||||
|
<receiver>EditEntryDialog</receiver>
|
||||||
|
<slot>OnExpTimeLostFocus()</slot>
|
||||||
|
</connection>
|
||||||
|
<connection>
|
||||||
|
<sender>ButtonOpenAttachment</sender>
|
||||||
|
<signal>clicked()</signal>
|
||||||
|
<receiver>EditEntryDialog</receiver>
|
||||||
|
<slot>OnNewAttachment()</slot>
|
||||||
|
</connection>
|
||||||
|
<connection>
|
||||||
|
<sender>ButtonSaveAttachment</sender>
|
||||||
|
<signal>clicked()</signal>
|
||||||
|
<receiver>EditEntryDialog</receiver>
|
||||||
|
<slot>OnSaveAttachment()</slot>
|
||||||
|
</connection>
|
||||||
|
<connection>
|
||||||
|
<sender>ButtonDeleteAttachment</sender>
|
||||||
|
<signal>clicked()</signal>
|
||||||
|
<receiver>EditEntryDialog</receiver>
|
||||||
|
<slot>OnDeleteAttachment()</slot>
|
||||||
|
</connection>
|
||||||
|
<connection>
|
||||||
|
<sender>ButtonGenPw</sender>
|
||||||
|
<signal>clicked()</signal>
|
||||||
|
<receiver>EditEntryDialog</receiver>
|
||||||
|
<slot>OnButtonGenPw()</slot>
|
||||||
|
</connection>
|
||||||
|
<connection>
|
||||||
|
<sender>ButtonOK</sender>
|
||||||
|
<signal>clicked()</signal>
|
||||||
|
<receiver>EditEntryDialog</receiver>
|
||||||
|
<slot>OnButtonOK()</slot>
|
||||||
|
</connection>
|
||||||
|
<connection>
|
||||||
|
<sender>ButtonCancel</sender>
|
||||||
|
<signal>clicked()</signal>
|
||||||
|
<receiver>EditEntryDialog</receiver>
|
||||||
|
<slot>OnButtonCancel()</slot>
|
||||||
|
</connection>
|
||||||
|
</connections>
|
||||||
|
<tabstops>
|
||||||
|
<tabstop>Combo_Group</tabstop>
|
||||||
|
<tabstop>Combo_IconPicker</tabstop>
|
||||||
|
<tabstop>Edit_Title</tabstop>
|
||||||
|
<tabstop>Edit_UserName</tabstop>
|
||||||
|
<tabstop>Edit_URL</tabstop>
|
||||||
|
<tabstop>Edit_Password</tabstop>
|
||||||
|
<tabstop>Edit_Password_w</tabstop>
|
||||||
|
<tabstop>Edit_Comment</tabstop>
|
||||||
|
<tabstop>Edit_Expire_Date</tabstop>
|
||||||
|
<tabstop>Edit_Expire_Time</tabstop>
|
||||||
|
<tabstop>Edit_Attachment</tabstop>
|
||||||
|
<tabstop>ButtonOpenAttachment</tabstop>
|
||||||
|
<tabstop>ButtonSaveAttachment</tabstop>
|
||||||
|
<tabstop>ButtonDeleteAttachment</tabstop>
|
||||||
|
<tabstop>ButtonEchoMode</tabstop>
|
||||||
|
<tabstop>ButtonGenPw</tabstop>
|
||||||
|
</tabstops>
|
||||||
|
<slots>
|
||||||
|
<slot>OnButtonOK()</slot>
|
||||||
|
<slot>OnButtonCancel()</slot>
|
||||||
|
<slot>ChangeEchoMode()</slot>
|
||||||
|
<slot>OnPasswordTextChanged(const QString&)</slot>
|
||||||
|
<slot>OnPasswordwTextChanged(const QString&)</slot>
|
||||||
|
<slot>OnPasswordwLostFocus()</slot>
|
||||||
|
<slot>OnExpDateLostFocus()</slot>
|
||||||
|
<slot>OnExpTimeLostFocus()</slot>
|
||||||
|
<slot>OnNewAttachment()</slot>
|
||||||
|
<slot>OnSaveAttachment()</slot>
|
||||||
|
<slot>OnDeleteAttachment()</slot>
|
||||||
|
<slot>OnButtonGenPw()</slot>
|
||||||
|
</slots>
|
||||||
|
<layoutdefaults spacing="6" margin="11"/>
|
||||||
|
</UI>
|
|
@ -0,0 +1,174 @@
|
||||||
|
<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
|
||||||
|
<class>EditGroupDialog</class>
|
||||||
|
<widget class="QDialog">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>EditGroupDialog</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>302</width>
|
||||||
|
<height>105</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="minimumSize">
|
||||||
|
<size>
|
||||||
|
<width>200</width>
|
||||||
|
<height>105</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="maximumSize">
|
||||||
|
<size>
|
||||||
|
<width>302</width>
|
||||||
|
<height>100</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="caption">
|
||||||
|
<string>Gruppeneigenschaften</string>
|
||||||
|
</property>
|
||||||
|
<widget class="Line">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>line1</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>10</x>
|
||||||
|
<y>62</y>
|
||||||
|
<width>290</width>
|
||||||
|
<height>16</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="frameShape">
|
||||||
|
<enum>HLine</enum>
|
||||||
|
</property>
|
||||||
|
<property name="frameShadow">
|
||||||
|
<enum>Sunken</enum>
|
||||||
|
</property>
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Horizontal</enum>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QLineEdit">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>EditTitle</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>70</x>
|
||||||
|
<y>10</y>
|
||||||
|
<width>230</width>
|
||||||
|
<height>21</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QLabel">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>Label1</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>10</x>
|
||||||
|
<y>10</y>
|
||||||
|
<width>27</width>
|
||||||
|
<height>20</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Titel:</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QLabel">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>Label2</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>10</x>
|
||||||
|
<y>40</y>
|
||||||
|
<width>43</width>
|
||||||
|
<height>20</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Symbol:</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QComboBox">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>ComboIconPicker</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>70</x>
|
||||||
|
<y>40</y>
|
||||||
|
<width>50</width>
|
||||||
|
<height>21</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QPushButton">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>ButtonCancel</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>226</x>
|
||||||
|
<y>80</y>
|
||||||
|
<width>70</width>
|
||||||
|
<height>20</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Abbre&chen</string>
|
||||||
|
</property>
|
||||||
|
<property name="accel">
|
||||||
|
<string>Alt+C</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QPushButton">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>ButtonOK</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>147</x>
|
||||||
|
<y>80</y>
|
||||||
|
<width>70</width>
|
||||||
|
<height>20</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>O&K</string>
|
||||||
|
</property>
|
||||||
|
<property name="accel">
|
||||||
|
<string>Alt+K</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</widget>
|
||||||
|
<connections>
|
||||||
|
<connection>
|
||||||
|
<sender>ButtonOK</sender>
|
||||||
|
<signal>clicked()</signal>
|
||||||
|
<receiver>EditGroupDialog</receiver>
|
||||||
|
<slot>OnOK()</slot>
|
||||||
|
</connection>
|
||||||
|
<connection>
|
||||||
|
<sender>ButtonCancel</sender>
|
||||||
|
<signal>clicked()</signal>
|
||||||
|
<receiver>EditGroupDialog</receiver>
|
||||||
|
<slot>OnCancel()</slot>
|
||||||
|
</connection>
|
||||||
|
</connections>
|
||||||
|
<tabstops>
|
||||||
|
<tabstop>EditTitle</tabstop>
|
||||||
|
<tabstop>ComboIconPicker</tabstop>
|
||||||
|
<tabstop>ButtonOK</tabstop>
|
||||||
|
<tabstop>ButtonCancel</tabstop>
|
||||||
|
</tabstops>
|
||||||
|
<slots>
|
||||||
|
<slot>OnOK()</slot>
|
||||||
|
<slot>OnCancel()</slot>
|
||||||
|
</slots>
|
||||||
|
<layoutdefaults spacing="6" margin="11"/>
|
||||||
|
</UI>
|
|
@ -0,0 +1,215 @@
|
||||||
|
<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
|
||||||
|
<class>LanguageDlg</class>
|
||||||
|
<widget class="QDialog">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>LanguageDlg</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>500</width>
|
||||||
|
<height>252</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy>
|
||||||
|
<hsizetype>0</hsizetype>
|
||||||
|
<vsizetype>0</vsizetype>
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="minimumSize">
|
||||||
|
<size>
|
||||||
|
<width>500</width>
|
||||||
|
<height>252</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="maximumSize">
|
||||||
|
<size>
|
||||||
|
<width>500</width>
|
||||||
|
<height>252</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="caption">
|
||||||
|
<string>Keepass</string>
|
||||||
|
</property>
|
||||||
|
<property name="sizeGripEnabled">
|
||||||
|
<bool>false</bool>
|
||||||
|
</property>
|
||||||
|
<widget class="QLabel">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>Banner</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>500</width>
|
||||||
|
<height>50</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="pixmap">
|
||||||
|
<pixmap>image0</pixmap>
|
||||||
|
</property>
|
||||||
|
<property name="scaledContents">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QPushButton">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>ButtonClose</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>407</x>
|
||||||
|
<y>220</y>
|
||||||
|
<width>80</width>
|
||||||
|
<height>23</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Schlie&ßen</string>
|
||||||
|
</property>
|
||||||
|
<property name="accel">
|
||||||
|
<string>Alt+ß</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QListView">
|
||||||
|
<column>
|
||||||
|
<property name="text">
|
||||||
|
<string>*</string>
|
||||||
|
</property>
|
||||||
|
<property name="clickable">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
<property name="resizable">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
</column>
|
||||||
|
<column>
|
||||||
|
<property name="text">
|
||||||
|
<string>Sprache</string>
|
||||||
|
</property>
|
||||||
|
<property name="clickable">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
<property name="resizable">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
</column>
|
||||||
|
<column>
|
||||||
|
<property name="text">
|
||||||
|
<string>Version</string>
|
||||||
|
</property>
|
||||||
|
<property name="clickable">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
<property name="resizable">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
</column>
|
||||||
|
<column>
|
||||||
|
<property name="text">
|
||||||
|
<string>Autor</string>
|
||||||
|
</property>
|
||||||
|
<property name="clickable">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
<property name="resizable">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
</column>
|
||||||
|
<property name="name">
|
||||||
|
<cstring>List</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>10</x>
|
||||||
|
<y>60</y>
|
||||||
|
<width>480</width>
|
||||||
|
<height>150</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="allColumnsShowFocus">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
<property name="showSortIndicator">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
<property name="resizeMode">
|
||||||
|
<enum>NoColumn</enum>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QPushButton">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>ButtonApply</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>20</x>
|
||||||
|
<y>220</y>
|
||||||
|
<width>80</width>
|
||||||
|
<height>23</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Fes&tlegen</string>
|
||||||
|
</property>
|
||||||
|
<property name="accel">
|
||||||
|
<string>Alt+T</string>
|
||||||
|
</property>
|
||||||
|
<property name="toolTip" stdset="0">
|
||||||
|
<string></string>
|
||||||
|
</property>
|
||||||
|
<property name="whatsThis" stdset="0">
|
||||||
|
<string>Legt die aktuell markierte Sprache
|
||||||
|
als Übersetzung für Keepass fest.</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</widget>
|
||||||
|
<images>
|
||||||
|
<image name="image0">
|
||||||
|
<data format="XPM.GZ" length="4833">789c8597596f23470e80dfe75718c3b7c182e9eabb11ec834fc9873cbeaf601fc86ec9966df994cfc5fef794483633934d10c836fcb9582cde55fee5dbd2d9de68e9db2f5f9ee7349fb64bed153d2d7deb5e66b38fdffef3efff7ef99aa64b8baf2c5b4abffeebcb57dc5c6a9720499290640b8613e110ff22eb941b07657e7256f90be742e4a7c6a9ed076791c7a1732efbd784d3f817615a71167db0e55c0a17ce95c88f8ced3c7e74d6f306cea29fd159f583b3e8a75367d18f5bce8df0b63389be67e3ccfcd97716fd78e22cfaf1d459edefedcbedbc63e75af4cf85b33edeb8616cfef1b5b39eb7e72cf6c28b7166fb53678df7b5b3fadf388b3d503a8b3d40c6b9eaa35767d9cf37c6a5e53f73d6f3769d55bedf5f2789ac6bfcf2de1fda33ce4cdfbb716eeb6fce1acf1de3c2f2bbe7acf573605cdafe2b67f5efd359f20bb97165febe38b3c453fd2bfa7cd0a67165fea97c9db416ff1de3b1e9d77a6d12567bf8c159ed9d1ab7969fc2b8d378e2ba304579c93769bd719457fd524f2184cae221f51bd250a8fd3c35ae4cfec1b8b6fa06e3c6eaffc859d651f215b2d0c7efdab8327b969d459e9e8d7bfd57c68df587c43be4c1e20b685c1b9f0b17c1e283cfce927f96f911ca40d63fcbce7afebd31eb3a91b3fa37376ead9e64dea5759606a94f546eb23499883d9bc69932bef4acf22cf594725c1f8bfca9b3c8d3aa711e82c82bb73de3817111a4fe2171d67e1a1b97ba8e87ce5a8f12bfb48b2cfae8ceb85206894f9666135bff2e5c45d6fae894a3393a3f5be13aaeb7729eca4ff2d6ce3f5b701ef2b1c95f0aa7715dfb4de657519675d0fc8d8c9ba0f527f12faab234fd8fc695f1ab716dfa3f84ebb2089dec5f779678d381711d74beae398b7f540b3751bfd6e39ab1c9033b6bbd07e326687dcb3c2da8ecf47cfa301e9bbe37e389c94b3c0a2edba0f5f361dc194b3c8b36eed77acf9c453fab7f6d95587e6e8d83c957c25dc9668fdc5fc538b2c6e3a6e754e7adcc836252b6a9d69bccffb2ad535d67e98fb2ab538befaab3e8439947e5b84e82f6ffa17165f1bd7096fcc1ccb8b67a981b375a0f20f92d2775b078493dd54c75aaef0de9dfba75167fea2eb2f683dc5771388d753fbe396b7fca7c6b52ea2c5e57ce621fcbfdd26464f1812767ed8f63e3ced665de34c464fe9e1bb3d5b3f45bc3dca67a7fc9fba7697b46a9bf66cc13cb8fcc8b66c2960f3832b6f3988dad1e2828b799c53371d6f9766b9c5b7f4afe286983f5c3aeb3be177ace6c1ecc9cb51f6a678def8a7169f351fca710f5a93d9db3d64febacf9981aa76a2f5e3b6b7d5d1af7f6df3aebfb67e4acf93f72d6f972675cd83c7d77d67cac3bebfdfce9acf7eb87b3c66b665cdabc5feed9f44bfd51caade59395dbc4fc3f33cecc9f9b9e35bf786fdccfffc459e7ffc059eb7fe2acefcfd459df13dbceda5f4367bddffed8affdf0665c243a6f769c351f6367f51f7ad6fcefcf9dd57e72567fd959e3dd3a6bbc3b677daf34ce6affadb3dadbdb57263a5f46ce7adf8e9dd5dededfbe5e2f9cb5de5b678df7bb71a5fa59f767dccf77cd57d6f7136c185b7e79d359f3159cf53df7e8acf19e19f7f57ee5acef9b0d67f5b733b6fa844b63f38f07ceea9fcc3fca5b9bef58199b3dbce5acefa53567bd6fee8c73d54f95b3fa3b34b6fcc3b3b3f6dba1b3f6afe6a788fb6bad9f1f3f08f19b90b18ddff0f3dafefc2fe4bb284948f1b7f1e2e73fca4ff012af708ad77883b77f2f8f33bc8b9aeff1011ff1099f718e2ff88a6ff88e1ff8196da33fc92fe30aaee21aaee3060e70889bb885dbb88323dc8d7a407df941be8dd2dfa3ec5e94dac7033cc4233cc6133cc5333cc78bffb327c18029669863812556d1ef1a9ba8168080a1850ec608daaf30814bb882296ec035dc486426700b33b8837b78c0213cc2133ce367af3f7a93c01c5e700b5ee10d6fe11d093ee01396610556f104d6601d36a2d77abf0da2f41036610bb6b1841d18c12e7c873dd887033884233886133885b318297d3fc558e114cee1021208d1e01432c8a180122aa8e3c5190f2322c63bb507995aea62bc37698c9f34a14bba822d9ad235ddd02dcde80e87744f0f7fc823d1233de1363d634d737aa1577aa3ebf8047ba70ffaa4655aa1555aa375b37f0c298e6923ca0fb0a1212cd3266dd136edd08876e93bedd13e1dd0211d997e88f6031dd3099d624e67744e17f15f8b40296594cb273ef61632aa5ff34515d5d43032707c19449fd6e993db283b8217ee62fc0630fa31bf1cdf037c493bb1724ef98a162d30e56bcae185467cc3b731dfa0f935f919dff13daef1033ff2133fc77d039e73d41da55ff90d268b8afba17ea27d30a18edff9833f7999577895d7a88421aff31b6fc0e04ff5c6314acc031ef2266cc4c7ce036ff12ca66a10ff75d95eacfd2ccf3b0bfd38e651ac93f7d83b77f84e47d1e6f1222e0bf9c5ef3ff7a3f690766f4ffd0490aa85affffbf5cbef985d44a8</data>
|
||||||
|
</image>
|
||||||
|
</images>
|
||||||
|
<connections>
|
||||||
|
<connection>
|
||||||
|
<sender>List</sender>
|
||||||
|
<signal>doubleClicked(QListViewItem*)</signal>
|
||||||
|
<receiver>LanguageDlg</receiver>
|
||||||
|
<slot>OnItemDoubleClicked(QListViewItem*)</slot>
|
||||||
|
</connection>
|
||||||
|
<connection>
|
||||||
|
<sender>List</sender>
|
||||||
|
<signal>rightButtonClicked(QListViewItem*,const QPoint&,int)</signal>
|
||||||
|
<receiver>LanguageDlg</receiver>
|
||||||
|
<slot>OnItemRightClick(QListViewItem*,const QPoint&)</slot>
|
||||||
|
</connection>
|
||||||
|
<connection>
|
||||||
|
<sender>ButtonApply</sender>
|
||||||
|
<signal>clicked()</signal>
|
||||||
|
<receiver>LanguageDlg</receiver>
|
||||||
|
<slot>OnApplyButtonClicked()</slot>
|
||||||
|
</connection>
|
||||||
|
<connection>
|
||||||
|
<sender>ButtonClose</sender>
|
||||||
|
<signal>clicked()</signal>
|
||||||
|
<receiver>LanguageDlg</receiver>
|
||||||
|
<slot>OnButtonCloseClicked()</slot>
|
||||||
|
</connection>
|
||||||
|
</connections>
|
||||||
|
<tabstops>
|
||||||
|
<tabstop>List</tabstop>
|
||||||
|
<tabstop>ButtonApply</tabstop>
|
||||||
|
<tabstop>ButtonClose</tabstop>
|
||||||
|
</tabstops>
|
||||||
|
<slots>
|
||||||
|
<slot>OnItemRightClick(QListViewItem* item, const QPoint& p)</slot>
|
||||||
|
<slot>OnItemDoubleClicked(QListViewItem* item)</slot>
|
||||||
|
<slot>OnApplyButtonClicked()</slot>
|
||||||
|
<slot>OnButtonCloseClicked()</slot>
|
||||||
|
</slots>
|
||||||
|
<layoutdefaults spacing="6" margin="11"/>
|
||||||
|
</UI>
|
|
@ -0,0 +1,328 @@
|
||||||
|
<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
|
||||||
|
<class>PasswordDlg</class>
|
||||||
|
<widget class="QDialog">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>PasswordDlg</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>562</width>
|
||||||
|
<height>250</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy>
|
||||||
|
<hsizetype>1</hsizetype>
|
||||||
|
<vsizetype>1</vsizetype>
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="minimumSize">
|
||||||
|
<size>
|
||||||
|
<width>562</width>
|
||||||
|
<height>250</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="maximumSize">
|
||||||
|
<size>
|
||||||
|
<width>562</width>
|
||||||
|
<height>250</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="caption">
|
||||||
|
<string>Datenbank öffnen</string>
|
||||||
|
</property>
|
||||||
|
<property name="sizeGripEnabled">
|
||||||
|
<bool>false</bool>
|
||||||
|
</property>
|
||||||
|
<widget class="QLabel">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>textLabel1</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>10</x>
|
||||||
|
<y>56</y>
|
||||||
|
<width>450</width>
|
||||||
|
<height>16</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Geben Sie das Passwort ein oder wählen Sie eine Schlüsseldatei.</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QLabel">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>Banner</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>562</width>
|
||||||
|
<height>51</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="pixmap">
|
||||||
|
<pixmap>image0</pixmap>
|
||||||
|
</property>
|
||||||
|
<property name="scaledContents">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QPushButton">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>ButtonCancel</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>460</x>
|
||||||
|
<y>220</y>
|
||||||
|
<width>90</width>
|
||||||
|
<height>20</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Abbre&chen</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QPushButton">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>ButtonOK</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>360</x>
|
||||||
|
<y>220</y>
|
||||||
|
<width>90</width>
|
||||||
|
<height>20</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>O&K</string>
|
||||||
|
</property>
|
||||||
|
<property name="accel">
|
||||||
|
<string>Alt+K</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QGroupBox">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>groupframe</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>10</x>
|
||||||
|
<y>80</y>
|
||||||
|
<width>540</width>
|
||||||
|
<height>130</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="title">
|
||||||
|
<string>Schlüssel</string>
|
||||||
|
</property>
|
||||||
|
<widget class="QPushButton">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>ButtonChangeEchoMode</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>510</x>
|
||||||
|
<y>30</y>
|
||||||
|
<width>20</width>
|
||||||
|
<height>20</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>...</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QPushButton">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>Button_Browse</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>450</x>
|
||||||
|
<y>70</y>
|
||||||
|
<width>80</width>
|
||||||
|
<height>22</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>W&ählen...</string>
|
||||||
|
</property>
|
||||||
|
<property name="accel">
|
||||||
|
<string>Alt+ä</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QComboBox">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>Combo_Dirs</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>201</x>
|
||||||
|
<y>70</y>
|
||||||
|
<width>240</width>
|
||||||
|
<height>21</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QLabel">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>textLabel2</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>10</x>
|
||||||
|
<y>30</y>
|
||||||
|
<width>180</width>
|
||||||
|
<height>20</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Passwort:</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QLabel">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>textLabel3</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>10</x>
|
||||||
|
<y>70</y>
|
||||||
|
<width>180</width>
|
||||||
|
<height>20</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Schlüsseldatei oder Datenträger:</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QCheckBox">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>CheckBox_Both</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>10</x>
|
||||||
|
<y>100</y>
|
||||||
|
<width>16</width>
|
||||||
|
<height>16</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string></string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QLineEdit">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>Edit_Password</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>200</x>
|
||||||
|
<y>30</y>
|
||||||
|
<width>310</width>
|
||||||
|
<height>20</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QLabel">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>textLabel1_2</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>30</x>
|
||||||
|
<y>98</y>
|
||||||
|
<width>300</width>
|
||||||
|
<height>18</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Passwort <b>und</b> Schlüsseldatei verwenden</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</widget>
|
||||||
|
</widget>
|
||||||
|
<images>
|
||||||
|
<image name="image0">
|
||||||
|
<data format="XPM.GZ" length="4833">789c8597596f23470e80dfe75718c3b7c182e9eabb11ec834fc9873cbeaf601fc86ec9966df994cfc5fef794483633934d10c836fcb9582cde55fee5dbd2d9de68e9db2f5f9ee7349fb64bed153d2d7deb5e66b38fdffef3efff7ef99aa64b8baf2c5b4abffeebcb57dc5c6a9720499290640b8613e110ff22eb941b07657e7256f90be742e4a7c6a9ed076791c7a1732efbd784d3f817615a71167db0e55c0a17ce95c88f8ced3c7e74d6f306cea29fd159f583b3e8a75367d18f5bce8df0b63389be67e3ccfcd97716fd78e22cfaf1d459edefedcbedbc63e75af4cf85b33edeb8616cfef1b5b39eb7e72cf6c28b7166fb53678df7b5b3fadf388b3d503a8b3d40c6b9eaa35767d9cf37c6a5e53f73d6f3769d55bedf5f2789ac6bfcf2de1fda33ce4cdfbb716eeb6fce1acf1de3c2f2bbe7acf573605cdafe2b67f5efd359f20bb97165febe38b3c453fd2bfa7cd0a67165fea97c9db416ff1de3b1e9d77a6d12567bf8c159ed9d1ab7969fc2b8d378e2ba304579c93769bd719457fd524f2184cae221f51bd250a8fd3c35ae4cfec1b8b6fa06e3c6eaffc859d651f215b2d0c7efdab8327b969d459e9e8d7bfd57c68df587c43be4c1e20b685c1b9f0b17c1e283cfce927f96f911ca40d63fcbce7afebd31eb3a91b3fa37376ead9e64dea5759606a94f546eb23499883d9bc69932bef4acf22cf594725c1f8bfca9b3c8d3aa711e82c82bb73de3817111a4fe2171d67e1a1b97ba8e87ce5a8f12bfb48b2cfae8ceb85206894f9666135bff2e5c45d6fae894a3393a3f5be13aaeb7729eca4ff2d6ce3f5b701ef2b1c95f0aa7715dfb4de657519675d0fc8d8c9ba0f527f12faab234fd8fc695f1ab716dfa3f84ebb2089dec5f779678d381711d74beae398b7f540b3751bfd6e39ab1c9033b6bbd07e326687dcb3c2da8ecf47cfa301e9bbe37e389c94b3c0a2edba0f5f361dc194b3c8b36eed77acf9c453fab7f6d95587e6e8d83c957c25dc9668fdc5fc538b2c6e3a6e754e7adcc836252b6a9d69bccffb2ad535d67e98fb2ab538befaab3e8439947e5b84e82f6ffa17165f1bd7096fcc1ccb8b67a981b375a0f20f92d2775b078493dd54c75aaef0de9dfba75167fea2eb2f683dc5771388d753fbe396b7fca7c6b52ea2c5e57ce621fcbfdd26464f1812767ed8f63e3ced665de34c464fe9e1bb3d5b3f45bc3dca67a7fc9fba7697b46a9bf66cc13cb8fcc8b66c2960f3832b6f3988dad1e2828b799c53371d6f9766b9c5b7f4afe286983f5c3aeb3be177ace6c1ecc9cb51f6a678def8a7169f351fca710f5a93d9db3d64febacf9981aa76a2f5e3b6b7d5d1af7f6df3aebfb67e4acf93f72d6f972675cd83c7d77d67cac3bebfdfce9acf7eb87b3c66b665cdabc5feed9f44bfd51caade59395dbc4fc3f33cecc9f9b9e35bf786fdccfffc459e7ffc059eb7fe2acefcfd459df13dbceda5f4367bddffed8affdf0665c243a6f769c351f6367f51f7ad6fcefcf9dd57e72567fd959e3dd3a6bbc3b677daf34ce6affadb3dadbdb57263a5f46ce7adf8e9dd5dededfbe5e2f9cb5de5b678df7bb71a5fa59f767dccf77cd57d6f7136c185b7e79d359f3159cf53df7e8acf19e19f7f57ee5acef9b0d67f5b733b6fa844b63f38f07ceea9fcc3fca5b9bef58199b3dbce5acefa53567bd6fee8c73d54f95b3fa3b34b6fcc3b3b3f6dba1b3f6afe6a788fb6bad9f1f3f08f19b90b18ddff0f3dafefc2fe4bb284948f1b7f1e2e73fca4ff012af708ad77883b77f2f8f33bc8b9aeff1011ff1099f718e2ff88a6ff88e1ff8196da33fc92fe30aaee21aaee3060e70889bb885dbb88323dc8d7a407df941be8dd2dfa3ec5e94dac7033cc4233cc6133cc5333cc78bffb327c18029669863812556d1ef1a9ba8168080a1850ec608daaf30814bb882296ec035dc486426700b33b8837b78c0213cc2133ce367af3f7a93c01c5e700b5ee10d6fe11d093ee01396610556f104d6601d36a2d77abf0da2f41036610bb6b1841d18c12e7c873dd887033884233886133885b318297d3fc558e114cee1021208d1e01432c8a180122aa8e3c5190f2322c63bb507995aea62bc37698c9f34a14bba822d9ad235ddd02dcde80e87744f0f7fc823d1233de1363d634d737aa1577aa3ebf8047ba70ffaa4655aa1555aa375b37f0c298e6923ca0fb0a1212cd3266dd136edd08876e93bedd13e1dd0211d997e88f6031dd3099d624e67744e17f15f8b40296594cb273ef61632aa5ff34515d5d43032707c19449fd6e993db283b8217ee62fc0630fa31bf1cdf037c493bb1724ef98a162d30e56bcae185467cc3b731dfa0f935f919dff13daef1033ff2133fc77d039e73d41da55ff90d268b8afba17ea27d30a18edff9833f7999577895d7a88421aff31b6fc0e04ff5c6314acc031ef2266cc4c7ce036ff12ca66a10ff75d95eacfd2ccf3b0bfd38e651ac93f7d83b77f84e47d1e6f1222e0bf9c5ef3ff7a3f690766f4ffd0490aa85affffbf5cbef985d44a8</data>
|
||||||
|
</image>
|
||||||
|
</images>
|
||||||
|
<connections>
|
||||||
|
<connection>
|
||||||
|
<sender>Combo_Dirs</sender>
|
||||||
|
<signal>activated(int)</signal>
|
||||||
|
<receiver>PasswordDlg</receiver>
|
||||||
|
<slot>OnComboSelectionChanged(int)</slot>
|
||||||
|
</connection>
|
||||||
|
<connection>
|
||||||
|
<sender>Button_Browse</sender>
|
||||||
|
<signal>clicked()</signal>
|
||||||
|
<receiver>PasswordDlg</receiver>
|
||||||
|
<slot>OnButtonBrowse()</slot>
|
||||||
|
</connection>
|
||||||
|
<connection>
|
||||||
|
<sender>ButtonCancel</sender>
|
||||||
|
<signal>clicked()</signal>
|
||||||
|
<receiver>PasswordDlg</receiver>
|
||||||
|
<slot>OnCancel()</slot>
|
||||||
|
</connection>
|
||||||
|
<connection>
|
||||||
|
<sender>Edit_Password</sender>
|
||||||
|
<signal>textChanged(const QString&)</signal>
|
||||||
|
<receiver>PasswordDlg</receiver>
|
||||||
|
<slot>OnPasswordChanged(const QString&)</slot>
|
||||||
|
</connection>
|
||||||
|
<connection>
|
||||||
|
<sender>ButtonOK</sender>
|
||||||
|
<signal>clicked()</signal>
|
||||||
|
<receiver>PasswordDlg</receiver>
|
||||||
|
<slot>OnOK()</slot>
|
||||||
|
</connection>
|
||||||
|
<connection>
|
||||||
|
<sender>CheckBox_Both</sender>
|
||||||
|
<signal>stateChanged(int)</signal>
|
||||||
|
<receiver>PasswordDlg</receiver>
|
||||||
|
<slot>OnCheckBox_BothChanged(int)</slot>
|
||||||
|
</connection>
|
||||||
|
<connection>
|
||||||
|
<sender>ButtonChangeEchoMode</sender>
|
||||||
|
<signal>clicked()</signal>
|
||||||
|
<receiver>PasswordDlg</receiver>
|
||||||
|
<slot>ChangeEchoMode()</slot>
|
||||||
|
</connection>
|
||||||
|
<connection>
|
||||||
|
<sender>Edit_Password</sender>
|
||||||
|
<signal>returnPressed()</signal>
|
||||||
|
<receiver>PasswordDlg</receiver>
|
||||||
|
<slot>OnOK()</slot>
|
||||||
|
</connection>
|
||||||
|
</connections>
|
||||||
|
<tabstops>
|
||||||
|
<tabstop>Edit_Password</tabstop>
|
||||||
|
<tabstop>Combo_Dirs</tabstop>
|
||||||
|
<tabstop>Button_Browse</tabstop>
|
||||||
|
<tabstop>CheckBox_Both</tabstop>
|
||||||
|
<tabstop>ButtonOK</tabstop>
|
||||||
|
<tabstop>ButtonCancel</tabstop>
|
||||||
|
<tabstop>ButtonChangeEchoMode</tabstop>
|
||||||
|
</tabstops>
|
||||||
|
<slots>
|
||||||
|
<slot>OnComboSelectionChanged(int)</slot>
|
||||||
|
<slot>OnButtonBrowse()</slot>
|
||||||
|
<slot>OnSelectClicked()</slot>
|
||||||
|
<slot>OnCancel()</slot>
|
||||||
|
<slot>OnPasswordChanged(const QString &txt)</slot>
|
||||||
|
<slot>OnOK()</slot>
|
||||||
|
<slot>OnCheckBox_BothChanged(int state)</slot>
|
||||||
|
<slot>ChangeEchoMode()</slot>
|
||||||
|
</slots>
|
||||||
|
<layoutdefaults spacing="6" margin="11"/>
|
||||||
|
</UI>
|
|
@ -0,0 +1,551 @@
|
||||||
|
<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
|
||||||
|
<class>GenPwDlg</class>
|
||||||
|
<widget class="QDialog">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>GenPwDlg</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>460</width>
|
||||||
|
<height>470</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy>
|
||||||
|
<hsizetype>0</hsizetype>
|
||||||
|
<vsizetype>0</vsizetype>
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="minimumSize">
|
||||||
|
<size>
|
||||||
|
<width>460</width>
|
||||||
|
<height>470</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="maximumSize">
|
||||||
|
<size>
|
||||||
|
<width>460</width>
|
||||||
|
<height>470</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="caption">
|
||||||
|
<string>Passwort Generator</string>
|
||||||
|
</property>
|
||||||
|
<widget class="QProgressBar">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>Progress_Quali</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>130</x>
|
||||||
|
<y>400</y>
|
||||||
|
<width>180</width>
|
||||||
|
<height>15</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QLineEdit">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>Edit_dest</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>130</x>
|
||||||
|
<y>370</y>
|
||||||
|
<width>250</width>
|
||||||
|
<height>21</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QLabel">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>Label_Bits</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>320</x>
|
||||||
|
<y>399</y>
|
||||||
|
<width>60</width>
|
||||||
|
<height>16</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string></string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QLabel">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>Banner</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>460</width>
|
||||||
|
<height>50</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="pixmap">
|
||||||
|
<pixmap>image0</pixmap>
|
||||||
|
</property>
|
||||||
|
<property name="scaledContents">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QPushButton">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>ButtonOK</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>263</x>
|
||||||
|
<y>440</y>
|
||||||
|
<width>90</width>
|
||||||
|
<height>25</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Akzep&tieren</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QPushButton">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>Button_Cancel</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>360</x>
|
||||||
|
<y>440</y>
|
||||||
|
<width>90</width>
|
||||||
|
<height>25</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Abbre&chen</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QPushButton">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>ButtonGenerate</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>381</x>
|
||||||
|
<y>370</y>
|
||||||
|
<width>70</width>
|
||||||
|
<height>21</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Generieren</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QLabel">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>textLabel4</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>20</x>
|
||||||
|
<y>370</y>
|
||||||
|
<width>110</width>
|
||||||
|
<height>20</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Neues Passwort:</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QLabel">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>textLabel5</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>20</x>
|
||||||
|
<y>400</y>
|
||||||
|
<width>110</width>
|
||||||
|
<height>20</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Qualität:</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="Line">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>line3</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>420</y>
|
||||||
|
<width>460</width>
|
||||||
|
<height>20</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="frameShape">
|
||||||
|
<enum>HLine</enum>
|
||||||
|
</property>
|
||||||
|
<property name="frameShadow">
|
||||||
|
<enum>Sunken</enum>
|
||||||
|
</property>
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Horizontal</enum>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QGroupBox">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>groupBox1</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>10</x>
|
||||||
|
<y>60</y>
|
||||||
|
<width>440</width>
|
||||||
|
<height>280</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="title">
|
||||||
|
<string>Optionen</string>
|
||||||
|
</property>
|
||||||
|
<widget class="QLineEdit">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>Edit_chars</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>30</x>
|
||||||
|
<y>170</y>
|
||||||
|
<width>400</width>
|
||||||
|
<height>21</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QSpinBox">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>Spin_Num</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>120</x>
|
||||||
|
<y>220</y>
|
||||||
|
<width>310</width>
|
||||||
|
<height>21</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="maxValue">
|
||||||
|
<number>1000</number>
|
||||||
|
</property>
|
||||||
|
<property name="minValue">
|
||||||
|
<number>1</number>
|
||||||
|
</property>
|
||||||
|
<property name="value">
|
||||||
|
<number>20</number>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QCheckBox">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>checkBox1</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>120</x>
|
||||||
|
<y>40</y>
|
||||||
|
<width>131</width>
|
||||||
|
<height>20</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Gro&ßbuchstaben</string>
|
||||||
|
</property>
|
||||||
|
<property name="accel">
|
||||||
|
<string>Alt+ß</string>
|
||||||
|
</property>
|
||||||
|
<property name="checked">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QCheckBox">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>checkBox2</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>120</x>
|
||||||
|
<y>60</y>
|
||||||
|
<width>140</width>
|
||||||
|
<height>20</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>&Kleinbuchstaben</string>
|
||||||
|
</property>
|
||||||
|
<property name="accel">
|
||||||
|
<string>Alt+K</string>
|
||||||
|
</property>
|
||||||
|
<property name="checked">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QCheckBox">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>checkBox3</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>120</x>
|
||||||
|
<y>80</y>
|
||||||
|
<width>140</width>
|
||||||
|
<height>20</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>&Zahlen</string>
|
||||||
|
</property>
|
||||||
|
<property name="accel">
|
||||||
|
<string>Alt+Z</string>
|
||||||
|
</property>
|
||||||
|
<property name="checked">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QCheckBox">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>checkBox4</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>120</x>
|
||||||
|
<y>100</y>
|
||||||
|
<width>140</width>
|
||||||
|
<height>20</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>S&onderzeichen</string>
|
||||||
|
</property>
|
||||||
|
<property name="checked">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QCheckBox">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>checkBox6</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>260</x>
|
||||||
|
<y>60</y>
|
||||||
|
<width>170</width>
|
||||||
|
<height>20</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Bindestriche</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QCheckBox">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>checkBox7</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>260</x>
|
||||||
|
<y>80</y>
|
||||||
|
<width>170</width>
|
||||||
|
<height>20</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>&Unterstriche</string>
|
||||||
|
</property>
|
||||||
|
<property name="accel">
|
||||||
|
<string>Alt+U</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QCheckBox">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>checkBox8</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>260</x>
|
||||||
|
<y>100</y>
|
||||||
|
<width>170</width>
|
||||||
|
<height>20</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>h&öhere ANSI-Zeichen</string>
|
||||||
|
</property>
|
||||||
|
<property name="accel">
|
||||||
|
<string>Alt+ö</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QRadioButton">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>Radio_2</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>10</x>
|
||||||
|
<y>150</y>
|
||||||
|
<width>420</width>
|
||||||
|
<height>16</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>&nur folgende Zeichen benutzen:</string>
|
||||||
|
</property>
|
||||||
|
<property name="accel">
|
||||||
|
<string>Alt+N</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QLabel">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>textLabel1</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>10</x>
|
||||||
|
<y>220</y>
|
||||||
|
<width>110</width>
|
||||||
|
<height>21</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Zeichenanzahl:</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QCheckBox">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>Check_strongrandom</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>120</x>
|
||||||
|
<y>250</y>
|
||||||
|
<width>310</width>
|
||||||
|
<height>21</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>"/dev/rando&m" nutzen (empfohlen)</string>
|
||||||
|
</property>
|
||||||
|
<property name="accel">
|
||||||
|
<string>Alt+M</string>
|
||||||
|
</property>
|
||||||
|
<property name="checked">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QRadioButton">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>Radio_1</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>10</x>
|
||||||
|
<y>20</y>
|
||||||
|
<width>420</width>
|
||||||
|
<height>21</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>folgende Zeichengruppen &verwenden:</string>
|
||||||
|
</property>
|
||||||
|
<property name="accel">
|
||||||
|
<string>Alt+V</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QCheckBox">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>checkBox5</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>260</x>
|
||||||
|
<y>40</y>
|
||||||
|
<width>170</width>
|
||||||
|
<height>20</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>&Leerzeichen</string>
|
||||||
|
</property>
|
||||||
|
<property name="accel">
|
||||||
|
<string>Alt+L</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</widget>
|
||||||
|
</widget>
|
||||||
|
<images>
|
||||||
|
<image name="image0">
|
||||||
|
<data format="XPM.GZ" length="4833">789c8597596f23470e80dfe75718c3b7c182e9eabb11ec834fc9873cbeaf601fc86ec9966df994cfc5fef794483633934d10c836fcb9582cde55fee5dbd2d9de68e9db2f5f9ee7349fb64bed153d2d7deb5e66b38fdffef3efff7ef99aa64b8baf2c5b4abffeebcb57dc5c6a9720499290640b8613e110ff22eb941b07657e7256f90be742e4a7c6a9ed076791c7a1732efbd784d3f817615a71167db0e55c0a17ce95c88f8ced3c7e74d6f306cea29fd159f583b3e8a75367d18f5bce8df0b63389be67e3ccfcd97716fd78e22cfaf1d459edefedcbedbc63e75af4cf85b33edeb8616cfef1b5b39eb7e72cf6c28b7166fb53678df7b5b3fadf388b3d503a8b3d40c6b9eaa35767d9cf37c6a5e53f73d6f3769d55bedf5f2789ac6bfcf2de1fda33ce4cdfbb716eeb6fce1acf1de3c2f2bbe7acf573605cdafe2b67f5efd359f20bb97165febe38b3c453fd2bfa7cd0a67165fea97c9db416ff1de3b1e9d77a6d12567bf8c159ed9d1ab7969fc2b8d378e2ba304579c93769bd719457fd524f2184cae221f51bd250a8fd3c35ae4cfec1b8b6fa06e3c6eaffc859d651f215b2d0c7efdab8327b969d459e9e8d7bfd57c68df587c43be4c1e20b685c1b9f0b17c1e283cfce927f96f911ca40d63fcbce7afebd31eb3a91b3fa37376ead9e64dea5759606a94f546eb23499883d9bc69932bef4acf22cf594725c1f8bfca9b3c8d3aa711e82c82bb73de3817111a4fe2171d67e1a1b97ba8e87ce5a8f12bfb48b2cfae8ceb85206894f9666135bff2e5c45d6fae894a3393a3f5be13aaeb7729eca4ff2d6ce3f5b701ef2b1c95f0aa7715dfb4de657519675d0fc8d8c9ba0f527f12faab234fd8fc695f1ab716dfa3f84ebb2089dec5f779678d381711d74beae398b7f540b3751bfd6e39ab1c9033b6bbd07e326687dcb3c2da8ecf47cfa301e9bbe37e389c94b3c0a2edba0f5f361dc194b3c8b36eed77acf9c453fab7f6d95587e6e8d83c957c25dc9668fdc5fc538b2c6e3a6e754e7adcc836252b6a9d69bccffb2ad535d67e98fb2ab538befaab3e8439947e5b84e82f6ffa17165f1bd7096fcc1ccb8b67a981b375a0f20f92d2775b078493dd54c75aaef0de9dfba75167fea2eb2f683dc5771388d753fbe396b7fca7c6b52ea2c5e57ce621fcbfdd26464f1812767ed8f63e3ced665de34c464fe9e1bb3d5b3f45bc3dca67a7fc9fba7697b46a9bf66cc13cb8fcc8b66c2960f3832b6f3988dad1e2828b799c53371d6f9766b9c5b7f4afe286983f5c3aeb3be177ace6c1ecc9cb51f6a678def8a7169f351fca710f5a93d9db3d64febacf9981aa76a2f5e3b6b7d5d1af7f6df3aebfb67e4acf93f72d6f972675cd83c7d77d67cac3bebfdfce9acf7eb87b3c66b665cdabc5feed9f44bfd51caade59395dbc4fc3f33cecc9f9b9e35bf786fdccfffc459e7ffc059eb7fe2acefcfd459df13dbceda5f4367bddffed8affdf0665c243a6f769c351f6367f51f7ad6fcefcf9dd57e72567fd959e3dd3a6bbc3b677daf34ce6affadb3dadbdb57263a5f46ce7adf8e9dd5dededfbe5e2f9cb5de5b678df7bb71a5fa59f767dccf77cd57d6f7136c185b7e79d359f3159cf53df7e8acf19e19f7f57ee5acef9b0d67f5b733b6fa844b63f38f07ceea9fcc3fca5b9bef58199b3dbce5acefa53567bd6fee8c73d54f95b3fa3b34b6fcc3b3b3f6dba1b3f6afe6a788fb6bad9f1f3f08f19b90b18ddff0f3dafefc2fe4bb284948f1b7f1e2e73fca4ff012af708ad77883b77f2f8f33bc8b9aeff1011ff1099f718e2ff88a6ff88e1ff8196da33fc92fe30aaee21aaee3060e70889bb885dbb88323dc8d7a407df941be8dd2dfa3ec5e94dac7033cc4233cc6133cc5333cc78bffb327c18029669863812556d1ef1a9ba8168080a1850ec608daaf30814bb882296ec035dc486426700b33b8837b78c0213cc2133ce367af3f7a93c01c5e700b5ee10d6fe11d093ee01396610556f104d6601d36a2d77abf0da2f41036610bb6b1841d18c12e7c873dd887033884233886133885b318297d3fc558e114cee1021208d1e01432c8a180122aa8e3c5190f2322c63bb507995aea62bc37698c9f34a14bba822d9ad235ddd02dcde80e87744f0f7fc823d1233de1363d634d737aa1577aa3ebf8047ba70ffaa4655aa1555aa375b37f0c298e6923ca0fb0a1212cd3266dd136edd08876e93bedd13e1dd0211d997e88f6031dd3099d624e67744e17f15f8b40296594cb273ef61632aa5ff34515d5d43032707c19449fd6e993db283b8217ee62fc0630fa31bf1cdf037c493bb1724ef98a162d30e56bcae185467cc3b731dfa0f935f919dff13daef1033ff2133fc77d039e73d41da55ff90d268b8afba17ea27d30a18edff9833f7999577895d7a88421aff31b6fc0e04ff5c6314acc031ef2266cc4c7ce036ff12ca66a10ff75d95eacfd2ccf3b0bfd38e651ac93f7d83b77f84e47d1e6f1222e0bf9c5ef3ff7a3f690766f4ffd0490aa85affffbf5cbef985d44a8</data>
|
||||||
|
</image>
|
||||||
|
</images>
|
||||||
|
<connections>
|
||||||
|
<connection>
|
||||||
|
<sender>Radio_1</sender>
|
||||||
|
<signal>stateChanged(int)</signal>
|
||||||
|
<receiver>GenPwDlg</receiver>
|
||||||
|
<slot>OnRadio1StateChanged(int)</slot>
|
||||||
|
</connection>
|
||||||
|
<connection>
|
||||||
|
<sender>Radio_2</sender>
|
||||||
|
<signal>stateChanged(int)</signal>
|
||||||
|
<receiver>GenPwDlg</receiver>
|
||||||
|
<slot>OnRadio2StateChanged(int)</slot>
|
||||||
|
</connection>
|
||||||
|
<connection>
|
||||||
|
<sender>ButtonGenerate</sender>
|
||||||
|
<signal>clicked()</signal>
|
||||||
|
<receiver>GenPwDlg</receiver>
|
||||||
|
<slot>OnGeneratePw()</slot>
|
||||||
|
</connection>
|
||||||
|
<connection>
|
||||||
|
<sender>ButtonOK</sender>
|
||||||
|
<signal>clicked()</signal>
|
||||||
|
<receiver>GenPwDlg</receiver>
|
||||||
|
<slot>OnAccept()</slot>
|
||||||
|
</connection>
|
||||||
|
<connection>
|
||||||
|
<sender>Button_Cancel</sender>
|
||||||
|
<signal>clicked()</signal>
|
||||||
|
<receiver>GenPwDlg</receiver>
|
||||||
|
<slot>OnCancel()</slot>
|
||||||
|
</connection>
|
||||||
|
</connections>
|
||||||
|
<tabstops>
|
||||||
|
<tabstop>Radio_1</tabstop>
|
||||||
|
<tabstop>checkBox1</tabstop>
|
||||||
|
<tabstop>checkBox2</tabstop>
|
||||||
|
<tabstop>checkBox3</tabstop>
|
||||||
|
<tabstop>checkBox4</tabstop>
|
||||||
|
<tabstop>checkBox5</tabstop>
|
||||||
|
<tabstop>checkBox6</tabstop>
|
||||||
|
<tabstop>checkBox7</tabstop>
|
||||||
|
<tabstop>checkBox8</tabstop>
|
||||||
|
<tabstop>Radio_2</tabstop>
|
||||||
|
<tabstop>Edit_chars</tabstop>
|
||||||
|
<tabstop>Spin_Num</tabstop>
|
||||||
|
<tabstop>Check_strongrandom</tabstop>
|
||||||
|
<tabstop>Edit_dest</tabstop>
|
||||||
|
<tabstop>ButtonGenerate</tabstop>
|
||||||
|
<tabstop>ButtonOK</tabstop>
|
||||||
|
<tabstop>Button_Cancel</tabstop>
|
||||||
|
</tabstops>
|
||||||
|
<slots>
|
||||||
|
<slot>OnRadio1StateChanged(int)</slot>
|
||||||
|
<slot>OnRadio2StateChanged(int)</slot>
|
||||||
|
<slot>OnGeneratePw()</slot>
|
||||||
|
<slot>OnAccept()</slot>
|
||||||
|
<slot>OnCancel()</slot>
|
||||||
|
</slots>
|
||||||
|
<layoutdefaults spacing="6" margin="11"/>
|
||||||
|
</UI>
|
|
@ -0,0 +1,327 @@
|
||||||
|
<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
|
||||||
|
<class>Search_Dlg</class>
|
||||||
|
<widget class="QDialog">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>Search_Dlg</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>390</width>
|
||||||
|
<height>246</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy>
|
||||||
|
<hsizetype>0</hsizetype>
|
||||||
|
<vsizetype>0</vsizetype>
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="minimumSize">
|
||||||
|
<size>
|
||||||
|
<width>390</width>
|
||||||
|
<height>246</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="maximumSize">
|
||||||
|
<size>
|
||||||
|
<width>390</width>
|
||||||
|
<height>246</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="caption">
|
||||||
|
<string>Suche...</string>
|
||||||
|
</property>
|
||||||
|
<widget class="QLabel">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>Banner</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>390</width>
|
||||||
|
<height>50</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="pixmap">
|
||||||
|
<pixmap>image0</pixmap>
|
||||||
|
</property>
|
||||||
|
<property name="scaledContents">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QGroupBox">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>groupBox1</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>10</x>
|
||||||
|
<y>130</y>
|
||||||
|
<width>370</width>
|
||||||
|
<height>70</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="title">
|
||||||
|
<string>Suche nach</string>
|
||||||
|
</property>
|
||||||
|
<widget class="QCheckBox">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>checkBox_Title</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>20</x>
|
||||||
|
<y>20</y>
|
||||||
|
<width>110</width>
|
||||||
|
<height>20</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>&Titel</string>
|
||||||
|
</property>
|
||||||
|
<property name="accel">
|
||||||
|
<string>Alt+T</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QCheckBox">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>checkBox_Username</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>20</x>
|
||||||
|
<y>40</y>
|
||||||
|
<width>110</width>
|
||||||
|
<height>20</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Benut&zername</string>
|
||||||
|
</property>
|
||||||
|
<property name="accel">
|
||||||
|
<string>Alt+Z</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QCheckBox">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>checkBox_Comment</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>140</x>
|
||||||
|
<y>40</y>
|
||||||
|
<width>120</width>
|
||||||
|
<height>20</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>&Kommentar</string>
|
||||||
|
</property>
|
||||||
|
<property name="accel">
|
||||||
|
<string>Alt+K</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QCheckBox">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>checkBox_URL</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>260</x>
|
||||||
|
<y>20</y>
|
||||||
|
<width>100</width>
|
||||||
|
<height>20</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>&URL</string>
|
||||||
|
</property>
|
||||||
|
<property name="accel">
|
||||||
|
<string>Alt+U</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QCheckBox">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>checkBox_Attachment</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>260</x>
|
||||||
|
<y>40</y>
|
||||||
|
<width>100</width>
|
||||||
|
<height>20</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>A&nhang</string>
|
||||||
|
</property>
|
||||||
|
<property name="accel">
|
||||||
|
<string>Alt+N</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QCheckBox">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>checkBox_Password</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>140</x>
|
||||||
|
<y>20</y>
|
||||||
|
<width>110</width>
|
||||||
|
<height>20</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Pass&wort</string>
|
||||||
|
</property>
|
||||||
|
<property name="accel">
|
||||||
|
<string>Alt+W</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</widget>
|
||||||
|
<widget class="QPushButton">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>Button_Close</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>280</x>
|
||||||
|
<y>210</y>
|
||||||
|
<width>97</width>
|
||||||
|
<height>23</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>S&chließen</string>
|
||||||
|
</property>
|
||||||
|
<property name="accel">
|
||||||
|
<string>Alt+C</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QLabel">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>textLabel1</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>10</x>
|
||||||
|
<y>60</y>
|
||||||
|
<width>90</width>
|
||||||
|
<height>20</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Suchbegriff:</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QPushButton">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>Button_Search</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>170</x>
|
||||||
|
<y>210</y>
|
||||||
|
<width>97</width>
|
||||||
|
<height>23</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Suchen</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QLineEdit">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>Edit_Search</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>110</x>
|
||||||
|
<y>60</y>
|
||||||
|
<width>270</width>
|
||||||
|
<height>21</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QCheckBox">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>checkBox_regExp</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>110</x>
|
||||||
|
<y>110</y>
|
||||||
|
<width>170</width>
|
||||||
|
<height>20</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>regul&ärer Ausdruck</string>
|
||||||
|
</property>
|
||||||
|
<property name="accel">
|
||||||
|
<string>Alt+ä</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QCheckBox">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>checkBox_Cs</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>110</x>
|
||||||
|
<y>90</y>
|
||||||
|
<width>250</width>
|
||||||
|
<height>20</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Gro&ß- und Kleinschreibung beachten</string>
|
||||||
|
</property>
|
||||||
|
<property name="accel">
|
||||||
|
<string>Alt+ß</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</widget>
|
||||||
|
<images>
|
||||||
|
<image name="image0">
|
||||||
|
<data format="XPM.GZ" length="4833">789c8597596f23470e80dfe75718c3b7c182e9eabb11ec834fc9873cbeaf601fc86ec9966df994cfc5fef794483633934d10c836fcb9582cde55fee5dbd2d9de68e9db2f5f9ee7349fb64bed153d2d7deb5e66b38fdffef3efff7ef99aa64b8baf2c5b4abffeebcb57dc5c6a9720499290640b8613e110ff22eb941b07657e7256f90be742e4a7c6a9ed076791c7a1732efbd784d3f817615a71167db0e55c0a17ce95c88f8ced3c7e74d6f306cea29fd159f583b3e8a75367d18f5bce8df0b63389be67e3ccfcd97716fd78e22cfaf1d459edefedcbedbc63e75af4cf85b33edeb8616cfef1b5b39eb7e72cf6c28b7166fb53678df7b5b3fadf388b3d503a8b3d40c6b9eaa35767d9cf37c6a5e53f73d6f3769d55bedf5f2789ac6bfcf2de1fda33ce4cdfbb716eeb6fce1acf1de3c2f2bbe7acf573605cdafe2b67f5efd359f20bb97165febe38b3c453fd2bfa7cd0a67165fea97c9db416ff1de3b1e9d77a6d12567bf8c159ed9d1ab7969fc2b8d378e2ba304579c93769bd719457fd524f2184cae221f51bd250a8fd3c35ae4cfec1b8b6fa06e3c6eaffc859d651f215b2d0c7efdab8327b969d459e9e8d7bfd57c68df587c43be4c1e20b685c1b9f0b17c1e283cfce927f96f911ca40d63fcbce7afebd31eb3a91b3fa37376ead9e64dea5759606a94f546eb23499883d9bc69932bef4acf22cf594725c1f8bfca9b3c8d3aa711e82c82bb73de3817111a4fe2171d67e1a1b97ba8e87ce5a8f12bfb48b2cfae8ceb85206894f9666135bff2e5c45d6fae894a3393a3f5be13aaeb7729eca4ff2d6ce3f5b701ef2b1c95f0aa7715dfb4de657519675d0fc8d8c9ba0f527f12faab234fd8fc695f1ab716dfa3f84ebb2089dec5f779678d381711d74beae398b7f540b3751bfd6e39ab1c9033b6bbd07e326687dcb3c2da8ecf47cfa301e9bbe37e389c94b3c0a2edba0f5f361dc194b3c8b36eed77acf9c453fab7f6d95587e6e8d83c957c25dc9668fdc5fc538b2c6e3a6e754e7adcc836252b6a9d69bccffb2ad535d67e98fb2ab538befaab3e8439947e5b84e82f6ffa17165f1bd7096fcc1ccb8b67a981b375a0f20f92d2775b078493dd54c75aaef0de9dfba75167fea2eb2f683dc5771388d753fbe396b7fca7c6b52ea2c5e57ce621fcbfdd26464f1812767ed8f63e3ced665de34c464fe9e1bb3d5b3f45bc3dca67a7fc9fba7697b46a9bf66cc13cb8fcc8b66c2960f3832b6f3988dad1e2828b799c53371d6f9766b9c5b7f4afe286983f5c3aeb3be177ace6c1ecc9cb51f6a678def8a7169f351fca710f5a93d9db3d64febacf9981aa76a2f5e3b6b7d5d1af7f6df3aebfb67e4acf93f72d6f972675cd83c7d77d67cac3bebfdfce9acf7eb87b3c66b665cdabc5feed9f44bfd51caade59395dbc4fc3f33cecc9f9b9e35bf786fdccfffc459e7ffc059eb7fe2acefcfd459df13dbceda5f4367bddffed8affdf0665c243a6f769c351f6367f51f7ad6fcefcf9dd57e72567fd959e3dd3a6bbc3b677daf34ce6affadb3dadbdb57263a5f46ce7adf8e9dd5dededfbe5e2f9cb5de5b678df7bb71a5fa59f767dccf77cd57d6f7136c185b7e79d359f3159cf53df7e8acf19e19f7f57ee5acef9b0d67f5b733b6fa844b63f38f07ceea9fcc3fca5b9bef58199b3dbce5acefa53567bd6fee8c73d54f95b3fa3b34b6fcc3b3b3f6dba1b3f6afe6a788fb6bad9f1f3f08f19b90b18ddff0f3dafefc2fe4bb284948f1b7f1e2e73fca4ff012af708ad77883b77f2f8f33bc8b9aeff1011ff1099f718e2ff88a6ff88e1ff8196da33fc92fe30aaee21aaee3060e70889bb885dbb88323dc8d7a407df941be8dd2dfa3ec5e94dac7033cc4233cc6133cc5333cc78bffb327c18029669863812556d1ef1a9ba8168080a1850ec608daaf30814bb882296ec035dc486426700b33b8837b78c0213cc2133ce367af3f7a93c01c5e700b5ee10d6fe11d093ee01396610556f104d6601d36a2d77abf0da2f41036610bb6b1841d18c12e7c873dd887033884233886133885b318297d3fc558e114cee1021208d1e01432c8a180122aa8e3c5190f2322c63bb507995aea62bc37698c9f34a14bba822d9ad235ddd02dcde80e87744f0f7fc823d1233de1363d634d737aa1577aa3ebf8047ba70ffaa4655aa1555aa375b37f0c298e6923ca0fb0a1212cd3266dd136edd08876e93bedd13e1dd0211d997e88f6031dd3099d624e67744e17f15f8b40296594cb273ef61632aa5ff34515d5d43032707c19449fd6e993db283b8217ee62fc0630fa31bf1cdf037c493bb1724ef98a162d30e56bcae185467cc3b731dfa0f935f919dff13daef1033ff2133fc77d039e73d41da55ff90d268b8afba17ea27d30a18edff9833f7999577895d7a88421aff31b6fc0e04ff5c6314acc031ef2266cc4c7ce036ff12ca66a10ff75d95eacfd2ccf3b0bfd38e651ac93f7d83b77f84e47d1e6f1222e0bf9c5ef3ff7a3f690766f4ffd0490aa85affffbf5cbef985d44a8</data>
|
||||||
|
</image>
|
||||||
|
</images>
|
||||||
|
<connections>
|
||||||
|
<connection>
|
||||||
|
<sender>Button_Search</sender>
|
||||||
|
<signal>clicked()</signal>
|
||||||
|
<receiver>Search_Dlg</receiver>
|
||||||
|
<slot>OnButtonSearch()</slot>
|
||||||
|
</connection>
|
||||||
|
<connection>
|
||||||
|
<sender>Button_Close</sender>
|
||||||
|
<signal>clicked()</signal>
|
||||||
|
<receiver>Search_Dlg</receiver>
|
||||||
|
<slot>OnButtonClose()</slot>
|
||||||
|
</connection>
|
||||||
|
</connections>
|
||||||
|
<tabstops>
|
||||||
|
<tabstop>Edit_Search</tabstop>
|
||||||
|
<tabstop>checkBox_Cs</tabstop>
|
||||||
|
<tabstop>checkBox_regExp</tabstop>
|
||||||
|
<tabstop>checkBox_Title</tabstop>
|
||||||
|
<tabstop>checkBox_Username</tabstop>
|
||||||
|
<tabstop>checkBox_Password</tabstop>
|
||||||
|
<tabstop>checkBox_Comment</tabstop>
|
||||||
|
<tabstop>checkBox_URL</tabstop>
|
||||||
|
<tabstop>checkBox_Attachment</tabstop>
|
||||||
|
<tabstop>Button_Search</tabstop>
|
||||||
|
<tabstop>Button_Close</tabstop>
|
||||||
|
</tabstops>
|
||||||
|
<slots>
|
||||||
|
<slot>OnButtonSearch()</slot>
|
||||||
|
<slot>OnButtonClose()</slot>
|
||||||
|
</slots>
|
||||||
|
<layoutdefaults spacing="6" margin="11"/>
|
||||||
|
</UI>
|
|
@ -0,0 +1,492 @@
|
||||||
|
<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
|
||||||
|
<class>SettingsDialog</class>
|
||||||
|
<widget class="QDialog">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>SettingsDialog</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>571</width>
|
||||||
|
<height>341</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="minimumSize">
|
||||||
|
<size>
|
||||||
|
<width>571</width>
|
||||||
|
<height>341</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="maximumSize">
|
||||||
|
<size>
|
||||||
|
<width>571</width>
|
||||||
|
<height>341</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="caption">
|
||||||
|
<string>Einstellungen</string>
|
||||||
|
</property>
|
||||||
|
<widget class="QPushButton">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>ButtonCancel</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>470</x>
|
||||||
|
<y>310</y>
|
||||||
|
<width>90</width>
|
||||||
|
<height>23</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Abbre&chen</string>
|
||||||
|
</property>
|
||||||
|
<property name="accel">
|
||||||
|
<string>Alt+C</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QLabel">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>Banner</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>570</width>
|
||||||
|
<height>50</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="pixmap">
|
||||||
|
<pixmap>image0</pixmap>
|
||||||
|
</property>
|
||||||
|
<property name="scaledContents">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QPushButton">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>ButtonOK</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>380</x>
|
||||||
|
<y>310</y>
|
||||||
|
<width>80</width>
|
||||||
|
<height>23</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>O&K</string>
|
||||||
|
</property>
|
||||||
|
<property name="accel">
|
||||||
|
<string>Alt+K</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QTabWidget">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>tabWidget4</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>10</x>
|
||||||
|
<y>60</y>
|
||||||
|
<width>550</width>
|
||||||
|
<height>240</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<widget class="QWidget">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>tab</cstring>
|
||||||
|
</property>
|
||||||
|
<attribute name="title">
|
||||||
|
<string>Sicherhei&t</string>
|
||||||
|
</attribute>
|
||||||
|
<widget class="QLabel">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>textLabel1</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>10</x>
|
||||||
|
<y>20</y>
|
||||||
|
<width>180</width>
|
||||||
|
<height>20</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Zwischenablage löschen nach:</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QLabel">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>textLabel2</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>280</x>
|
||||||
|
<y>20</y>
|
||||||
|
<width>100</width>
|
||||||
|
<height>20</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Sekunden</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QSpinBox">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>SpinBox_ClipboardTime</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>190</x>
|
||||||
|
<y>20</y>
|
||||||
|
<width>80</width>
|
||||||
|
<height>20</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QCheckBox">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>CheckBox_ShowPasswords</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>10</x>
|
||||||
|
<y>50</y>
|
||||||
|
<width>420</width>
|
||||||
|
<height>20</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Passw&örter standardmäßig in Klartext anzeigen</string>
|
||||||
|
</property>
|
||||||
|
<property name="accel">
|
||||||
|
<string>Alt+ö</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</widget>
|
||||||
|
<widget class="QWidget">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>TabPage</cstring>
|
||||||
|
</property>
|
||||||
|
<attribute name="title">
|
||||||
|
<string>E&rscheinungsbild</string>
|
||||||
|
</attribute>
|
||||||
|
<widget class="QGroupBox">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>groupBox1</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>10</x>
|
||||||
|
<y>10</y>
|
||||||
|
<width>520</width>
|
||||||
|
<height>90</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="title">
|
||||||
|
<string>Bannerfarbverlauf</string>
|
||||||
|
</property>
|
||||||
|
<widget class="QLabel">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>textLabel1_3</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>10</x>
|
||||||
|
<y>20</y>
|
||||||
|
<width>53</width>
|
||||||
|
<height>20</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Farbe 1</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QLabel">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>pixmColor1</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>70</x>
|
||||||
|
<y>20</y>
|
||||||
|
<width>22</width>
|
||||||
|
<height>22</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="pixmap">
|
||||||
|
<pixmap>image0</pixmap>
|
||||||
|
</property>
|
||||||
|
<property name="scaledContents">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QPushButton">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>ButtonColor1</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>100</x>
|
||||||
|
<y>20</y>
|
||||||
|
<width>60</width>
|
||||||
|
<height>23</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>&ändern...</string>
|
||||||
|
</property>
|
||||||
|
<property name="accel">
|
||||||
|
<string>Alt+ä</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QLabel">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>textLabel3</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>190</x>
|
||||||
|
<y>20</y>
|
||||||
|
<width>60</width>
|
||||||
|
<height>20</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Farbe 2</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QLabel">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>pixmTextColor</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>70</x>
|
||||||
|
<y>50</y>
|
||||||
|
<width>22</width>
|
||||||
|
<height>22</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="pixmap">
|
||||||
|
<pixmap>image0</pixmap>
|
||||||
|
</property>
|
||||||
|
<property name="scaledContents">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QPushButton">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>ButtonTextColor</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>100</x>
|
||||||
|
<y>50</y>
|
||||||
|
<width>60</width>
|
||||||
|
<height>23</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>ändern...</string>
|
||||||
|
</property>
|
||||||
|
<property name="accel">
|
||||||
|
<string></string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QLabel">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>textLabel2_2</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>10</x>
|
||||||
|
<y>50</y>
|
||||||
|
<width>54</width>
|
||||||
|
<height>20</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Textfarbe</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QLabel">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>pixmColor2</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>250</x>
|
||||||
|
<y>20</y>
|
||||||
|
<width>22</width>
|
||||||
|
<height>22</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="pixmap">
|
||||||
|
<pixmap>image0</pixmap>
|
||||||
|
</property>
|
||||||
|
<property name="scaledContents">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QPushButton">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>ButtonColor2</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>280</x>
|
||||||
|
<y>20</y>
|
||||||
|
<width>60</width>
|
||||||
|
<height>23</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>ändern...</string>
|
||||||
|
</property>
|
||||||
|
<property name="accel">
|
||||||
|
<string></string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</widget>
|
||||||
|
<widget class="QCheckBox">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>CheckBox_ExpandGroupTree</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>10</x>
|
||||||
|
<y>110</y>
|
||||||
|
<width>380</width>
|
||||||
|
<height>20</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Gruppenbaum beim &Öffnen aufklappen</string>
|
||||||
|
</property>
|
||||||
|
<property name="accel">
|
||||||
|
<string>Alt+ö</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</widget>
|
||||||
|
<widget class="QWidget">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>tab</cstring>
|
||||||
|
</property>
|
||||||
|
<attribute name="title">
|
||||||
|
<string>S&onstiges</string>
|
||||||
|
</attribute>
|
||||||
|
<widget class="QCheckBox">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>CheckBox_OpenLast</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>10</x>
|
||||||
|
<y>20</y>
|
||||||
|
<width>380</width>
|
||||||
|
<height>20</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>zuletzt geöffnete Datei bei Programmstart &öffnen</string>
|
||||||
|
</property>
|
||||||
|
<property name="accel">
|
||||||
|
<string>Alt+ö</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QLabel">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>textLabel1_4</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>10</x>
|
||||||
|
<y>50</y>
|
||||||
|
<width>110</width>
|
||||||
|
<height>20</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Browseraufruf:</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QLineEdit">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>Edit_BrowserCmd</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>120</x>
|
||||||
|
<y>50</y>
|
||||||
|
<width>190</width>
|
||||||
|
<height>21</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</widget>
|
||||||
|
</widget>
|
||||||
|
</widget>
|
||||||
|
<images>
|
||||||
|
<image name="image0">
|
||||||
|
<data format="XPM.GZ" length="4833">789c8597596f23470e80dfe75718c3b7c182e9eabb11ec834fc9873cbeaf601fc86ec9966df994cfc5fef794483633934d10c836fcb9582cde55fee5dbd2d9de68e9db2f5f9ee7349fb64bed153d2d7deb5e66b38fdffef3efff7ef99aa64b8baf2c5b4abffeebcb57dc5c6a9720499290640b8613e110ff22eb941b07657e7256f90be742e4a7c6a9ed076791c7a1732efbd784d3f817615a71167db0e55c0a17ce95c88f8ced3c7e74d6f306cea29fd159f583b3e8a75367d18f5bce8df0b63389be67e3ccfcd97716fd78e22cfaf1d459edefedcbedbc63e75af4cf85b33edeb8616cfef1b5b39eb7e72cf6c28b7166fb53678df7b5b3fadf388b3d503a8b3d40c6b9eaa35767d9cf37c6a5e53f73d6f3769d55bedf5f2789ac6bfcf2de1fda33ce4cdfbb716eeb6fce1acf1de3c2f2bbe7acf573605cdafe2b67f5efd359f20bb97165febe38b3c453fd2bfa7cd0a67165fea97c9db416ff1de3b1e9d77a6d12567bf8c159ed9d1ab7969fc2b8d378e2ba304579c93769bd719457fd524f2184cae221f51bd250a8fd3c35ae4cfec1b8b6fa06e3c6eaffc859d651f215b2d0c7efdab8327b969d459e9e8d7bfd57c68df587c43be4c1e20b685c1b9f0b17c1e283cfce927f96f911ca40d63fcbce7afebd31eb3a91b3fa37376ead9e64dea5759606a94f546eb23499883d9bc69932bef4acf22cf594725c1f8bfca9b3c8d3aa711e82c82bb73de3817111a4fe2171d67e1a1b97ba8e87ce5a8f12bfb48b2cfae8ceb85206894f9666135bff2e5c45d6fae894a3393a3f5be13aaeb7729eca4ff2d6ce3f5b701ef2b1c95f0aa7715dfb4de657519675d0fc8d8c9ba0f527f12faab234fd8fc695f1ab716dfa3f84ebb2089dec5f779678d381711d74beae398b7f540b3751bfd6e39ab1c9033b6bbd07e326687dcb3c2da8ecf47cfa301e9bbe37e389c94b3c0a2edba0f5f361dc194b3c8b36eed77acf9c453fab7f6d95587e6e8d83c957c25dc9668fdc5fc538b2c6e3a6e754e7adcc836252b6a9d69bccffb2ad535d67e98fb2ab538befaab3e8439947e5b84e82f6ffa17165f1bd7096fcc1ccb8b67a981b375a0f20f92d2775b078493dd54c75aaef0de9dfba75167fea2eb2f683dc5771388d753fbe396b7fca7c6b52ea2c5e57ce621fcbfdd26464f1812767ed8f63e3ced665de34c464fe9e1bb3d5b3f45bc3dca67a7fc9fba7697b46a9bf66cc13cb8fcc8b66c2960f3832b6f3988dad1e2828b799c53371d6f9766b9c5b7f4afe286983f5c3aeb3be177ace6c1ecc9cb51f6a678def8a7169f351fca710f5a93d9db3d64febacf9981aa76a2f5e3b6b7d5d1af7f6df3aebfb67e4acf93f72d6f972675cd83c7d77d67cac3bebfdfce9acf7eb87b3c66b665cdabc5feed9f44bfd51caade59395dbc4fc3f33cecc9f9b9e35bf786fdccfffc459e7ffc059eb7fe2acefcfd459df13dbceda5f4367bddffed8affdf0665c243a6f769c351f6367f51f7ad6fcefcf9dd57e72567fd959e3dd3a6bbc3b677daf34ce6affadb3dadbdb57263a5f46ce7adf8e9dd5dededfbe5e2f9cb5de5b678df7bb71a5fa59f767dccf77cd57d6f7136c185b7e79d359f3159cf53df7e8acf19e19f7f57ee5acef9b0d67f5b733b6fa844b63f38f07ceea9fcc3fca5b9bef58199b3dbce5acefa53567bd6fee8c73d54f95b3fa3b34b6fcc3b3b3f6dba1b3f6afe6a788fb6bad9f1f3f08f19b90b18ddff0f3dafefc2fe4bb284948f1b7f1e2e73fca4ff012af708ad77883b77f2f8f33bc8b9aeff1011ff1099f718e2ff88a6ff88e1ff8196da33fc92fe30aaee21aaee3060e70889bb885dbb88323dc8d7a407df941be8dd2dfa3ec5e94dac7033cc4233cc6133cc5333cc78bffb327c18029669863812556d1ef1a9ba8168080a1850ec608daaf30814bb882296ec035dc486426700b33b8837b78c0213cc2133ce367af3f7a93c01c5e700b5ee10d6fe11d093ee01396610556f104d6601d36a2d77abf0da2f41036610bb6b1841d18c12e7c873dd887033884233886133885b318297d3fc558e114cee1021208d1e01432c8a180122aa8e3c5190f2322c63bb507995aea62bc37698c9f34a14bba822d9ad235ddd02dcde80e87744f0f7fc823d1233de1363d634d737aa1577aa3ebf8047ba70ffaa4655aa1555aa375b37f0c298e6923ca0fb0a1212cd3266dd136edd08876e93bedd13e1dd0211d997e88f6031dd3099d624e67744e17f15f8b40296594cb273ef61632aa5ff34515d5d43032707c19449fd6e993db283b8217ee62fc0630fa31bf1cdf037c493bb1724ef98a162d30e56bcae185467cc3b731dfa0f935f919dff13daef1033ff2133fc77d039e73d41da55ff90d268b8afba17ea27d30a18edff9833f7999577895d7a88421aff31b6fc0e04ff5c6314acc031ef2266cc4c7ce036ff12ca66a10ff75d95eacfd2ccf3b0bfd38e651ac93f7d83b77f84e47d1e6f1222e0bf9c5ef3ff7a3f690766f4ffd0490aa85affffbf5cbef985d44a8</data>
|
||||||
|
</image>
|
||||||
|
</images>
|
||||||
|
<connections>
|
||||||
|
<connection>
|
||||||
|
<sender>ButtonOK</sender>
|
||||||
|
<signal>clicked()</signal>
|
||||||
|
<receiver>SettingsDialog</receiver>
|
||||||
|
<slot>OnOK()</slot>
|
||||||
|
</connection>
|
||||||
|
<connection>
|
||||||
|
<sender>ButtonCancel</sender>
|
||||||
|
<signal>clicked()</signal>
|
||||||
|
<receiver>SettingsDialog</receiver>
|
||||||
|
<slot>OnCancel()</slot>
|
||||||
|
</connection>
|
||||||
|
<connection>
|
||||||
|
<sender>ButtonColor1</sender>
|
||||||
|
<signal>clicked()</signal>
|
||||||
|
<receiver>SettingsDialog</receiver>
|
||||||
|
<slot>OnColor1()</slot>
|
||||||
|
</connection>
|
||||||
|
<connection>
|
||||||
|
<sender>ButtonColor2</sender>
|
||||||
|
<signal>clicked()</signal>
|
||||||
|
<receiver>SettingsDialog</receiver>
|
||||||
|
<slot>OnColor2()</slot>
|
||||||
|
</connection>
|
||||||
|
<connection>
|
||||||
|
<sender>ButtonTextColor</sender>
|
||||||
|
<signal>clicked()</signal>
|
||||||
|
<receiver>SettingsDialog</receiver>
|
||||||
|
<slot>OnTextColor()</slot>
|
||||||
|
</connection>
|
||||||
|
</connections>
|
||||||
|
<tabstops>
|
||||||
|
<tabstop>tabWidget4</tabstop>
|
||||||
|
<tabstop>SpinBox_ClipboardTime</tabstop>
|
||||||
|
<tabstop>CheckBox_ShowPasswords</tabstop>
|
||||||
|
<tabstop>ButtonColor1</tabstop>
|
||||||
|
<tabstop>ButtonTextColor</tabstop>
|
||||||
|
<tabstop>ButtonColor2</tabstop>
|
||||||
|
<tabstop>CheckBox_OpenLast</tabstop>
|
||||||
|
<tabstop>Edit_BrowserCmd</tabstop>
|
||||||
|
<tabstop>ButtonOK</tabstop>
|
||||||
|
<tabstop>ButtonCancel</tabstop>
|
||||||
|
</tabstops>
|
||||||
|
<slots>
|
||||||
|
<slot>OnOK()</slot>
|
||||||
|
<slot>OnCancel()</slot>
|
||||||
|
<slot>OnColor1()</slot>
|
||||||
|
<slot>OnColor2()</slot>
|
||||||
|
<slot>OnTextColor()</slot>
|
||||||
|
<slot>newSlot()</slot>
|
||||||
|
</slots>
|
||||||
|
<layoutdefaults spacing="6" margin="11"/>
|
||||||
|
</UI>
|
|
@ -0,0 +1,154 @@
|
||||||
|
<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
|
||||||
|
<class>SimplePasswordDialog</class>
|
||||||
|
<widget class="QDialog">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>SimplePasswordDialog</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>2</x>
|
||||||
|
<y>3</y>
|
||||||
|
<width>345</width>
|
||||||
|
<height>90</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy>
|
||||||
|
<hsizetype>0</hsizetype>
|
||||||
|
<vsizetype>0</vsizetype>
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="minimumSize">
|
||||||
|
<size>
|
||||||
|
<width>345</width>
|
||||||
|
<height>90</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="maximumSize">
|
||||||
|
<size>
|
||||||
|
<width>345</width>
|
||||||
|
<height>90</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="caption">
|
||||||
|
<string>Passworteingabe</string>
|
||||||
|
</property>
|
||||||
|
<widget class="QLabel">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>textLabel1</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>10</x>
|
||||||
|
<y>20</y>
|
||||||
|
<width>60</width>
|
||||||
|
<height>20</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Passwort:</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QLineEdit">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>EditPassword</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>80</x>
|
||||||
|
<y>20</y>
|
||||||
|
<width>240</width>
|
||||||
|
<height>21</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QPushButton">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>ButtonOK</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>170</x>
|
||||||
|
<y>60</y>
|
||||||
|
<width>80</width>
|
||||||
|
<height>23</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>O&K</string>
|
||||||
|
</property>
|
||||||
|
<property name="accel">
|
||||||
|
<string>Alt+K</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QPushButton">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>ButtonCancel</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>257</x>
|
||||||
|
<y>60</y>
|
||||||
|
<width>80</width>
|
||||||
|
<height>23</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Abbre&chen</string>
|
||||||
|
</property>
|
||||||
|
<property name="accel">
|
||||||
|
<string>Alt+C</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QPushButton">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>Button_HidePassword</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>320</x>
|
||||||
|
<y>20</y>
|
||||||
|
<width>20</width>
|
||||||
|
<height>20</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>...</string>
|
||||||
|
</property>
|
||||||
|
<property name="accel">
|
||||||
|
<string></string>
|
||||||
|
</property>
|
||||||
|
<property name="toggleButton">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</widget>
|
||||||
|
<connections>
|
||||||
|
<connection>
|
||||||
|
<sender>Button_HidePassword</sender>
|
||||||
|
<signal>toggled(bool)</signal>
|
||||||
|
<receiver>SimplePasswordDialog</receiver>
|
||||||
|
<slot>OnHidePasswordToggled(bool)</slot>
|
||||||
|
</connection>
|
||||||
|
<connection>
|
||||||
|
<sender>ButtonOK</sender>
|
||||||
|
<signal>clicked()</signal>
|
||||||
|
<receiver>SimplePasswordDialog</receiver>
|
||||||
|
<slot>OnOK()</slot>
|
||||||
|
</connection>
|
||||||
|
<connection>
|
||||||
|
<sender>ButtonCancel</sender>
|
||||||
|
<signal>clicked()</signal>
|
||||||
|
<receiver>SimplePasswordDialog</receiver>
|
||||||
|
<slot>OnCancel()</slot>
|
||||||
|
</connection>
|
||||||
|
</connections>
|
||||||
|
<slots>
|
||||||
|
<slot>OnHidePasswordToggled(bool state)</slot>
|
||||||
|
<slot>OnOK()</slot>
|
||||||
|
<slot>OnCancel()</slot>
|
||||||
|
</slots>
|
||||||
|
<layoutdefaults spacing="6" margin="11"/>
|
||||||
|
</UI>
|
|
@ -0,0 +1,121 @@
|
||||||
|
/***************************************************************************
|
||||||
|
* Copyright (C) 2005 by Tarek Saidi *
|
||||||
|
* mail@tarek-saidi.de *
|
||||||
|
* *
|
||||||
|
* This program is free software; you can redistribute it and/or modify *
|
||||||
|
* it under the terms of the GNU General Public License as published by *
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or *
|
||||||
|
* (at your option) any later version. *
|
||||||
|
* *
|
||||||
|
* 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, write to the *
|
||||||
|
* Free Software Foundation, Inc., *
|
||||||
|
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
|
#include "Import_KWalletXml.h"
|
||||||
|
#include <iostream.h>
|
||||||
|
#include <qobject.h>
|
||||||
|
#include <qfile.h>
|
||||||
|
#include <qdom.h>
|
||||||
|
|
||||||
|
bool Import_KWalletXml::importFile(QString FileName,PwDatabase* pwm,QString& err){
|
||||||
|
QFile file(FileName);
|
||||||
|
if(!file.exists()){
|
||||||
|
err+=QObject::trUtf8("Datei nicht gefunden");
|
||||||
|
return false;}
|
||||||
|
if(!file.open(IO_ReadOnly)){
|
||||||
|
err+=QObject::trUtf8("Datei konnte nicht geöffnet werden");
|
||||||
|
return false;}
|
||||||
|
int len=file.size();
|
||||||
|
if(len==0){
|
||||||
|
err+=QObject::trUtf8("Datei ist leer");
|
||||||
|
return false;}
|
||||||
|
UINT8* buffer=new UINT8[len];
|
||||||
|
file.readBlock((char*)buffer,len);
|
||||||
|
file.close();
|
||||||
|
QDomDocument doc;
|
||||||
|
QString xmlerr;
|
||||||
|
int col,line;
|
||||||
|
if(!doc.setContent(QString::fromUtf8((char*)buffer,len),false,&xmlerr,&line,&col)){
|
||||||
|
cout << "Import_PwManager::parseXmlContent():" << endl;
|
||||||
|
cout << (xmlerr+" (Line:%1 Column:%2)").arg(line).arg(col) << endl;
|
||||||
|
err+=QObject::trUtf8("Ungültiges XML-Dokument");
|
||||||
|
delete [] buffer;
|
||||||
|
return false;}
|
||||||
|
delete [] buffer;
|
||||||
|
QDomElement root=doc.documentElement();
|
||||||
|
if(root.tagName()!="wallet"){err+=QObject::trUtf8("Ungültiges XML-Dokument"); return false;}
|
||||||
|
QDomNodeList groups=root.elementsByTagName("folder");
|
||||||
|
if(!groups.length()){err+=QObject::trUtf8("Dokument enthält keine Daten"); return false;}
|
||||||
|
for(int i=0;i<groups.length();i++){
|
||||||
|
if(!groups.item(i).isElement()){err+=QObject::trUtf8("Ungültiges XML-Dokument"); return false;}
|
||||||
|
QDomElement CurrGroup=groups.item(i).toElement();
|
||||||
|
if(!CurrGroup.hasAttribute("name")){err+=QObject::trUtf8("Ungültiges XML-Dokument"); return false;}
|
||||||
|
CGroup* NewGroup=pwm->addGroup(NULL);
|
||||||
|
NewGroup->Name=CurrGroup.attribute("name");
|
||||||
|
QDomNodeList entries=CurrGroup.elementsByTagName("password");
|
||||||
|
for(int j=0;j<entries.length();j++){
|
||||||
|
if(!entries.item(j).isElement()){err+=QObject::trUtf8("Ungültiges XML-Dokument"); return false;}
|
||||||
|
QDomElement CurrEntry=entries.item(j).toElement();
|
||||||
|
if(!CurrEntry.hasAttribute("name")){err+=QObject::trUtf8("Ungültiges XML-Dokument"); return false;}
|
||||||
|
CEntry* NewEntry=pwm->addEntry();
|
||||||
|
NewEntry->Title=CurrEntry.attribute("name");
|
||||||
|
NewEntry->GroupID=NewGroup->ID;
|
||||||
|
QString pw=CurrEntry.text();
|
||||||
|
NewEntry->Password.setString(pw,true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
pwm->filename="";
|
||||||
|
pwm->SearchGroupID=-1;
|
||||||
|
pwm->CryptoAlgorithmus=ALGO_AES;
|
||||||
|
pwm->KeyEncRounds=6000;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// unvollständiger Schnippsel zum Lesen des Binärformats
|
||||||
|
/*
|
||||||
|
QFile file(FileName);
|
||||||
|
if(!file.exists()){
|
||||||
|
err+=QObject::trUtf8("Datei nicht gefunden");
|
||||||
|
return false;}
|
||||||
|
if(!file.open(IO_ReadOnly)){
|
||||||
|
err+=QObject::trUtf8("Datei konnte nicht geöffnet werden");
|
||||||
|
return false;}
|
||||||
|
int len=file.size();
|
||||||
|
int offset=0;
|
||||||
|
if(len<48){
|
||||||
|
err+=QObject::trUtf8("Unerwartete Dateilänge");
|
||||||
|
return false;}
|
||||||
|
UINT8* buffer=new UINT8[len];
|
||||||
|
int df=file.readBlock((char*)buffer,len);
|
||||||
|
file.close();
|
||||||
|
|
||||||
|
if(memcmp(buffer,"KWALLET\n\r\0\r\n",12)){
|
||||||
|
err+=QObject::trUtf8("Keine gültige KWallet-Datei");
|
||||||
|
return false;}
|
||||||
|
offset+=12;
|
||||||
|
MajorVersion=buffer[offset];
|
||||||
|
offset++;
|
||||||
|
MinorVersion=buffer[offset];
|
||||||
|
offset++;
|
||||||
|
if(MajorVersion != 0 || MinorVersion !=0){
|
||||||
|
err+=QObject::trUtf8("Nicht unterstützte Format Version");
|
||||||
|
return false;}
|
||||||
|
CryptAlgo=buffer[offset];
|
||||||
|
offset++;
|
||||||
|
if(CryptAlgo != 0){
|
||||||
|
err+=QObject::trUtf8("Nicht unterstützter Verschlüsselungsalgorithmus");
|
||||||
|
return false;}
|
||||||
|
HashAlgo=buffer[offset];
|
||||||
|
offset++;
|
||||||
|
if(HashAlgo != 0){
|
||||||
|
err+=QObject::trUtf8("Nicht unterstützter Hash-Algorithmus");
|
||||||
|
return false;}
|
||||||
|
*/
|
|
@ -0,0 +1,32 @@
|
||||||
|
/***************************************************************************
|
||||||
|
* Copyright (C) 2005 by Tarek Saidi *
|
||||||
|
* mail@tarek-saidi.de *
|
||||||
|
* *
|
||||||
|
* This program is free software; you can redistribute it and/or modify *
|
||||||
|
* it under the terms of the GNU General Public License as published by *
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or *
|
||||||
|
* (at your option) any later version. *
|
||||||
|
* *
|
||||||
|
* 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, write to the *
|
||||||
|
* Free Software Foundation, Inc., *
|
||||||
|
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
|
||||||
|
***************************************************************************/
|
||||||
|
#ifndef _IMPORT_KWALLET_H_
|
||||||
|
#define _IMPORT_KWALLET_H_
|
||||||
|
#include <qstring.h>
|
||||||
|
#include "PwManager.h"
|
||||||
|
|
||||||
|
class Import_KWalletXml{
|
||||||
|
public:
|
||||||
|
bool importFile(QString FileName,PwDatabase* db,QString& err);
|
||||||
|
private:
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
|
@ -0,0 +1,165 @@
|
||||||
|
/***************************************************************************
|
||||||
|
* Copyright (C) 2005 by Tarek Saidi *
|
||||||
|
* mail@tarek-saidi.de *
|
||||||
|
* *
|
||||||
|
* This program is free software; you can redistribute it and/or modify *
|
||||||
|
* it under the terms of the GNU General Public License as published by *
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or *
|
||||||
|
* (at your option) any later version. *
|
||||||
|
* *
|
||||||
|
* 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, write to the *
|
||||||
|
* Free Software Foundation, Inc., *
|
||||||
|
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
|
#include <qobject.h>
|
||||||
|
#include <qfile.h>
|
||||||
|
#include <iostream.h>
|
||||||
|
#include <qdom.h>
|
||||||
|
#include "crypto/blowfish.h"
|
||||||
|
#include "crypto/sha1.h"
|
||||||
|
#include "Import_PwManager.h"
|
||||||
|
|
||||||
|
|
||||||
|
bool Import_PwManager::importFile(QString filename, QString password, PwDatabase* db, QString& err){
|
||||||
|
database=db;
|
||||||
|
QFile file(filename);
|
||||||
|
char* buffer=NULL;
|
||||||
|
int offset=0;
|
||||||
|
int len=0;
|
||||||
|
if(!file.exists()){err+=QObject::trUtf8("Die angegebene Datei existiert nicht."); return false;}
|
||||||
|
if(!file.open(IO_ReadOnly)){err+=QObject::trUtf8("Datei konnte nicht geöffnet werden."); return false;}
|
||||||
|
if(len=file.size()) buffer=new char[len];
|
||||||
|
else {err+=QObject::trUtf8("Datei ist leer"); return false;}
|
||||||
|
file.readBlock(buffer,len);
|
||||||
|
file.close();
|
||||||
|
if(QString::fromAscii(buffer,17)!="PWM_PASSWORD_FILE")
|
||||||
|
{err+=QObject::trUtf8("Keine gültige PwManager-Datei"); return false;}
|
||||||
|
offset+=17;
|
||||||
|
if(buffer[offset]!=0x05)
|
||||||
|
{err+=QObject::trUtf8("Nicht unterstützte Version"); return false;}
|
||||||
|
offset++;
|
||||||
|
if(buffer[offset]!=0x01)
|
||||||
|
{err+=QObject::trUtf8("Nicht unterstützter Hash-Algorithmus"); return false;}
|
||||||
|
offset++;
|
||||||
|
if(buffer[offset]!=0x01)
|
||||||
|
{err+=QObject::trUtf8("Nicht unterstützter Hash-Algorithmus"); return false;}
|
||||||
|
offset++;
|
||||||
|
if(buffer[offset]!=0x01)
|
||||||
|
{err+=QObject::trUtf8("Nicht unterstützter Verschlüsselungs-Algorithmus"); return false;}
|
||||||
|
offset++;
|
||||||
|
if(buffer[offset]==0x00)Compression=0;
|
||||||
|
if(buffer[offset]==0x01)Compression=1;
|
||||||
|
if(buffer[offset]==0x02)Compression=2;
|
||||||
|
///@TODO Compression
|
||||||
|
if(buffer[offset])
|
||||||
|
{err+=QObject::trUtf8("Komprimierte PwManager-Dateien werden nicht unterstützt"); return false;}
|
||||||
|
offset++;
|
||||||
|
if(buffer[offset]==0x00)KeyFlag=true;
|
||||||
|
else KeyFlag=false;
|
||||||
|
offset++;
|
||||||
|
//Reserved Bytes (64)
|
||||||
|
offset+=64;
|
||||||
|
memcpy(KeyHash,buffer+offset,20);
|
||||||
|
offset+=20;
|
||||||
|
memcpy(DataHash,buffer+offset,20);
|
||||||
|
offset+=20;
|
||||||
|
|
||||||
|
Blowfish blowfish;
|
||||||
|
int pwlen=password.length();
|
||||||
|
byte* Key=new byte[pwlen];
|
||||||
|
byte* xml=new byte[len-offset+1];
|
||||||
|
xml[len-offset]=0;
|
||||||
|
memcpy(Key,password.ascii(),pwlen);
|
||||||
|
char* key_hash=new char[20];
|
||||||
|
CSHA1 sha;
|
||||||
|
sha.Update(Key,pwlen);
|
||||||
|
sha.Final();
|
||||||
|
sha.GetHash((unsigned char*)key_hash);
|
||||||
|
if(memcmp(key_hash,KeyHash,20)){
|
||||||
|
delete[] Key; delete [] key_hash; delete [] buffer;
|
||||||
|
err+=QObject::trUtf8("Falsches Passwort");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
delete [] key_hash;
|
||||||
|
blowfish.bf_setkey(Key,password.length());
|
||||||
|
blowfish.bf_decrypt(xml,(byte*)buffer+offset,len-offset);
|
||||||
|
delete [] Key;
|
||||||
|
delete [] buffer;
|
||||||
|
char* content_hash=new char[20];
|
||||||
|
sha.Reset();
|
||||||
|
sha.Update(xml,strlen((char*)xml)-1);
|
||||||
|
sha.Final();
|
||||||
|
sha.GetHash((unsigned char*)content_hash);
|
||||||
|
if(memcmp(content_hash,DataHash,20)){
|
||||||
|
delete [] content_hash; delete [] xml;
|
||||||
|
err+=QObject::trUtf8("Dateiinhalt ungültig (Hash-Test fehlgeschlagen)");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
delete[] content_hash;
|
||||||
|
|
||||||
|
if(!parseXmlContent((char*)xml)){
|
||||||
|
delete [] xml;
|
||||||
|
err+=QObject::trUtf8("Ungültiger XML-Inhalt"); return false;}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool Import_PwManager::parseXmlContent(char* content){
|
||||||
|
QDomDocument db;
|
||||||
|
QString err;
|
||||||
|
int col,line;
|
||||||
|
if(!db.setContent(QString::fromUtf8(content,strlen(content)-1),false,&err,&line,&col)){
|
||||||
|
cout << "Import_PwManager::parseXmlContent():" << endl;
|
||||||
|
cout << (err+" (Line:%1 Column:%2)").arg(line).arg(col) << endl;
|
||||||
|
return false;}
|
||||||
|
QDomElement root=db.documentElement();
|
||||||
|
if(root.tagName()!="P")return false;
|
||||||
|
//Kommentar und Kategorie haben das selbe Tag "c"
|
||||||
|
if(!root.elementsByTagName("c").item(0).isElement())return false;
|
||||||
|
QDomElement groups=root.elementsByTagName("c").item(0).toElement();
|
||||||
|
|
||||||
|
int i=0;
|
||||||
|
while(1){
|
||||||
|
QDomElement CurrGroup;
|
||||||
|
if(!groups.elementsByTagName("c"+QString::number(i)).length())break;
|
||||||
|
if(groups.elementsByTagName("c"+QString::number(i)).length()>1)return false;
|
||||||
|
if(!groups.elementsByTagName("c"+QString::number(i)).item(0).isElement())return false;
|
||||||
|
CurrGroup=groups.elementsByTagName("c"+QString::number(i)).item(0).toElement();
|
||||||
|
if(!CurrGroup.hasAttribute("n"))return false;
|
||||||
|
CGroup* NewGroup=database->addGroup(NULL);
|
||||||
|
NewGroup->Name=CurrGroup.attribute("n");
|
||||||
|
int j=0;
|
||||||
|
while(1){
|
||||||
|
QDomElement CurrEntry;
|
||||||
|
if(!CurrGroup.elementsByTagName("e"+QString::number(j)).length())break;
|
||||||
|
if(CurrGroup.elementsByTagName("e"+QString::number(j)).length()>1)return false;
|
||||||
|
if(!CurrGroup.elementsByTagName("e"+QString::number(j)).item(0).isElement())return false;
|
||||||
|
CurrEntry=CurrGroup.elementsByTagName("e"+QString::number(j)).item(0).toElement();
|
||||||
|
if(!xml_parseEntryAttributes(&CurrEntry,NewGroup))return false;
|
||||||
|
j++;
|
||||||
|
}
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool Import_PwManager::xml_parseEntryAttributes(QDomElement* EntryElement,CGroup* NewGroup){
|
||||||
|
CEntry* e=database->addEntry();
|
||||||
|
e->Title=EntryElement->elementsByTagName("d").item(0).toElement().text();
|
||||||
|
e->UserName=EntryElement->elementsByTagName("n").item(0).toElement().text();
|
||||||
|
QString pw=EntryElement->elementsByTagName("p").item(0).toElement().text();
|
||||||
|
e->Password.setString(pw,true);
|
||||||
|
e->Additional=EntryElement->elementsByTagName("c").item(0).toElement().text();
|
||||||
|
e->Additional=e->Additional.replace("$>--endl--<$","\n");
|
||||||
|
e->URL=EntryElement->elementsByTagName("u").item(0).toElement().text();
|
||||||
|
e->GroupID=NewGroup->ID;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
|
@ -0,0 +1,41 @@
|
||||||
|
/***************************************************************************
|
||||||
|
* Copyright (C) 2005 by Tarek Saidi *
|
||||||
|
* mail@tarek-saidi.de *
|
||||||
|
* *
|
||||||
|
* This program is free software; you can redistribute it and/or modify *
|
||||||
|
* it under the terms of the GNU General Public License as published by *
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or *
|
||||||
|
* (at your option) any later version. *
|
||||||
|
* *
|
||||||
|
* 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, write to the *
|
||||||
|
* Free Software Foundation, Inc., *
|
||||||
|
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
|
#ifndef _IMPORT_PWMANAGER_
|
||||||
|
#define _IMPORT_PWMANAGER_
|
||||||
|
#include <qdom.h>
|
||||||
|
#include <qstring.h>
|
||||||
|
#include "PwManager.h"
|
||||||
|
|
||||||
|
class Import_PwManager{
|
||||||
|
public:
|
||||||
|
bool importFile(QString FileName, QString Password,PwDatabase* db,QString& err);
|
||||||
|
private:
|
||||||
|
bool KeyFlag; // true=Password, false=Chipcard
|
||||||
|
int Compression; // 0=none, 1=gzip, 2=bzip2
|
||||||
|
unsigned char KeyHash[20];
|
||||||
|
unsigned char DataHash[20];
|
||||||
|
PwDatabase* database;
|
||||||
|
|
||||||
|
bool parseXmlContent(char* content);
|
||||||
|
bool xml_parseEntryAttributes(QDomElement* EntryTag,CGroup* parent);
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
|
@ -0,0 +1,488 @@
|
||||||
|
// IniFile.cpp: Implementation of the CIniFile class.
|
||||||
|
// Written by: Adam Clauss
|
||||||
|
// Email: cabadam@houston.rr.com
|
||||||
|
// You may use this class/code as you wish in your programs. Feel free to distribute it, and
|
||||||
|
// email suggested changes to me.
|
||||||
|
//
|
||||||
|
// Rewritten by: Shane Hill
|
||||||
|
// Date: 21/08/2001
|
||||||
|
// Email: Shane.Hill@dsto.defence.gov.au
|
||||||
|
// Reason: Remove dependancy on MFC. Code should compile on any
|
||||||
|
// platform.
|
||||||
|
//////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
|
||||||
|
// C++ Includes
|
||||||
|
#include <iostream>
|
||||||
|
#include <fstream>
|
||||||
|
#include <strstream>
|
||||||
|
|
||||||
|
using namespace std;
|
||||||
|
|
||||||
|
// C Includes
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdarg.h>
|
||||||
|
#include <ctype.h>
|
||||||
|
|
||||||
|
// Local Includes
|
||||||
|
#include "IniReader.h"
|
||||||
|
|
||||||
|
#if defined(WIN32)
|
||||||
|
#define iniEOL endl
|
||||||
|
#else
|
||||||
|
#define iniEOL '\r' << endl
|
||||||
|
#endif
|
||||||
|
|
||||||
|
CIniFile::CIniFile( string const iniPath)
|
||||||
|
{
|
||||||
|
Path( iniPath);
|
||||||
|
caseInsensitive = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CIniFile::ReadFile()
|
||||||
|
{
|
||||||
|
// Normally you would use ifstream, but the SGI CC compiler has
|
||||||
|
// a few bugs with ifstream. So ... fstream used.
|
||||||
|
fstream f;
|
||||||
|
string line;
|
||||||
|
string keyname, valuename, value;
|
||||||
|
string::size_type pLeft, pRight;
|
||||||
|
|
||||||
|
f.open( path.c_str(), ios::in);
|
||||||
|
if ( f.fail())
|
||||||
|
return false;
|
||||||
|
|
||||||
|
while( getline( f, line)) {
|
||||||
|
// To be compatible with Win32, check for existence of '\r'.
|
||||||
|
// Win32 files have the '\r' and Unix files don't at the end of a line.
|
||||||
|
// Note that the '\r' will be written to INI files from
|
||||||
|
// Unix so that the created INI file can be read under Win32
|
||||||
|
// without change.
|
||||||
|
if ( line[line.length() - 1] == '\r')
|
||||||
|
line = line.substr( 0, line.length() - 1);
|
||||||
|
|
||||||
|
if ( line.length()) {
|
||||||
|
// Check that the user hasn't openned a binary file by checking the first
|
||||||
|
// character of each line!
|
||||||
|
if ( !isprint( line[0])) {
|
||||||
|
printf( "Failing on char %d\n", line[0]);
|
||||||
|
f.close();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (( pLeft = line.find_first_of(";#[=")) != string::npos) {
|
||||||
|
switch ( line[pLeft]) {
|
||||||
|
case '[':
|
||||||
|
if ((pRight = line.find_last_of("]")) != string::npos &&
|
||||||
|
pRight > pLeft) {
|
||||||
|
keyname = line.substr( pLeft + 1, pRight - pLeft - 1);
|
||||||
|
AddKeyName( keyname);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case '=':
|
||||||
|
valuename = line.substr( 0, pLeft);
|
||||||
|
value = line.substr( pLeft + 1);
|
||||||
|
SetValue( keyname, valuename, value);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case ';':
|
||||||
|
case '#':
|
||||||
|
if ( !names.size())
|
||||||
|
HeaderComment( line.substr( pLeft + 1));
|
||||||
|
else
|
||||||
|
KeyComment( keyname, line.substr( pLeft + 1));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
f.close();
|
||||||
|
if ( names.size())
|
||||||
|
return true;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CIniFile::WriteFile()
|
||||||
|
{
|
||||||
|
unsigned commentID, keyID, valueID;
|
||||||
|
// Normally you would use ofstream, but the SGI CC compiler has
|
||||||
|
// a few bugs with ofstream. So ... fstream used.
|
||||||
|
fstream f;
|
||||||
|
|
||||||
|
f.open( path.c_str(), ios::out);
|
||||||
|
if ( f.fail())
|
||||||
|
return false;
|
||||||
|
|
||||||
|
// Write header comments.
|
||||||
|
for ( commentID = 0; commentID < comments.size(); ++commentID)
|
||||||
|
f << ';' << comments[commentID] << iniEOL;
|
||||||
|
if ( comments.size())
|
||||||
|
f << iniEOL;
|
||||||
|
|
||||||
|
// Write keys and values.
|
||||||
|
for ( keyID = 0; keyID < keys.size(); ++keyID) {
|
||||||
|
f << '[' << names[keyID] << ']' << iniEOL;
|
||||||
|
// Comments.
|
||||||
|
for ( commentID = 0; commentID < keys[keyID].comments.size(); ++commentID)
|
||||||
|
f << ';' << keys[keyID].comments[commentID] << iniEOL;
|
||||||
|
// Values.
|
||||||
|
for ( valueID = 0; valueID < keys[keyID].names.size(); ++valueID)
|
||||||
|
f << keys[keyID].names[valueID] << '=' << keys[keyID].values[valueID] << iniEOL;
|
||||||
|
f << iniEOL;
|
||||||
|
}
|
||||||
|
f.close();
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
long CIniFile::FindKey( string const keyname) const
|
||||||
|
{
|
||||||
|
for ( unsigned keyID = 0; keyID < names.size(); ++keyID)
|
||||||
|
if ( CheckCase( names[keyID]) == CheckCase( keyname))
|
||||||
|
return long(keyID);
|
||||||
|
return noID;
|
||||||
|
}
|
||||||
|
|
||||||
|
long CIniFile::FindValue( unsigned const keyID, string const valuename) const
|
||||||
|
{
|
||||||
|
if ( !keys.size() || keyID >= keys.size())
|
||||||
|
return noID;
|
||||||
|
|
||||||
|
for ( unsigned valueID = 0; valueID < keys[keyID].names.size(); ++valueID)
|
||||||
|
if ( CheckCase( keys[keyID].names[valueID]) == CheckCase( valuename))
|
||||||
|
return long(valueID);
|
||||||
|
return noID;
|
||||||
|
}
|
||||||
|
|
||||||
|
unsigned CIniFile::AddKeyName( string const keyname)
|
||||||
|
{
|
||||||
|
names.resize( names.size() + 1, keyname);
|
||||||
|
keys.resize( keys.size() + 1);
|
||||||
|
return names.size() - 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
string CIniFile::KeyName( unsigned const keyID) const
|
||||||
|
{
|
||||||
|
if ( keyID < names.size())
|
||||||
|
return names[keyID];
|
||||||
|
else
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
|
unsigned CIniFile::NumValues( unsigned const keyID)
|
||||||
|
{
|
||||||
|
if ( keyID < keys.size())
|
||||||
|
return keys[keyID].names.size();
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
unsigned CIniFile::NumValues( string const keyname)
|
||||||
|
{
|
||||||
|
long keyID = FindKey( keyname);
|
||||||
|
if ( keyID == noID)
|
||||||
|
return 0;
|
||||||
|
return keys[keyID].names.size();
|
||||||
|
}
|
||||||
|
|
||||||
|
string CIniFile::ValueName( unsigned const keyID, unsigned const valueID) const
|
||||||
|
{
|
||||||
|
if ( keyID < keys.size() && valueID < keys[keyID].names.size())
|
||||||
|
return keys[keyID].names[valueID];
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
|
string CIniFile::ValueName( string const keyname, unsigned const valueID) const
|
||||||
|
{
|
||||||
|
long keyID = FindKey( keyname);
|
||||||
|
if ( keyID == noID)
|
||||||
|
return "";
|
||||||
|
return ValueName( keyID, valueID);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CIniFile::SetValue( unsigned const keyID, unsigned const valueID, string const value)
|
||||||
|
{
|
||||||
|
if ( keyID < keys.size() && valueID < keys[keyID].names.size())
|
||||||
|
keys[keyID].values[valueID] = value;
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CIniFile::SetValue( string const keyname, string const valuename, string const value, bool const create)
|
||||||
|
{
|
||||||
|
long keyID = FindKey( keyname);
|
||||||
|
if ( keyID == noID) {
|
||||||
|
if ( create)
|
||||||
|
keyID = long( AddKeyName( keyname));
|
||||||
|
else
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
long valueID = FindValue( unsigned(keyID), valuename);
|
||||||
|
if ( valueID == noID) {
|
||||||
|
if ( !create)
|
||||||
|
return false;
|
||||||
|
keys[keyID].names.resize( keys[keyID].names.size() + 1, valuename);
|
||||||
|
keys[keyID].values.resize( keys[keyID].values.size() + 1, value);
|
||||||
|
} else
|
||||||
|
keys[keyID].values[valueID] = value;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CIniFile::SetValueI( string const keyname, string const valuename, int const value, bool const create)
|
||||||
|
{
|
||||||
|
char svalue[MAX_VALUEDATA];
|
||||||
|
|
||||||
|
sprintf( svalue, "%d", value);
|
||||||
|
return SetValue( keyname, valuename, svalue);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CIniFile::SetValueF( string const keyname, string const valuename, double const value, bool const create)
|
||||||
|
{
|
||||||
|
char svalue[MAX_VALUEDATA];
|
||||||
|
|
||||||
|
sprintf( svalue, "%f", value);
|
||||||
|
return SetValue( keyname, valuename, svalue);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CIniFile::SetValueV( string const keyname, string const valuename, char *format, ...)
|
||||||
|
{
|
||||||
|
va_list args;
|
||||||
|
char value[MAX_VALUEDATA];
|
||||||
|
|
||||||
|
va_start( args, format);
|
||||||
|
vsprintf( value, format, args);
|
||||||
|
va_end( args);
|
||||||
|
return SetValue( keyname, valuename, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
string CIniFile::GetValue( unsigned const keyID, unsigned const valueID, string const defValue) const
|
||||||
|
{
|
||||||
|
if ( keyID < keys.size() && valueID < keys[keyID].names.size())
|
||||||
|
return keys[keyID].values[valueID];
|
||||||
|
return defValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
string CIniFile::GetValue( string const keyname, string const valuename, string const defValue) const
|
||||||
|
{
|
||||||
|
long keyID = FindKey( keyname);
|
||||||
|
if ( keyID == noID)
|
||||||
|
return defValue;
|
||||||
|
|
||||||
|
long valueID = FindValue( unsigned(keyID), valuename);
|
||||||
|
if ( valueID == noID)
|
||||||
|
return defValue;
|
||||||
|
|
||||||
|
return keys[keyID].values[valueID];
|
||||||
|
}
|
||||||
|
|
||||||
|
int CIniFile::GetValueI(string const keyname, string const valuename, int const defValue) const
|
||||||
|
{
|
||||||
|
char svalue[MAX_VALUEDATA];
|
||||||
|
|
||||||
|
sprintf( svalue, "%d", defValue);
|
||||||
|
return atoi( GetValue( keyname, valuename, svalue).c_str());
|
||||||
|
}
|
||||||
|
|
||||||
|
double CIniFile::GetValueF(string const keyname, string const valuename, double const defValue) const
|
||||||
|
{
|
||||||
|
char svalue[MAX_VALUEDATA];
|
||||||
|
|
||||||
|
sprintf( svalue, "%f", defValue);
|
||||||
|
return atof( GetValue( keyname, valuename, svalue).c_str());
|
||||||
|
}
|
||||||
|
|
||||||
|
// 16 variables may be a bit of over kill, but hey, it's only code.
|
||||||
|
unsigned CIniFile::GetValueV( string const keyname, string const valuename, char *format,
|
||||||
|
void *v1, void *v2, void *v3, void *v4,
|
||||||
|
void *v5, void *v6, void *v7, void *v8,
|
||||||
|
void *v9, void *v10, void *v11, void *v12,
|
||||||
|
void *v13, void *v14, void *v15, void *v16)
|
||||||
|
{
|
||||||
|
string value;
|
||||||
|
// va_list args;
|
||||||
|
unsigned nVals;
|
||||||
|
|
||||||
|
|
||||||
|
value = GetValue( keyname, valuename);
|
||||||
|
if ( !value.length())
|
||||||
|
return false;
|
||||||
|
// Why is there not vsscanf() function. Linux man pages say that there is
|
||||||
|
// but no compiler I've seen has it defined. Bummer!
|
||||||
|
//
|
||||||
|
// va_start( args, format);
|
||||||
|
// nVals = vsscanf( value.c_str(), format, args);
|
||||||
|
// va_end( args);
|
||||||
|
|
||||||
|
nVals = sscanf( value.c_str(), format,
|
||||||
|
v1, v2, v3, v4, v5, v6, v7, v8,
|
||||||
|
v9, v10, v11, v12, v13, v14, v15, v16);
|
||||||
|
|
||||||
|
return nVals;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CIniFile::DeleteValue( string const keyname, string const valuename)
|
||||||
|
{
|
||||||
|
long keyID = FindKey( keyname);
|
||||||
|
if ( keyID == noID)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
long valueID = FindValue( unsigned(keyID), valuename);
|
||||||
|
if ( valueID == noID)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
// This looks strange, but is neccessary.
|
||||||
|
vector<string>::iterator npos = keys[keyID].names.begin() + valueID;
|
||||||
|
vector<string>::iterator vpos = keys[keyID].values.begin() + valueID;
|
||||||
|
keys[keyID].names.erase( npos, npos + 1);
|
||||||
|
keys[keyID].values.erase( vpos, vpos + 1);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CIniFile::DeleteKey( string const keyname)
|
||||||
|
{
|
||||||
|
long keyID = FindKey( keyname);
|
||||||
|
if ( keyID == noID)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
// Now hopefully this destroys the vector lists within keys.
|
||||||
|
// Looking at <vector> source, this should be the case using the destructor.
|
||||||
|
// If not, I may have to do it explicitly. Memory leak check should tell.
|
||||||
|
// memleak_test.cpp shows that the following not required.
|
||||||
|
//keys[keyID].names.clear();
|
||||||
|
//keys[keyID].values.clear();
|
||||||
|
|
||||||
|
vector<string>::iterator npos = names.begin() + keyID;
|
||||||
|
vector<key>::iterator kpos = keys.begin() + keyID;
|
||||||
|
names.erase( npos, npos + 1);
|
||||||
|
keys.erase( kpos, kpos + 1);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CIniFile::Erase()
|
||||||
|
{
|
||||||
|
// This loop not needed. The vector<> destructor seems to do
|
||||||
|
// all the work itself. memleak_test.cpp shows this.
|
||||||
|
//for ( unsigned i = 0; i < keys.size(); ++i) {
|
||||||
|
// keys[i].names.clear();
|
||||||
|
// keys[i].values.clear();
|
||||||
|
//}
|
||||||
|
names.clear();
|
||||||
|
keys.clear();
|
||||||
|
comments.clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
void CIniFile::HeaderComment( string const comment)
|
||||||
|
{
|
||||||
|
comments.resize( comments.size() + 1, comment);
|
||||||
|
}
|
||||||
|
|
||||||
|
string CIniFile::HeaderComment( unsigned const commentID) const
|
||||||
|
{
|
||||||
|
if ( commentID < comments.size())
|
||||||
|
return comments[commentID];
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CIniFile::DeleteHeaderComment( unsigned commentID)
|
||||||
|
{
|
||||||
|
if ( commentID < comments.size()) {
|
||||||
|
vector<string>::iterator cpos = comments.begin() + commentID;
|
||||||
|
comments.erase( cpos, cpos + 1);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
unsigned CIniFile::NumKeyComments( unsigned const keyID) const
|
||||||
|
{
|
||||||
|
if ( keyID < keys.size())
|
||||||
|
return keys[keyID].comments.size();
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
unsigned CIniFile::NumKeyComments( string const keyname) const
|
||||||
|
{
|
||||||
|
long keyID = FindKey( keyname);
|
||||||
|
if ( keyID == noID)
|
||||||
|
return 0;
|
||||||
|
return keys[keyID].comments.size();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CIniFile::KeyComment( unsigned const keyID, string const comment)
|
||||||
|
{
|
||||||
|
if ( keyID < keys.size()) {
|
||||||
|
keys[keyID].comments.resize( keys[keyID].comments.size() + 1, comment);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CIniFile::KeyComment( string const keyname, string const comment)
|
||||||
|
{
|
||||||
|
long keyID = FindKey( keyname);
|
||||||
|
if ( keyID == noID)
|
||||||
|
return false;
|
||||||
|
return KeyComment( unsigned(keyID), comment);
|
||||||
|
}
|
||||||
|
|
||||||
|
string CIniFile::KeyComment( unsigned const keyID, unsigned const commentID) const
|
||||||
|
{
|
||||||
|
if ( keyID < keys.size() && commentID < keys[keyID].comments.size())
|
||||||
|
return keys[keyID].comments[commentID];
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
|
string CIniFile::KeyComment( string const keyname, unsigned const commentID) const
|
||||||
|
{
|
||||||
|
long keyID = FindKey( keyname);
|
||||||
|
if ( keyID == noID)
|
||||||
|
return "";
|
||||||
|
return KeyComment( unsigned(keyID), commentID);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CIniFile::DeleteKeyComment( unsigned const keyID, unsigned const commentID)
|
||||||
|
{
|
||||||
|
if ( keyID < keys.size() && commentID < keys[keyID].comments.size()) {
|
||||||
|
vector<string>::iterator cpos = keys[keyID].comments.begin() + commentID;
|
||||||
|
keys[keyID].comments.erase( cpos, cpos + 1);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CIniFile::DeleteKeyComment( string const keyname, unsigned const commentID)
|
||||||
|
{
|
||||||
|
long keyID = FindKey( keyname);
|
||||||
|
if ( keyID == noID)
|
||||||
|
return false;
|
||||||
|
return DeleteKeyComment( unsigned(keyID), commentID);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CIniFile::DeleteKeyComments( unsigned const keyID)
|
||||||
|
{
|
||||||
|
if ( keyID < keys.size()) {
|
||||||
|
keys[keyID].comments.clear();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CIniFile::DeleteKeyComments( string const keyname)
|
||||||
|
{
|
||||||
|
long keyID = FindKey( keyname);
|
||||||
|
if ( keyID == noID)
|
||||||
|
return false;
|
||||||
|
return DeleteKeyComments( unsigned(keyID));
|
||||||
|
}
|
||||||
|
|
||||||
|
string CIniFile::CheckCase( string s) const
|
||||||
|
{
|
||||||
|
if ( caseInsensitive)
|
||||||
|
for ( string::size_type i = 0; i < s.length(); ++i)
|
||||||
|
s[i] = tolower(s[i]);
|
||||||
|
return s;
|
||||||
|
}
|
|
@ -0,0 +1,180 @@
|
||||||
|
// IniFile.cpp: Implementation of the CIniFile class.
|
||||||
|
// Written by: Adam Clauss
|
||||||
|
// Email: cabadam@tamu.edu
|
||||||
|
// You may use this class/code as you wish in your programs. Feel free to distribute it, and
|
||||||
|
// email suggested changes to me.
|
||||||
|
//
|
||||||
|
// Rewritten by: Shane Hill
|
||||||
|
// Date: 21/08/2001
|
||||||
|
// Email: Shane.Hill@dsto.defence.gov.au
|
||||||
|
// Reason: Remove dependancy on MFC. Code should compile on any
|
||||||
|
// platform. Tested on Windows/Linux/Irix
|
||||||
|
//////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
#ifndef CIniFile_H
|
||||||
|
#define CIniFile_H
|
||||||
|
using namespace std;
|
||||||
|
// C++ Includes
|
||||||
|
#include <string>
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
|
// C Includes
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
#define MAX_KEYNAME 128
|
||||||
|
#define MAX_VALUENAME 128
|
||||||
|
#define MAX_VALUEDATA 2048
|
||||||
|
|
||||||
|
class CIniFile
|
||||||
|
{
|
||||||
|
private:
|
||||||
|
bool caseInsensitive;
|
||||||
|
string path;
|
||||||
|
struct key {
|
||||||
|
vector<string> names;
|
||||||
|
vector<string> values;
|
||||||
|
vector<string> comments;
|
||||||
|
};
|
||||||
|
vector<key> keys;
|
||||||
|
vector<string> names;
|
||||||
|
vector<string> comments;
|
||||||
|
string CheckCase( string s) const;
|
||||||
|
|
||||||
|
public:
|
||||||
|
enum errors{ noID = -1};
|
||||||
|
CIniFile( string const iniPath = "");
|
||||||
|
virtual ~CIniFile() {}
|
||||||
|
|
||||||
|
// Sets whether or not keynames and valuenames should be case sensitive.
|
||||||
|
// The default is case insensitive.
|
||||||
|
void CaseSensitive() {caseInsensitive = false;}
|
||||||
|
void CaseInsensitive() {caseInsensitive = true;}
|
||||||
|
|
||||||
|
// Sets path of ini file to read and write from.
|
||||||
|
void Path(string const newPath) {path = newPath;}
|
||||||
|
string Path() const {return path;}
|
||||||
|
void SetPath(string const newPath) {Path( newPath);}
|
||||||
|
|
||||||
|
// Reads ini file specified using path.
|
||||||
|
// Returns true if successful, false otherwise.
|
||||||
|
bool ReadFile();
|
||||||
|
|
||||||
|
// Writes data stored in class to ini file.
|
||||||
|
bool WriteFile();
|
||||||
|
|
||||||
|
// Deletes all stored ini data.
|
||||||
|
void Erase();
|
||||||
|
void Clear() {Erase();}
|
||||||
|
void Reset() {Erase();}
|
||||||
|
|
||||||
|
// Returns index of specified key, or noID if not found.
|
||||||
|
long FindKey( string const keyname) const;
|
||||||
|
|
||||||
|
// Returns index of specified value, in the specified key, or noID if not found.
|
||||||
|
long FindValue( unsigned const keyID, string const valuename) const;
|
||||||
|
|
||||||
|
// Returns number of keys currently in the ini.
|
||||||
|
unsigned NumKeys() const {return names.size();}
|
||||||
|
unsigned GetNumKeys() const {return NumKeys();}
|
||||||
|
|
||||||
|
// Add a key name.
|
||||||
|
unsigned AddKeyName( string const keyname);
|
||||||
|
|
||||||
|
// Returns key names by index.
|
||||||
|
string KeyName( unsigned const keyID) const;
|
||||||
|
string GetKeyName( unsigned const keyID) const {return KeyName(keyID);}
|
||||||
|
|
||||||
|
// Returns number of values stored for specified key.
|
||||||
|
unsigned NumValues( unsigned const keyID);
|
||||||
|
unsigned GetNumValues( unsigned const keyID) {return NumValues( keyID);}
|
||||||
|
unsigned NumValues( string const keyname);
|
||||||
|
unsigned GetNumValues( string const keyname) {return NumValues( keyname);}
|
||||||
|
|
||||||
|
// Returns value name by index for a given keyname or keyID.
|
||||||
|
string ValueName( unsigned const keyID, unsigned const valueID) const;
|
||||||
|
string GetValueName( unsigned const keyID, unsigned const valueID) const {
|
||||||
|
return ValueName( keyID, valueID);
|
||||||
|
}
|
||||||
|
string ValueName( string const keyname, unsigned const valueID) const;
|
||||||
|
string GetValueName( string const keyname, unsigned const valueID) const {
|
||||||
|
return ValueName( keyname, valueID);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Gets value of [keyname] valuename =.
|
||||||
|
// Overloaded to return string, int, and double.
|
||||||
|
// Returns defValue if key/value not found.
|
||||||
|
string GetValue( unsigned const keyID, unsigned const valueID, string const defValue = "") const;
|
||||||
|
string GetValue(string const keyname, string const valuename, string const defValue = "") const;
|
||||||
|
int GetValueI(string const keyname, string const valuename, int const defValue = 0) const;
|
||||||
|
bool GetValueB(string const keyname, string const valuename, bool const defValue = false) const {
|
||||||
|
return bool( GetValueI( keyname, valuename, int( defValue)));
|
||||||
|
}
|
||||||
|
double GetValueF(string const keyname, string const valuename, double const defValue = 0.0) const;
|
||||||
|
// This is a variable length formatted GetValue routine. All these voids
|
||||||
|
// are required because there is no vsscanf() like there is a vsprintf().
|
||||||
|
// Only a maximum of 8 variable can be read.
|
||||||
|
unsigned GetValueV( string const keyname, string const valuename, char *format,
|
||||||
|
void *v1 = 0, void *v2 = 0, void *v3 = 0, void *v4 = 0,
|
||||||
|
void *v5 = 0, void *v6 = 0, void *v7 = 0, void *v8 = 0,
|
||||||
|
void *v9 = 0, void *v10 = 0, void *v11 = 0, void *v12 = 0,
|
||||||
|
void *v13 = 0, void *v14 = 0, void *v15 = 0, void *v16 = 0);
|
||||||
|
|
||||||
|
// Sets value of [keyname] valuename =.
|
||||||
|
// Specify the optional paramter as false (0) if you do not want it to create
|
||||||
|
// the key if it doesn't exist. Returns true if data entered, false otherwise.
|
||||||
|
// Overloaded to accept string, int, and double.
|
||||||
|
bool SetValue( unsigned const keyID, unsigned const valueID, string const value);
|
||||||
|
bool SetValue( string const keyname, string const valuename, string const value, bool const create = true);
|
||||||
|
bool SetValueI( string const keyname, string const valuename, int const value, bool const create = true);
|
||||||
|
bool SetValueB( string const keyname, string const valuename, bool const value, bool const create = true) {
|
||||||
|
return SetValueI( keyname, valuename, int(value), create);
|
||||||
|
}
|
||||||
|
bool SetValueF( string const keyname, string const valuename, double const value, bool const create = true);
|
||||||
|
bool SetValueV( string const keyname, string const valuename, char *format, ...);
|
||||||
|
|
||||||
|
// Deletes specified value.
|
||||||
|
// Returns true if value existed and deleted, false otherwise.
|
||||||
|
bool DeleteValue( string const keyname, string const valuename);
|
||||||
|
|
||||||
|
// Deletes specified key and all values contained within.
|
||||||
|
// Returns true if key existed and deleted, false otherwise.
|
||||||
|
bool DeleteKey(string keyname);
|
||||||
|
|
||||||
|
// Header comment functions.
|
||||||
|
// Header comments are those comments before the first key.
|
||||||
|
//
|
||||||
|
// Number of header comments.
|
||||||
|
unsigned NumHeaderComments() {return comments.size();}
|
||||||
|
// Add a header comment.
|
||||||
|
void HeaderComment( string const comment);
|
||||||
|
// Return a header comment.
|
||||||
|
string HeaderComment( unsigned const commentID) const;
|
||||||
|
// Delete a header comment.
|
||||||
|
bool DeleteHeaderComment( unsigned commentID);
|
||||||
|
// Delete all header comments.
|
||||||
|
void DeleteHeaderComments() {comments.clear();}
|
||||||
|
|
||||||
|
// Key comment functions.
|
||||||
|
// Key comments are those comments within a key. Any comments
|
||||||
|
// defined within value names will be added to this list. Therefore,
|
||||||
|
// these comments will be moved to the top of the key definition when
|
||||||
|
// the CIniFile::WriteFile() is called.
|
||||||
|
//
|
||||||
|
// Number of key comments.
|
||||||
|
unsigned NumKeyComments( unsigned const keyID) const;
|
||||||
|
unsigned NumKeyComments( string const keyname) const;
|
||||||
|
// Add a key comment.
|
||||||
|
bool KeyComment( unsigned const keyID, string const comment);
|
||||||
|
bool KeyComment( string const keyname, string const comment);
|
||||||
|
// Return a key comment.
|
||||||
|
string KeyComment( unsigned const keyID, unsigned const commentID) const;
|
||||||
|
string KeyComment( string const keyname, unsigned const commentID) const;
|
||||||
|
// Delete a key comment.
|
||||||
|
bool DeleteKeyComment( unsigned const keyID, unsigned const commentID);
|
||||||
|
bool DeleteKeyComment( string const keyname, unsigned const commentID);
|
||||||
|
// Delete all comments for a key.
|
||||||
|
bool DeleteKeyComments( unsigned const keyID);
|
||||||
|
bool DeleteKeyComments( string const keyname);
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
|
@ -0,0 +1,175 @@
|
||||||
|
/***************************************************************************
|
||||||
|
* Copyright (C) 2005 by Tarek Saidi *
|
||||||
|
* mail@tarek-saidi.de *
|
||||||
|
* *
|
||||||
|
* This program is free software; you can redistribute it and/or modify *
|
||||||
|
* it under the terms of the GNU General Public License as published by *
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or *
|
||||||
|
* (at your option) any later version. *
|
||||||
|
* *
|
||||||
|
* 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, write to the *
|
||||||
|
* Free Software Foundation, Inc., *
|
||||||
|
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
|
||||||
|
***************************************************************************/
|
||||||
|
#include "PwmTime.h"
|
||||||
|
|
||||||
|
|
||||||
|
void CPwmTime::Set(unsigned char* pBytes){
|
||||||
|
UINT32 dw1, dw2, dw3, dw4, dw5;
|
||||||
|
dw1 = (UINT32)pBytes[0]; dw2 = (UINT32)pBytes[1]; dw3 = (UINT32)pBytes[2];
|
||||||
|
dw4 = (UINT32)pBytes[3]; dw5 = (UINT32)pBytes[4];
|
||||||
|
// Unpack 5 byte structure to date and time
|
||||||
|
///@FIXME nicht Endian-sicher
|
||||||
|
Year = (dw1 << 6) | (dw2 >> 2);
|
||||||
|
Month = ((dw2 & 0x00000003) << 2) | (dw3 >> 6);
|
||||||
|
Day = (dw3 >> 1) & 0x0000001F;
|
||||||
|
Hour = ((dw3 & 0x00000001) << 4) | (dw4 >> 4);
|
||||||
|
Minute = ((dw4 & 0x0000000F) << 2) | (dw5 >> 6);
|
||||||
|
Second = dw5 & 0x0000003F;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CPwmTime::GetPackedTime(unsigned char* pBytes){
|
||||||
|
///@FIXME nicht Endian-sicher
|
||||||
|
pBytes[0] = (UINT8)(((UINT32)Year >> 6) & 0x0000003F);
|
||||||
|
pBytes[1] = (UINT8)((((UINT32)Year & 0x0000003F) << 2) | (((UINT32)Month >> 2) & 0x00000003));
|
||||||
|
pBytes[2] = (UINT8)((((UINT32)Month & 0x00000003) << 6) | (((UINT32)Day & 0x0000001F) << 1) | (((UINT32)Hour >> 4) & 0x00000001));
|
||||||
|
pBytes[3] = (UINT8)((((UINT32)Hour & 0x0000000F) << 4) | (((UINT32)Minute >> 2) & 0x0000000F));
|
||||||
|
pBytes[4] = (UINT8)((((UINT32)Minute & 0x00000003) << 6) | ((UINT32)Second & 0x0000003F));
|
||||||
|
}
|
||||||
|
|
||||||
|
QString CPwmTime::GetString(UINT16 format){
|
||||||
|
QString str;
|
||||||
|
switch(format){
|
||||||
|
case 0:
|
||||||
|
//DD.MM.YYYY HH:MM:SS
|
||||||
|
str=(QString)"%1.%2.%3 %4:%5:%6";
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 1:
|
||||||
|
//MM/DD/YYYY HH:MM:SS
|
||||||
|
str=(QString)"%2/%1/%3 %4:%5:%6";
|
||||||
|
break;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
if(Day<10){
|
||||||
|
str=str.arg(((QString)"0"+QString::number(Day)));
|
||||||
|
}else{
|
||||||
|
str=str.arg(Day);}
|
||||||
|
|
||||||
|
if(Month<10){
|
||||||
|
str=str.arg(((QString)"0"+QString::number(Month)));
|
||||||
|
}else{
|
||||||
|
str=str.arg(Month);}
|
||||||
|
|
||||||
|
str=str.arg(Year);
|
||||||
|
|
||||||
|
if(Hour<10){
|
||||||
|
str=str.arg(((QString)"0"+QString::number(Hour)));
|
||||||
|
}else{
|
||||||
|
str=str.arg(Hour);}
|
||||||
|
|
||||||
|
if(Minute<10){
|
||||||
|
str=str.arg(((QString)"0"+QString::number(Minute)));
|
||||||
|
}else{
|
||||||
|
str=str.arg(Minute);}
|
||||||
|
|
||||||
|
if(Second<10){
|
||||||
|
str=str.arg(((QString)"0"+QString::number(Second)));
|
||||||
|
}else{
|
||||||
|
str=str.arg(Second);}
|
||||||
|
|
||||||
|
return str;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CPwmTime::Set(UINT8 iDay,UINT8 iMonth,UINT16 iYear,UINT8 iHour,UINT8 iMinute,UINT8 iSecond){
|
||||||
|
Day=iDay;
|
||||||
|
Month=iMonth;
|
||||||
|
Year=iYear;
|
||||||
|
Hour=iHour;
|
||||||
|
Minute=iMinute;
|
||||||
|
Second=iSecond;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CPwmTime::IsValidDate(QString& s){
|
||||||
|
|
||||||
|
if(s.length()>10)return false;
|
||||||
|
|
||||||
|
int count=0;
|
||||||
|
for(int i=0;i<s.length();i++){
|
||||||
|
if(s[i]=='.')count++;
|
||||||
|
}
|
||||||
|
if(count!=2)return false;
|
||||||
|
bool conv_error[3];
|
||||||
|
int day=s.section(".",0,0).toInt(&conv_error[0]);
|
||||||
|
int month=s.section(".",1,1).toInt(&conv_error[1]);
|
||||||
|
int year=s.section(".",2,2).toInt(&conv_error[2]);
|
||||||
|
if(conv_error[0]==false || conv_error[1]==false || conv_error[2]==false)return false;
|
||||||
|
if(day>31 || day<1 || month>12 || month<1 || year<0 || year>2999)return false;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CPwmTime::IsValidTime(QString& s){
|
||||||
|
|
||||||
|
if(s.length()>8)return false;
|
||||||
|
|
||||||
|
int count=0;
|
||||||
|
for(int i=0;i<s.length();i++){
|
||||||
|
if(s[i]==':')count++;
|
||||||
|
}
|
||||||
|
if(count!=2)return false;
|
||||||
|
bool conv_error[3];
|
||||||
|
int hour=s.section(":",0,0).toInt(&conv_error[0]);
|
||||||
|
int minute=s.section(":",1,1).toInt(&conv_error[1]);
|
||||||
|
int second=s.section(":",2,2).toInt(&conv_error[2]);
|
||||||
|
if(conv_error[0]==false || conv_error[1]==false || conv_error[2]==false)return false;
|
||||||
|
if(hour>23 || hour<0 || minute>59 || minute<0 || second>59 || second<0)return false;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CPwmTime::SetDate(QString s){
|
||||||
|
if(IsValidDate(s)==false)return false;
|
||||||
|
Day=s.section(".",0,0).toInt();
|
||||||
|
Month=s.section(".",1,1).toInt();
|
||||||
|
Year=s.section(".",2,2).toInt();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CPwmTime::SetTime(QString s){
|
||||||
|
if(IsValidTime(s)==false)return false;
|
||||||
|
Hour=s.section(":",0,0).toInt();
|
||||||
|
Minute=s.section(":",1,1).toInt();
|
||||||
|
Second=s.section(":",2,2).toInt();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CPwmTime::SetToNow(){
|
||||||
|
time_t curTime=time(NULL);
|
||||||
|
tm* current=localtime(&curTime);
|
||||||
|
Year=current->tm_year+1900;
|
||||||
|
Month=current->tm_mon;
|
||||||
|
Day=current->tm_mday;
|
||||||
|
Hour=current->tm_hour;
|
||||||
|
Minute=current->tm_min;
|
||||||
|
Second=current->tm_sec;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CPwmTime::operator==(const CPwmTime& t){
|
||||||
|
if( Year==t.Year
|
||||||
|
&& Month==t.Month
|
||||||
|
&& Day==t.Day
|
||||||
|
&& Hour==t.Hour
|
||||||
|
&& Minute==t.Minute
|
||||||
|
&& Second==t.Second) return true;
|
||||||
|
else return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CPwmTime::operator!=(const CPwmTime& t){
|
||||||
|
return !(*this==t);
|
||||||
|
}
|
|
@ -0,0 +1,51 @@
|
||||||
|
/***************************************************************************
|
||||||
|
* Copyright (C) 2005 by Tarek Saidi *
|
||||||
|
* mail@tarek-saidi.de *
|
||||||
|
* *
|
||||||
|
* This program is free software; you can redistribute it and/or modify *
|
||||||
|
* it under the terms of the GNU General Public License as published by *
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or *
|
||||||
|
* (at your option) any later version. *
|
||||||
|
* *
|
||||||
|
* 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, write to the *
|
||||||
|
* Free Software Foundation, Inc., *
|
||||||
|
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
|
||||||
|
***************************************************************************/
|
||||||
|
#ifndef _PWMTIME_H_
|
||||||
|
#define _PWMTIME_H_
|
||||||
|
|
||||||
|
#include <qglobal.h>
|
||||||
|
#include <qstring.h>
|
||||||
|
class CPwmTime;
|
||||||
|
class CPwmTime{
|
||||||
|
public:
|
||||||
|
UINT16 Year;
|
||||||
|
UINT8 Month;
|
||||||
|
UINT8 Day;
|
||||||
|
UINT8 Hour;
|
||||||
|
UINT8 Minute;
|
||||||
|
UINT8 Second;
|
||||||
|
|
||||||
|
QString GetString(UINT16 format);
|
||||||
|
void Set(UINT8,UINT8,UINT16,UINT8,UINT8,UINT8);
|
||||||
|
void Set(unsigned char* packedTime);
|
||||||
|
void GetPackedTime(unsigned char* dst);
|
||||||
|
static bool IsValidDate(QString& string);
|
||||||
|
static bool IsValidTime(QString& string);
|
||||||
|
bool SetDate(QString string);
|
||||||
|
bool SetTime(QString string);
|
||||||
|
void SetToNow();
|
||||||
|
bool operator==(const CPwmTime& t);
|
||||||
|
bool operator!=(const CPwmTime& t);
|
||||||
|
// bool operator>(const CPwmTime& t);
|
||||||
|
// bool operator<(const CPwmTime& t);
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
|
@ -0,0 +1,105 @@
|
||||||
|
/***************************************************************************
|
||||||
|
* Copyright (C) 2005 by Tarek Saidi *
|
||||||
|
* tarek@linux *
|
||||||
|
* *
|
||||||
|
* This program is free software; you can redistribute it and/or modify *
|
||||||
|
* it under the terms of the GNU General Public License as published by *
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or *
|
||||||
|
* (at your option) any later version. *
|
||||||
|
* *
|
||||||
|
* 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, write to the *
|
||||||
|
* Free Software Foundation, Inc., *
|
||||||
|
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
|
#include "SecString.h"
|
||||||
|
#include <qmessagebox.h>
|
||||||
|
#include <iostream.h>
|
||||||
|
#include "random.h"
|
||||||
|
|
||||||
|
UINT8 SecString::Key[32]={0};
|
||||||
|
|
||||||
|
SecString::SecString(){
|
||||||
|
data=NULL;
|
||||||
|
len=0;
|
||||||
|
cryptlen=0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
SecString::~SecString(){
|
||||||
|
//if(data)delete [] data; ///@FIXME zerschießt den Stack, aber warum???
|
||||||
|
overwrite(plaintext);
|
||||||
|
}
|
||||||
|
|
||||||
|
void SecString::getString(QString & str){
|
||||||
|
if(data){
|
||||||
|
Rijndael aes;
|
||||||
|
int r=aes.init(Rijndael::CBC, Rijndael::Decrypt,Key,Rijndael::Key32Bytes);
|
||||||
|
if(r){ cout << "AES error, code " << r << endl;
|
||||||
|
exit(-1);}
|
||||||
|
char* out=new char[len];
|
||||||
|
r=aes.padDecrypt((unsigned char*)data,cryptlen,(unsigned char*)out);
|
||||||
|
if(r!=len){ cout << "AES error in SecString::getString(), r!=length, r=" << r << endl;
|
||||||
|
exit(-1);}
|
||||||
|
str=QString::fromUtf8(out,len);
|
||||||
|
overwrite(out,len);
|
||||||
|
delete [] out;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
QString& SecString::getString(){
|
||||||
|
getString(plaintext);
|
||||||
|
return plaintext;
|
||||||
|
}
|
||||||
|
|
||||||
|
void SecString::delRef(){
|
||||||
|
overwrite(plaintext);
|
||||||
|
}
|
||||||
|
|
||||||
|
void SecString::setString(QString& str,bool DelSrc){
|
||||||
|
Rijndael aes;
|
||||||
|
int r=aes.init(Rijndael::CBC, Rijndael::Encrypt,Key,Rijndael::Key32Bytes);
|
||||||
|
if(r){ cout << "AES error, code " << r << endl;
|
||||||
|
exit(-1);}
|
||||||
|
int il=str.length();
|
||||||
|
char* input=new char[il];
|
||||||
|
char* output=new char[il+16];
|
||||||
|
memcpy(input,str.utf8(),il);
|
||||||
|
r=aes.padEncrypt((unsigned char*)input,il,(unsigned char*)output);
|
||||||
|
if(r<0){ cout << "AES error, code " << r << endl;
|
||||||
|
exit(-1);}
|
||||||
|
cryptlen=r;
|
||||||
|
len=il;
|
||||||
|
if(data)delete [] data;
|
||||||
|
data=output;
|
||||||
|
overwrite(input,il);
|
||||||
|
delete [] input;
|
||||||
|
if(DelSrc)overwrite(str);
|
||||||
|
}
|
||||||
|
|
||||||
|
void SecString::overwrite(char* str,int strlen){
|
||||||
|
if(strlen==0 || str==NULL)return;
|
||||||
|
getRandomBytes(str,strlen,1,false);
|
||||||
|
}
|
||||||
|
|
||||||
|
void SecString::overwrite(QString &str){
|
||||||
|
if(str.length()==0)return;
|
||||||
|
char* tmp=new char[str.length()];
|
||||||
|
getRandomBytes(tmp,str.length(),1,false);
|
||||||
|
str=tmp;
|
||||||
|
delete [] tmp;
|
||||||
|
}
|
||||||
|
|
||||||
|
int SecString::length(){
|
||||||
|
return len;
|
||||||
|
}
|
||||||
|
|
||||||
|
void SecString::generateSessionKey(){
|
||||||
|
getRandomBytes(Key,32,1,false);
|
||||||
|
}
|
|
@ -0,0 +1,51 @@
|
||||||
|
/***************************************************************************
|
||||||
|
* Copyright (C) 2005 by Tarek Saidi *
|
||||||
|
* tarek@linux *
|
||||||
|
* *
|
||||||
|
* This program is free software; you can redistribute it and/or modify *
|
||||||
|
* it under the terms of the GNU General Public License as published by *
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or *
|
||||||
|
* (at your option) any later version. *
|
||||||
|
* *
|
||||||
|
* 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, write to the *
|
||||||
|
* Free Software Foundation, Inc., *
|
||||||
|
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
|
||||||
|
***************************************************************************/
|
||||||
|
#ifndef _SECSTRING_H_
|
||||||
|
#define _SECSTRING_H_
|
||||||
|
|
||||||
|
#include <qstring.h>
|
||||||
|
#include <qglobal.h>
|
||||||
|
#include "crypto/rijndael.h"
|
||||||
|
|
||||||
|
class SecString{
|
||||||
|
public:
|
||||||
|
SecString(unsigned char* key);
|
||||||
|
SecString();
|
||||||
|
~SecString();
|
||||||
|
|
||||||
|
void getString(QString& str);
|
||||||
|
QString& getString();
|
||||||
|
void setString(QString& str, bool DelSrc=false);
|
||||||
|
void delRef();
|
||||||
|
static void overwrite(char* str,int len);
|
||||||
|
static void overwrite(QString& str);
|
||||||
|
int length();
|
||||||
|
static void generateSessionKey();
|
||||||
|
|
||||||
|
private:
|
||||||
|
static UINT8 Key[32];
|
||||||
|
QString plaintext;
|
||||||
|
char* data;
|
||||||
|
int len;
|
||||||
|
int cryptlen;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
#endif
|
|
@ -0,0 +1,55 @@
|
||||||
|
/***************************************************************************
|
||||||
|
* Copyright (C) 2005 by Tarek Saidi *
|
||||||
|
* tarek@linux *
|
||||||
|
* *
|
||||||
|
* This program is free software; you can redistribute it and/or modify *
|
||||||
|
* it under the terms of the GNU General Public License as published by *
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or *
|
||||||
|
* (at your option) any later version. *
|
||||||
|
* *
|
||||||
|
* 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, write to the *
|
||||||
|
* Free Software Foundation, Inc., *
|
||||||
|
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
|
|
||||||
|
#include "UrlLabel.h"
|
||||||
|
#include <qfont.h>
|
||||||
|
#include <qcolor.h>
|
||||||
|
#include <qcursor.h>
|
||||||
|
#include <qfontmetrics.h>
|
||||||
|
|
||||||
|
LinkLabel::LinkLabel(QWidget *parent, const char* name,const QString& text, int x, int y,WFlags f) : QLabel(parent,name,f){
|
||||||
|
QFont font(parentWidget()->font()); font.setUnderline(true);
|
||||||
|
setFont(font);
|
||||||
|
setPaletteForegroundColor(QColor(20,20,255));
|
||||||
|
setCursor(PointingHandCursor);
|
||||||
|
setText(text);
|
||||||
|
setPos(x,y);
|
||||||
|
}
|
||||||
|
|
||||||
|
LinkLabel::~LinkLabel(){
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void LinkLabel::mouseReleaseEvent(QMouseEvent* event){
|
||||||
|
if(event->button()==LeftButton)
|
||||||
|
clicked();
|
||||||
|
}
|
||||||
|
|
||||||
|
void LinkLabel::setPos(int x,int y){
|
||||||
|
QFontMetrics fm(font());
|
||||||
|
setGeometry(x,y,fm.width(text()),fm.height());
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void LinkLabel::setText(const QString& text){
|
||||||
|
QLabel::setText(text);
|
||||||
|
setPos(geometry().x(),geometry().y());
|
||||||
|
}
|
|
@ -0,0 +1,45 @@
|
||||||
|
/***************************************************************************
|
||||||
|
* Copyright (C) 2005 by Tarek Saidi *
|
||||||
|
* tarek@linux *
|
||||||
|
* *
|
||||||
|
* This program is free software; you can redistribute it and/or modify *
|
||||||
|
* it under the terms of the GNU General Public License as published by *
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or *
|
||||||
|
* (at your option) any later version. *
|
||||||
|
* *
|
||||||
|
* 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, write to the *
|
||||||
|
* Free Software Foundation, Inc., *
|
||||||
|
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
|
#ifndef _LINKLABEL_H_
|
||||||
|
#define _LINKLABEL_H_
|
||||||
|
#include <qlabel.h>
|
||||||
|
#include <qsignal.h>
|
||||||
|
|
||||||
|
class LinkLabel : public QLabel{
|
||||||
|
Q_OBJECT
|
||||||
|
public:
|
||||||
|
LinkLabel(QWidget *parent, const char* name = 0,const QString& text=QString::null, int x=0, int y=0,WFlags f=0);
|
||||||
|
~LinkLabel();
|
||||||
|
void setPos(int x,int y);
|
||||||
|
|
||||||
|
public slots:
|
||||||
|
virtual void setText(const QString&);
|
||||||
|
|
||||||
|
|
||||||
|
signals:
|
||||||
|
void clicked();
|
||||||
|
|
||||||
|
protected:
|
||||||
|
virtual void mouseReleaseEvent(QMouseEvent* event);
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
|
@ -0,0 +1,47 @@
|
||||||
|
/***************************************************************************
|
||||||
|
* Copyright (C) 2005 by Tarek Saidi *
|
||||||
|
* mail@tarek-saidi.de *
|
||||||
|
* *
|
||||||
|
* This program is free software; you can redistribute it and/or modify *
|
||||||
|
* it under the terms of the GNU General Public License as published by *
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or *
|
||||||
|
* (at your option) any later version. *
|
||||||
|
* *
|
||||||
|
* 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, write to the *
|
||||||
|
* Free Software Foundation, Inc., *
|
||||||
|
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
|
||||||
|
***************************************************************************/
|
||||||
|
#include <iostream.h>
|
||||||
|
#include <fstream.h>
|
||||||
|
#include <qdatetime.h>
|
||||||
|
#include <qobject.h>
|
||||||
|
#include "random.h"
|
||||||
|
|
||||||
|
void getRandomBytes(void* buffer,int NumBlocks,int BlockSize,bool Strong){
|
||||||
|
FILE *dev_random;
|
||||||
|
if(Strong){
|
||||||
|
dev_random = fopen("/dev/random","r");}
|
||||||
|
else{
|
||||||
|
dev_random = fopen("/dev/urandom","r");}
|
||||||
|
|
||||||
|
if (dev_random==NULL){
|
||||||
|
cout << QObject::tr("/dev/random konnte nicht geöffnet werden - nutze Standardbibliothek (stdlib)") << endl;
|
||||||
|
srand(QTime(0,0,0).secsTo(QTime::currentTime()));
|
||||||
|
for(int i=0;i<NumBlocks*BlockSize;i++){
|
||||||
|
UINT8 rnd=rand()%256;
|
||||||
|
((UINT8*)buffer)[i]=rnd;
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
fread(buffer,BlockSize,NumBlocks,dev_random);
|
||||||
|
fclose(dev_random);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,20 @@
|
||||||
|
/***************************************************************************
|
||||||
|
* Copyright (C) 2005 by Tarek Saidi *
|
||||||
|
* mail@tarek-saidi.de *
|
||||||
|
* *
|
||||||
|
* This program is free software; you can redistribute it and/or modify *
|
||||||
|
* it under the terms of the GNU General Public License as published by *
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or *
|
||||||
|
* (at your option) any later version. *
|
||||||
|
* *
|
||||||
|
* 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, write to the *
|
||||||
|
* Free Software Foundation, Inc., *
|
||||||
|
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
|
||||||
|
***************************************************************************/
|
||||||
|
extern void getRandomBytes(void* buffer,int NumBlocks,int BlockSize,bool Strong=false);
|
|
@ -0,0 +1,92 @@
|
||||||
|
/***************************************************************************
|
||||||
|
* Copyright (C) 2005 by Tarek Saidi *
|
||||||
|
* tarek@linux *
|
||||||
|
* *
|
||||||
|
* This program is free software; you can redistribute it and/or modify *
|
||||||
|
* it under the terms of the GNU General Public License as published by *
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or *
|
||||||
|
* (at your option) any later version. *
|
||||||
|
* *
|
||||||
|
* 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, write to the *
|
||||||
|
* Free Software Foundation, Inc., *
|
||||||
|
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
|
|
||||||
|
#include "pwsafe.h"
|
||||||
|
#include <qapplication.h>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
int main(int argc, char **argv)
|
||||||
|
{
|
||||||
|
QApplication app(argc,argv);
|
||||||
|
PwSafe *mainWin = 0;
|
||||||
|
/// @todo do something with the command line args here
|
||||||
|
mainWin = new PwSafe(&app);
|
||||||
|
app.setMainWidget( mainWin );
|
||||||
|
mainWin->show();
|
||||||
|
return app.exec();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/********* KDE **************
|
||||||
|
#include <kapplication.h>
|
||||||
|
#include <kaboutdata.h>
|
||||||
|
#include <kcmdlineargs.h>
|
||||||
|
#include <klocale.h>
|
||||||
|
|
||||||
|
static const char description[] =
|
||||||
|
I18N_NOOP("A KDE KPart Application");
|
||||||
|
|
||||||
|
static const char version[] = "0.1";
|
||||||
|
|
||||||
|
static KCmdLineOptions options[] =
|
||||||
|
{
|
||||||
|
// { "+[URL]", I18N_NOOP( "Document to open" ), 0 },
|
||||||
|
KCmdLineLastOption
|
||||||
|
};
|
||||||
|
|
||||||
|
int main(int argc, char **argv)
|
||||||
|
{
|
||||||
|
KAboutData about("Keepass", I18N_NOOP("Keepass"), version, description,
|
||||||
|
KAboutData::License_BSD, "(C) %{YEAR} Tarek Saidi", 0, 0, "tareks@arcor.de");
|
||||||
|
about.addAuthor( "Tarek Saidi", 0, "tareks@arcor.de" );
|
||||||
|
KCmdLineArgs::init(argc, argv, &about);
|
||||||
|
KCmdLineArgs::addCmdLineOptions( options );
|
||||||
|
KApplication app;
|
||||||
|
PwSafe *mainWin = 0;
|
||||||
|
|
||||||
|
if (app.isRestored())
|
||||||
|
{
|
||||||
|
RESTORE(PwSafe);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// no session.. just start up normally
|
||||||
|
KCmdLineArgs *args = KCmdLineArgs::parsedArgs();
|
||||||
|
|
||||||
|
/// @todo do something with the command line args here
|
||||||
|
|
||||||
|
mainWin = new PwSafe();
|
||||||
|
app.setMainWidget( mainWin );
|
||||||
|
mainWin->show();
|
||||||
|
|
||||||
|
args->clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
// mainWin has WDestructiveClose flag by default, so it will delete itself.
|
||||||
|
return app.exec();
|
||||||
|
}
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,167 @@
|
||||||
|
/***************************************************************************
|
||||||
|
* Copyright (C) 2005 by Tarek Saidi *
|
||||||
|
* tarek.saidi@arcor.de *
|
||||||
|
* *
|
||||||
|
* This program is free software; you can redistribute it and/or modify *
|
||||||
|
* it under the terms of the GNU General Public License as published by *
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or *
|
||||||
|
* (at your option) any later version. *
|
||||||
|
* *
|
||||||
|
* 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, write to the *
|
||||||
|
* Free Software Foundation, Inc., *
|
||||||
|
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef MAINWINDOW_H
|
||||||
|
#define MAINWINDOW_H
|
||||||
|
#include <qimage.h>
|
||||||
|
#include <qpixmap.h>
|
||||||
|
#include <qpainter.h>
|
||||||
|
#include <qfont.h>
|
||||||
|
#include <qlabel.h>
|
||||||
|
#include <qtimer.h>
|
||||||
|
#include <qapplication.h>
|
||||||
|
#include "ui_MainWindow.h"
|
||||||
|
#include "ListViews.h"
|
||||||
|
#include "PwmConfig.h"
|
||||||
|
|
||||||
|
typedef vector<GroupItem*>::iterator GroupItemItr;
|
||||||
|
typedef vector<EntryItem*>::iterator EntryItemItr;
|
||||||
|
|
||||||
|
class CMainWindow : public MainFrame{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
public:
|
||||||
|
/*$PUBLIC_FUNCTIONS$*/
|
||||||
|
CMainWindow(QApplication* app, QWidget* parent = 0,const char* name = 0, WFlags fl = 0 );
|
||||||
|
~CMainWindow();
|
||||||
|
protected:
|
||||||
|
/*$PROTECTED_FUNCTIONS$*/
|
||||||
|
|
||||||
|
protected slots:
|
||||||
|
/*$PROTECTED_SLOTS$*/
|
||||||
|
virtual void showEvent(QShowEvent *e);
|
||||||
|
|
||||||
|
public slots:
|
||||||
|
/*$PUBLIC_SLOTS$*/
|
||||||
|
virtual void OnClose();
|
||||||
|
virtual void OnMainWinResize();
|
||||||
|
virtual void OnFileOpen();
|
||||||
|
virtual void OnGroupChanged(QListViewItem*);
|
||||||
|
virtual void OnEntryChanged(QListViewItem*);
|
||||||
|
virtual void OnEntryDoubleClicked(QListViewItem*,const QPoint&,int);
|
||||||
|
virtual void OnMenu_closeDB();
|
||||||
|
virtual void OnFileSaveAs();
|
||||||
|
virtual void OnFileSave();
|
||||||
|
virtual void OnMenuExit();
|
||||||
|
virtual void OnAddGroup();
|
||||||
|
virtual void OnUserNameToClipboard();
|
||||||
|
virtual void OnPasswordToClipboard();
|
||||||
|
virtual void OnDeleteGroup();
|
||||||
|
virtual void OnEditGroup();
|
||||||
|
virtual void OnAddSubGroup();
|
||||||
|
virtual void OnClipboardTimerEvent();
|
||||||
|
virtual void OnOpenURL();
|
||||||
|
virtual void OnGroupSearch();
|
||||||
|
virtual void OnGlobalSearch();
|
||||||
|
virtual void OnDeleteEntry();
|
||||||
|
virtual void OnCopyEntry();
|
||||||
|
virtual void OnEditEntry();
|
||||||
|
virtual void OnAddEntry();
|
||||||
|
virtual void OnSaveAttachment();
|
||||||
|
virtual void OnEntryRightClicked(QListViewItem* item, const QPoint& pos,int column);
|
||||||
|
virtual void OnEntryCtxMenuClicked(int id);
|
||||||
|
virtual void OnGroupRightClicked(QListViewItem* item, const QPoint& pos, int column);
|
||||||
|
virtual void OnGroupCtxMenuClicked(int id);
|
||||||
|
virtual void OnChangeDbKey();
|
||||||
|
virtual void OnDbSettings();
|
||||||
|
virtual void OnFileNew();
|
||||||
|
virtual void OnViewToolbarToggled(bool toggled);
|
||||||
|
virtual void OnViewEntryDetailsToggled(bool toggled);
|
||||||
|
virtual void OnHelpAbout();
|
||||||
|
virtual void OnSettings();
|
||||||
|
virtual void OnView_ColumnUrlToggled(bool value);
|
||||||
|
virtual void OnView_ColumnTitleToggled(bool value);
|
||||||
|
virtual void OnView_ColumnCreationToggled(bool value);
|
||||||
|
virtual void OnView_ColumnLastAccessToggled(bool value);
|
||||||
|
virtual void OnView_ColumnLastModToggled(bool value);
|
||||||
|
virtual void OnView_ColumnCommentToggled(bool value);
|
||||||
|
virtual void OnView_ColumnPasswordToggled(bool value);
|
||||||
|
virtual void OnView_ColumnAttachmentToggled(bool value);
|
||||||
|
virtual void OnView_ColumnExpireToggled(bool value);
|
||||||
|
virtual void OnView_ColumnUsernameToggled(bool value);
|
||||||
|
virtual void OnExtrasLanguage();
|
||||||
|
virtual void OnSearchGroupCtxMenuClicked(int);
|
||||||
|
virtual void OnQickSearch();
|
||||||
|
virtual void OnGroupItemExpanded(QListViewItem* item);
|
||||||
|
virtual void OnGroupItemCollapsed(QListViewItem* item);
|
||||||
|
virtual void DEBUG_OnPrintDbStucture();
|
||||||
|
virtual void OnImportPwManagerFile();
|
||||||
|
virtual void OnView_HideUsernamesToggled(bool state);
|
||||||
|
virtual void OnView_HidePasswordsToggled(bool state);
|
||||||
|
virtual void OnGroupViewDrop(QDropEvent* e);
|
||||||
|
virtual void OnHelpAboutQt();
|
||||||
|
virtual void OnImportKWalletXML();
|
||||||
|
|
||||||
|
|
||||||
|
public:
|
||||||
|
PwDatabase* db;
|
||||||
|
vector<GroupItem*> GroupItems;
|
||||||
|
vector<EntryItem*> EntryItems;
|
||||||
|
vector<unsigned long> SearchResults;
|
||||||
|
QString img_res_dir;
|
||||||
|
QPixmap* EntryIcons;
|
||||||
|
QPixmap* Icon_Key32x32;
|
||||||
|
QPixmap* Icon_Settings32x32;
|
||||||
|
QPixmap* Icon_Search32x32;
|
||||||
|
QPixmap* Icon_I18n32x32;
|
||||||
|
QPixmap* Icon_Ok16x16;
|
||||||
|
QTimer ClipboardTimer;
|
||||||
|
QString appdir;
|
||||||
|
CConfig config;
|
||||||
|
|
||||||
|
enum FileMenuState{STATE_FileOpen,
|
||||||
|
STATE_NoFileOpen};
|
||||||
|
enum EditMenuState{STATE_NoGroupSelected,
|
||||||
|
STATE_NoEntrySelected,
|
||||||
|
STATE_SingleGroupSelected,
|
||||||
|
STATE_SingleEntrySelected};
|
||||||
|
void InitMenus();
|
||||||
|
void SetFileMenuState(FileMenuState status);
|
||||||
|
void SetEditMenuState(EditMenuState status);
|
||||||
|
void LoadImg(QString name,QImage &tmpImg);
|
||||||
|
void SetupColumns();
|
||||||
|
void ResizeColumns();
|
||||||
|
void OpenDatabase(QString filename);
|
||||||
|
void CreateBanner(QLabel *Banner,QPixmap* symbol,QString text);
|
||||||
|
void CreateBanner(QLabel *Banner,QPixmap* symbol,QString text,QColor color1,QColor color2,QColor textcolor);
|
||||||
|
void CloseDataBase();
|
||||||
|
void OpenURL(QString url);
|
||||||
|
GroupItem* getLastSameLevelItem(int i);
|
||||||
|
|
||||||
|
void setCurrentGroup(GroupItem* item);
|
||||||
|
void updateEntryView();
|
||||||
|
void updateGroupView();
|
||||||
|
GroupItem* CurrentGroup;
|
||||||
|
EntryItem* CurrentEntry;
|
||||||
|
QClipboard* Clipboard;
|
||||||
|
|
||||||
|
private:
|
||||||
|
bool isInSearchResults(CEntry*);
|
||||||
|
void Search(CGroup* pGroup=NULL);
|
||||||
|
QApplication* App;
|
||||||
|
QTranslator* translator;
|
||||||
|
bool modflag;
|
||||||
|
void setModFlag(bool);
|
||||||
|
bool FileOpen;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
|
@ -0,0 +1,33 @@
|
||||||
|
/***************************************************************************
|
||||||
|
* Copyright (C) 2005 by Tarek Saidi *
|
||||||
|
* tarek@linux *
|
||||||
|
* *
|
||||||
|
* This program is free software; you can redistribute it and/or modify *
|
||||||
|
* it under the terms of the GNU General Public License as published by *
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or *
|
||||||
|
* (at your option) any later version. *
|
||||||
|
* *
|
||||||
|
* 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, write to the *
|
||||||
|
* Free Software Foundation, Inc., *
|
||||||
|
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
|
#include "mainwindow.h"
|
||||||
|
#include "pwsafe.h"
|
||||||
|
|
||||||
|
PwSafe::PwSafe(QApplication* app):QMainWindow( 0, "Keepass",WDestructiveClose)
|
||||||
|
{ mainWin=new CMainWindow(app,this);
|
||||||
|
setCentralWidget( mainWin );
|
||||||
|
}
|
||||||
|
|
||||||
|
PwSafe::~PwSafe()
|
||||||
|
{
|
||||||
|
delete mainWin;
|
||||||
|
}
|
||||||
|
|
|
@ -0,0 +1,48 @@
|
||||||
|
/***************************************************************************
|
||||||
|
* Copyright (C) 2005 by Tarek Saidi *
|
||||||
|
* tarek@linux *
|
||||||
|
* *
|
||||||
|
* This program is free software; you can redistribute it and/or modify *
|
||||||
|
* it under the terms of the GNU General Public License as published by *
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or *
|
||||||
|
* (at your option) any later version. *
|
||||||
|
* *
|
||||||
|
* 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, write to the *
|
||||||
|
* Free Software Foundation, Inc., *
|
||||||
|
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef _PWSAFE_H_
|
||||||
|
#define _PWSAFE_H_
|
||||||
|
|
||||||
|
#include <qapplication.h>
|
||||||
|
#include <qmainwindow.h>
|
||||||
|
|
||||||
|
class CMainWindow;
|
||||||
|
|
||||||
|
class PwSafe : public QMainWindow
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
public:
|
||||||
|
/**
|
||||||
|
* Default Constructor
|
||||||
|
*/
|
||||||
|
PwSafe(QApplication*);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Default Destructor
|
||||||
|
*/
|
||||||
|
virtual ~PwSafe();
|
||||||
|
|
||||||
|
private:
|
||||||
|
CMainWindow *mainWin;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // _PWSAFE_H_
|
|
@ -0,0 +1,96 @@
|
||||||
|
# Diese Datei wurde mit dem qmake-Manager von KDevelop erstellt.
|
||||||
|
# -------------------------------------------
|
||||||
|
# Unterordner relativ zum Projektordner: ./src
|
||||||
|
# Das Target ist eine Anwendung: ../bin/keepass
|
||||||
|
|
||||||
|
INSTALLS += Share \
|
||||||
|
target
|
||||||
|
target.path = /usr/local/bin
|
||||||
|
Share.files += ../share/keepass/*
|
||||||
|
Share.path = /usr/local/share/keepass
|
||||||
|
MOC_DIR = ../build/moc
|
||||||
|
UI_DIR = ../build/ui
|
||||||
|
OBJECTS_DIR = ../build/
|
||||||
|
TARGET = ../bin/keepass
|
||||||
|
CONFIG += debug \
|
||||||
|
warn_off \
|
||||||
|
qt \
|
||||||
|
thread \
|
||||||
|
exceptions \
|
||||||
|
stl
|
||||||
|
TEMPLATE = app
|
||||||
|
FORMS += forms/ui_EditGroupDlg.ui \
|
||||||
|
forms/ui_SearchDlg.ui \
|
||||||
|
forms/ui_AboutDlg.ui \
|
||||||
|
forms/ui_LanguageDlg.ui \
|
||||||
|
forms/ui_SettingsDlg.ui \
|
||||||
|
forms/ui_ChangeKeyDlg.ui \
|
||||||
|
forms/ui_MainWindow.ui \
|
||||||
|
forms/ui_SimplePasswordDlg.ui \
|
||||||
|
forms/ui_DatabaseSettingsDlg.ui \
|
||||||
|
forms/ui_PasswordDlg.ui \
|
||||||
|
forms/ui_EditEntryDlg.ui \
|
||||||
|
forms/ui_PasswordGenDlg.ui
|
||||||
|
TRANSLATIONS += translations/english.ts \
|
||||||
|
translations/russian.ts
|
||||||
|
HEADERS += lib/IniReader.h \
|
||||||
|
lib/UrlLabel.h \
|
||||||
|
mainwindow.h \
|
||||||
|
PwManager.h \
|
||||||
|
pwsafe.h \
|
||||||
|
crypto/rijndael.h \
|
||||||
|
lib/SecString.h \
|
||||||
|
crypto/sha256.h \
|
||||||
|
crypto/twoclass.h \
|
||||||
|
crypto/twofish.h \
|
||||||
|
ListViews.h \
|
||||||
|
import/Import_PwManager.h \
|
||||||
|
crypto/blowfish.h \
|
||||||
|
crypto/sha1.h \
|
||||||
|
import/Import_KWalletXml.h \
|
||||||
|
PwmConfig.h \
|
||||||
|
dialogs/AboutDlg.h \
|
||||||
|
dialogs/EditGroupDlg.h \
|
||||||
|
dialogs/SearchDlg.h \
|
||||||
|
dialogs/ChangeKeyDlg.h \
|
||||||
|
dialogs/LanguageDlg.h \
|
||||||
|
dialogs/SettingsDlg.h \
|
||||||
|
dialogs/DatabaseSettingsDlg.h \
|
||||||
|
dialogs/PasswordDlg.h \
|
||||||
|
dialogs/SimplePasswordDlg.h \
|
||||||
|
dialogs/EditEntryDlg.h \
|
||||||
|
dialogs/PasswordGenDlg.h \
|
||||||
|
lib/random.h \
|
||||||
|
Database.h \
|
||||||
|
lib/PwmTime.h
|
||||||
|
SOURCES += lib/IniReader.cpp \
|
||||||
|
lib/UrlLabel.cpp \
|
||||||
|
main.cpp \
|
||||||
|
mainwindow.cpp \
|
||||||
|
PwManager.cpp \
|
||||||
|
pwsafe.cpp \
|
||||||
|
crypto/rijndael.cpp \
|
||||||
|
lib/SecString.cpp \
|
||||||
|
crypto/sha256.c \
|
||||||
|
crypto/twoclass.cpp \
|
||||||
|
crypto/twofish.cpp \
|
||||||
|
ListViews.cpp \
|
||||||
|
import/Import_PwManager.cpp \
|
||||||
|
crypto/blowfish.cpp \
|
||||||
|
crypto/sha1.cpp \
|
||||||
|
import/Import_KWalletXml.cpp \
|
||||||
|
PwmConfig.cpp \
|
||||||
|
dialogs/AboutDlg.cpp \
|
||||||
|
dialogs/EditGroupDlg.cpp \
|
||||||
|
dialogs/SearchDlg.cpp \
|
||||||
|
dialogs/ChangeKeyDlg.cpp \
|
||||||
|
dialogs/LanguageDlg.cpp \
|
||||||
|
dialogs/SettingsDlg.cpp \
|
||||||
|
dialogs/DatabaseSettingsDlg.cpp \
|
||||||
|
dialogs/PasswordDlg.cpp \
|
||||||
|
dialogs/SimplePasswordDlg.cpp \
|
||||||
|
dialogs/EditEntryDlg.cpp \
|
||||||
|
dialogs/PasswordGenDlg.cpp \
|
||||||
|
lib/random.cpp \
|
||||||
|
Database.cpp \
|
||||||
|
lib/PwmTime.cpp
|