aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorubbo <ubbo@34ebc366-c3a9-4b3c-9f84-69acf7962910>2008-08-15 23:26:50 +0000
committerubbo <ubbo@34ebc366-c3a9-4b3c-9f84-69acf7962910>2008-08-15 23:26:50 +0000
commit34eea857ef69fe3210d3787f343ae2f84b04a0b1 (patch)
tree90b854a1efa0c5f0ff3e73bef6f8eb11510b9b01
downloadgpg4usb-34eea857ef69fe3210d3787f343ae2f84b04a0b1.tar.gz
gpg4usb-34eea857ef69fe3210d3787f343ae2f84b04a0b1.zip
reorganized svn to support tags and branches
git-svn-id: http://cpunk.de/svn/src/gpg4usb/trunk@142 34ebc366-c3a9-4b3c-9f84-69acf7962910
-rw-r--r--COPYING339
-rw-r--r--README45
-rw-r--r--TODO26
-rw-r--r--context.cpp394
-rw-r--r--context.h80
-rw-r--r--gpg4usb.icobin0 -> 9662 bytes
-rw-r--r--gpg4usb.pro25
-rw-r--r--gpg4usb.rc1
-rw-r--r--gpgwin.cpp401
-rw-r--r--gpgwin.h87
-rw-r--r--keylist.cpp129
-rw-r--r--keylist.h55
-rw-r--r--lib/libgpgme.abin0 -> 204360 bytes
-rw-r--r--main.cpp54
-rw-r--r--release/COPYING339
-rw-r--r--release/README45
-rw-r--r--release/bin/COPYING.txt676
-rw-r--r--release/bin/README.txt822
-rwxr-xr-xrelease/bin/gpgbin0 -> 2120576 bytes
-rw-r--r--release/bin/gpg.exebin0 -> 870400 bytes
-rw-r--r--release/icons/button_cancel.pngbin0 -> 3612 bytes
-rw-r--r--release/icons/button_copy.pngbin0 -> 1989 bytes
-rw-r--r--release/icons/button_cut.pngbin0 -> 3406 bytes
-rw-r--r--release/icons/button_ok.pngbin0 -> 2856 bytes
-rw-r--r--release/icons/button_paste.pngbin0 -> 2704 bytes
-rw-r--r--release/icons/configure.pngbin0 -> 2897 bytes
-rw-r--r--release/icons/decrypted.pngbin0 -> 2025 bytes
-rw-r--r--release/icons/edit.pngbin0 -> 2011 bytes
-rw-r--r--release/icons/encrypted.pngbin0 -> 2058 bytes
-rw-r--r--release/icons/exit.pngbin0 -> 2446 bytes
-rw-r--r--release/icons/fileopen.pngbin0 -> 2654 bytes
-rw-r--r--release/icons/fileprint.pngbin0 -> 3369 bytes
-rw-r--r--release/icons/filesave.pngbin0 -> 2627 bytes
-rw-r--r--release/icons/filesaveas.pngbin0 -> 3846 bytes
-rw-r--r--release/icons/help.pngbin0 -> 4662 bytes
-rw-r--r--release/icons/importkey_editor.pngbin0 -> 3352 bytes
-rw-r--r--release/icons/kgpg_export.pngbin0 -> 2534 bytes
-rw-r--r--release/icons/kgpg_import.pngbin0 -> 2775 bytes
-rw-r--r--release/icons/kgpg_key2.pngbin0 -> 850 bytes
-rw-r--r--release/icons/undo.pngbin0 -> 2653 bytes
-rwxr-xr-xrelease/keydb/gpg.conf1
-rw-r--r--release/keydb/pubring.gpgbin0 -> 1166 bytes
-rw-r--r--release/mingwm10.dllbin0 -> 15960 bytes
-rw-r--r--release/ts/gpg4usb_de.qmbin0 -> 5709 bytes
-rw-r--r--release/ts/gpg4usb_de.ts333
-rw-r--r--release/ts/gpg4usb_en.qmbin0 -> 3582 bytes
-rw-r--r--release/ts/gpg4usb_en.ts332
-rw-r--r--testdata/crypt1.txt13
-rw-r--r--testdata/pubkey-1.asc1
-rw-r--r--testdata/pubkey-2.asc1
-rw-r--r--testdata/seckey-1.asc30
51 files changed, 4229 insertions, 0 deletions
diff --git a/COPYING b/COPYING
new file mode 100644
index 0000000..94fb846
--- /dev/null
+++ b/COPYING
@@ -0,0 +1,339 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 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 Lesser 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.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 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 Lesser General
+Public License instead of this License.
diff --git a/README b/README
new file mode 100644
index 0000000..ba5b274
--- /dev/null
+++ b/README
@@ -0,0 +1,45 @@
+ABOUT
+-----
+gpg4usb is an easy to use, small portable editor with the possibility
+to encrypt and decrypt any text-message or -file you want. For encryption it acts as
+a gpg-frontend (http://gnupg.org/). Its intend is to be used from an usb-stick,
+running on Windows(TM) and Linux. Providing a mac-binary is on our TODO-list.
+
+Our aim is, to give anyone the possibility to send and receive secure encrypted
+messages anywhere - on any computer out there, no matter if Microsoft Windows(TM)
+or Linux is running on it. Therefore it's usage should be self-describing, and the
+user-interface is kept as simple as possible.
+
+Of course gpg4usb is open source, as are included libs and binaries.
+
+OBTAINING
+---------
+You can get prepacked zip-files from http://gpg4usb.cpunk.de/download.html .
+For retrieving the source checkout http://cpunk.de/svn/src/ .
+
+HOWTO USE
+---------
+1. Unzip gpg4usblib.zip on your usb-stick.
+2. start programm with start_windows.exe or start_linux (depending on your os)
+3. import your private key and some public keys
+4. enjoy portable encryption ;-)
+
+CONTACT
+-------
+If you have any questions and/or suggestions contact us at
[email protected] - or feel free to meet us at [email protected]
+
+Our homepage is located at http://gpg4usb.cpunk.de .
+
+LICENSES
+--------
+gpg4usblib itself is licensed under the GPL (see COPYING).
+
+There are some libries and the gpg-binary included in the zip-file / a static
+gpg-build which (may) have different licenses, for more information check
+their homepages. You can also obtain the sources from there.
+
+GPG: http://gnupg.org/
+QT: http://trolltech.no/ , http://trolltech.no/downloads/opensource
+
+Iconset used is Nuvola (http://icon-king.com/?p=15), which has a LGPL License
diff --git a/TODO b/TODO
new file mode 100644
index 0000000..895cfc4
--- /dev/null
+++ b/TODO
@@ -0,0 +1,26 @@
+TODO:
+-----
+
+- Binary File Attachements, function for Decrypt & Help-Text (like safe eml, etc)
+
+- sorting keys would be nice (e.g. a-z or complete manual)
+- Policy ( dialogs, what's warning, what an error )
+- Encrypt to self (problem: who is self?)
+
+- Keyimport, first: function Keyimport should use QByteArray, then:
+ - More Keymanagement (new popup window?) including:
+ - copy a public-keyfile into the editor-window and enable importing it -> same as "Import Key from Clipboard?"
+ - Import Key from Clipboard
+ - export public key
+ - export private key
+ - generate new key
+ - import keyfiles in non ASCII-Amor-format (always and everywhere error-free keyimport would be great)
+ - Import key from Keyserver
+
+- Tabbed editor (including useful things like encrypted data opens in new tab)
+
+- some kind of locking for keydb, as gpg.conf uses lock-never, for ability to run on usb-drives (fat-formatted)
+
+advanced:
+- threading & thread-safety in context.cpp (in, out, ctx)
+
diff --git a/context.cpp b/context.cpp
new file mode 100644
index 0000000..9db8aad
--- /dev/null
+++ b/context.cpp
@@ -0,0 +1,394 @@
+/*
+ * context.cpp
+ *
+ * Copyright 2008 gpg4usb-team <[email protected]>
+ *
+ * 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., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#include <locale.h>
+#include <sstream>
+#include <QApplication>
+#include <QtGui>
+#include <QMessageBox>
+#include <errno.h>
+#include "context.h"
+
+#ifdef _WIN32
+#include <windows.h>
+#include <unistd.h> /* contains read/write */
+#endif
+
+
+namespace GpgME
+{
+
+/** Constructor
+ * Set up gpgme-context, set paths to app-run path
+ */
+Context::Context()
+{
+
+ /** get application path */
+ QString appPath = qApp->applicationDirPath();
+
+ /** The function `gpgme_check_version' must be called before any other
+ * function in the library, because it initializes the thread support
+ * subsystem in GPGME. (from the info page) */
+ gpgme_check_version(NULL);
+
+ setlocale(LC_ALL, "");
+ /** set locale, because tests do also */
+ gpgme_set_locale(NULL, LC_CTYPE, setlocale(LC_CTYPE, NULL));
+#ifndef _WIN32
+ gpgme_set_locale(NULL, LC_MESSAGES, setlocale(LC_MESSAGES, NULL));
+#endif
+
+ err = gpgme_new(&m_ctx);
+ checkErr(err);
+ /** here come the settings, instead of /usr/bin/gpg
+ * a executable in the same path as app is used.
+ * also lin/win must be checked, for calling gpg.exe if needed
+ */
+#ifdef _WIN32
+ QString gpgBin = appPath + "/bin/gpg.exe";
+#else
+ QString gpgBin = appPath + "/bin/gpg";
+#endif
+ QString gpgKeys = appPath + "/keydb";
+ err = gpgme_ctx_set_engine_info(m_ctx, GPGME_PROTOCOL_OpenPGP,
+ gpgBin.toAscii().constData(),
+ gpgKeys.toAscii().constData());
+ checkErr(err);
+
+
+ /** Setting the output type must be done at the beginning */
+ /** think this means ascii-amor --> ? */
+ gpgme_set_armor(m_ctx, 1);
+ /** passphrase-callback */
+ gpgme_set_passphrase_cb(m_ctx, passphraseCb, this);
+
+ /** check if app is called with -d from command line */
+ if (qApp->arguments().contains("-d")) {
+ qDebug() << "gpgme_data_t debug on";
+ debug = true;
+ } else {
+ debug = false;
+ }
+
+}
+
+/** Destructor
+ * Release gpgme-context
+ */
+Context::~Context()
+{
+ if (m_ctx) gpgme_release(m_ctx);
+ m_ctx = 0;
+}
+
+/** Import Key from QByteArray
+ *
+ */
+void Context::importKey(QByteArray inBuffer)
+{
+ err = gpgme_data_new_from_mem(&in, inBuffer.data(), inBuffer.size(), 1);
+ checkErr(err);
+ err = gpgme_op_import(m_ctx, in);
+ checkErr(err);
+ gpgme_data_release(in);
+}
+
+/** List all availabe Keys (VERY much like kgpgme)
+ */
+GpgKeyList Context::listKeys()
+{
+ gpgme_error_t err;
+ gpgme_key_t key;
+
+ GpgKeyList keys;
+ //TODO dont run the loop more often than necessary
+ // list all keys ( the 0 is for all )
+ err = gpgme_op_keylist_start(m_ctx, NULL, 0);
+ checkErr(err);
+ while (!(err = gpgme_op_keylist_next(m_ctx, &key))) {
+ GpgKey gpgkey;
+
+ if (!key->subkeys)
+ continue;
+
+ gpgkey.id = key->subkeys->keyid;
+
+ if (key->uids) {
+ gpgkey.name = key->uids->name;
+ gpgkey.email = key->uids->email;
+ }
+ keys.append(gpgkey);
+ gpgme_key_unref(key);
+ }
+ gpgme_op_keylist_end(m_ctx);
+
+ // list only private keys ( the 1 does )
+ gpgme_op_keylist_start(m_ctx, NULL, 1);
+ while (!(err = gpgme_op_keylist_next(m_ctx, &key))) {
+ if (!key->subkeys)
+ continue;
+ // iterate keys, mark privates
+ GpgKeyList::iterator it = keys.begin();
+ while (it != keys.end()) {
+ if (key->subkeys->keyid == it->id.toStdString())
+ it->privkey = 1;
+ it++;
+ }
+
+ gpgme_key_unref(key);
+ }
+ gpgme_op_keylist_end(m_ctx);
+
+ return keys;
+}
+
+/** Delete keys
+ */
+
+void Context::deleteKeys(QList<QString> *uidList)
+{
+
+ QString tmp;
+ gpgme_key_t key;
+
+ foreach(tmp, *uidList) {
+ gpgme_op_keylist_start(m_ctx, tmp.toAscii().constData(), 0);
+ gpgme_op_keylist_next(m_ctx, &key);
+ gpgme_op_keylist_end(m_ctx);
+ gpgme_op_delete(m_ctx, key, 1);
+ }
+}
+
+/** Encrypt String, return String
+ * should also use QByteArray, so be removed
+ * in should be std::vector<key> & recipients (703 in context.cpp)
+ */
+bool Context::encrypt(QList<QString> *uidList, const QByteArray &inBuffer, QByteArray *outBuffer)
+{
+
+ gpgme_data_t in = 0, out = 0;
+ outBuffer->resize(0);
+
+ if (uidList->count() == 0) {
+ QMessageBox::critical(0, "No Key Selected", "No Key Selected");
+ return false;
+ }
+
+ //gpgme_encrypt_result_t e_result;
+ gpgme_key_t recipients[uidList->count()+1];
+
+ /* get key for user */
+ for (int i = 0; i < uidList->count(); i++) {
+ // the last 0 is for public keys, 1 would return private keys
+ gpgme_op_keylist_start(m_ctx, uidList->at(i).toAscii().constData(), 0);
+ gpgme_op_keylist_next(m_ctx, &recipients[i]);
+ gpgme_op_keylist_end(m_ctx);
+ }
+ //Last entry in array has to be NULL
+ recipients[uidList->count()] = NULL;
+
+ //If the last parameter isnt 0, a private copy of data is made
+ err = gpgme_data_new_from_mem(&in, inBuffer.data(), inBuffer.size(), 1);
+ checkErr(err);
+ err = gpgme_data_new(&out);
+ checkErr(err);
+
+ err = gpgme_op_encrypt(m_ctx, recipients, GPGME_ENCRYPT_ALWAYS_TRUST, in, out);
+ checkErr(err);
+
+ err = readToBuffer(out, outBuffer);
+ checkErr(err);
+
+ /* unref all keys */
+ for (int i = 0; i <= uidList->count(); i++) {
+ gpgme_key_unref(recipients[i]);
+ }
+ gpgme_data_release(in);
+ gpgme_data_release(out);
+
+ return true;
+}
+
+/** Decrypt QByteAarray, return QByteArray
+ * mainly from http://basket.kde.org/ (kgpgme.cpp)
+ */
+bool Context::decrypt(const QByteArray &inBuffer, QByteArray *outBuffer)
+{
+ gpgme_data_t in = 0, out = 0;
+ gpgme_decrypt_result_t result = 0;
+
+ outBuffer->resize(0);
+ if (m_ctx) {
+ err = gpgme_data_new_from_mem(&in, inBuffer.data(), inBuffer.size(), 1);
+ checkErr(err);
+ if (!err) {
+ err = gpgme_data_new(&out);
+ checkErr(err);
+ if (!err) {
+ err = gpgme_op_decrypt(m_ctx, in, out);
+ checkErr(err);
+ if (!err) {
+ result = gpgme_op_decrypt_result(m_ctx);
+ if (result->unsupported_algorithm) {
+ QMessageBox::critical(0, "Unsupported algorithm", result->unsupported_algorithm);
+ } else {
+ err = readToBuffer(out, outBuffer);
+ checkErr(err);
+ }
+ }
+ }
+ }
+ }
+ if (err != GPG_ERR_NO_ERROR && err != GPG_ERR_CANCELED) {
+ QMessageBox::critical(0, "Error encrypting:", gpgme_strerror(err));
+ }
+ if (err != GPG_ERR_NO_ERROR)
+ clearCache();
+ if (in)
+ gpgme_data_release(in);
+ if (out)
+ gpgme_data_release(out);
+ return (err == GPG_ERR_NO_ERROR);
+}
+
+/** Read gpgme-Data to QByteArray
+ * mainly from http://basket.kde.org/ (kgpgme.cpp)
+ */
+#define BUF_SIZE (32 * 1024)
+gpgme_error_t Context::readToBuffer(gpgme_data_t in, QByteArray *outBuffer)
+{
+ int ret;
+ gpgme_error_t err = GPG_ERR_NO_ERROR;
+
+ ret = gpgme_data_seek(in, 0, SEEK_SET);
+ if (ret) {
+ err = gpgme_err_code_from_errno(errno);
+ checkErr(err, "failed dataseek in readToBuffer");
+ } else {
+ char *buf = new char[BUF_SIZE + 2];
+
+ if (buf) {
+ while ((ret = gpgme_data_read(in, buf, BUF_SIZE)) > 0) {
+ uint size = outBuffer->size();
+ outBuffer->resize(size + ret);
+ memcpy(outBuffer->data() + size, buf, ret);
+ }
+ if (ret < 0) {
+ err = gpgme_err_code_from_errno(errno);
+ checkErr(err, "failed data_read in readToBuffer");
+ }
+ delete[] buf;
+ }
+ }
+ return err;
+}
+
+/** The Passphrase window, if not provided by env-Var GPG_AGENT_INFO
+ * originally copied from http://basket.kde.org/ (kgpgme.cpp), but modified
+ */
+gpgme_error_t Context::passphraseCb(void *hook, const char *uid_hint,
+ const char *passphrase_info,
+ int last_was_bad, int fd)
+{
+ Context *gpg = static_cast<Context*>(hook);
+ return gpg->passphrase(uid_hint, passphrase_info, last_was_bad, fd);
+}
+
+gpgme_error_t Context::passphrase(const char *uid_hint,
+ const char * /*passphrase_info*/,
+ int last_was_bad, int fd)
+{
+ gpgme_error_t res = GPG_ERR_CANCELED;
+ QString s;
+ QString gpg_hint = uid_hint;
+ bool result;
+
+ if (last_was_bad) {
+ s += "<i>Wrong password.</i><br><br>\n\n";
+ clearCache();
+ }
+
+ /** if uid provided */
+ if (!gpg_hint.isEmpty()) {
+ // remove UID, leave only username & email
+ gpg_hint.remove(0, gpg_hint.indexOf(" "));
+ s += "<b>Enter Password for</b><br>\n" + gpg_hint + "\n";
+ }
+
+ if (m_cache.isEmpty()) {
+ QString password = QInputDialog::getText(0, "Enter Password",
+ s, QLineEdit::Password,
+ "", &result);
+
+ if (result == 1) m_cache = password.toAscii();
+ } else
+ result = 0;
+
+ if (result == 1) {
+#ifndef _WIN32
+ write(fd, m_cache.data(), m_cache.length());
+#else
+ DWORD written;
+ WriteFile((HANDLE) fd, m_cache.data(), m_cache.length(), &written, 0);
+#endif
+ res = 0;
+ }
+#ifndef _WIN32
+ write(fd, "\n", 1);
+#else
+ DWORD written;
+ WriteFile((HANDLE) fd, "\n", 1, &written, 0);
+#endif
+
+ return res;
+}
+
+/** also from kgpgme.cpp, seems to clear password from mem */
+void Context::clearCache()
+{
+ if (m_cache.size() > 0) {
+ m_cache.fill('\0');
+ m_cache.truncate(0);
+ }
+}
+
+// error-handling
+void Context::checkErr(gpgme_error_t err, QString comment) const
+{
+ if (err != GPG_ERR_NO_ERROR && err != GPG_ERR_CANCELED) {
+ qDebug() << "[Error " << comment << "] Source: " << gpgme_strsource(err) << " String: " << gpgme_strerror(err);
+ }
+}
+
+void Context::checkErr(gpgme_error_t err) const
+{
+ if (err != GPG_ERR_NO_ERROR && err != GPG_ERR_CANCELED) {
+ qDebug() << "[Error] Source: " << gpgme_strsource(err) << " String: " << gpgme_strerror(err);
+ }
+}
+
+}
+
+
+
+
+
diff --git a/context.h b/context.h
new file mode 100644
index 0000000..868b085
--- /dev/null
+++ b/context.h
@@ -0,0 +1,80 @@
+/*
+ * context.h
+ *
+ * Copyright 2008 gpg4usb-team <[email protected]>
+ *
+ * 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., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#ifndef __SGPGMEPP_CONTEXT_H__
+#define __SGPGMEPP_CONTEXT_H__
+
+#include <gpgme.h>
+#include <QByteArray>
+#include <QString>
+#include <QLinkedList>
+
+class GpgKey
+{
+public:
+ QString id;
+ QString name;
+ QString email;
+ int privkey;
+};
+
+typedef QLinkedList< GpgKey > GpgKeyList;
+
+namespace GpgME
+{
+
+class Context
+{
+
+public:
+ Context(); // Consttructor
+ ~Context(); // Destructor
+
+ void importKeyFromFile(QString pathToFile);
+ void importKey(QByteArray inBuffer);
+ GpgKeyList listKeys();
+ void deleteKeys(QList<QString> *uidList);
+ bool encrypt(QList<QString> *uidList, const QByteArray &inBuffer,
+ QByteArray *outBuffer);
+ bool decrypt(const QByteArray &inBuffer, QByteArray *outBuffer);
+ void clearCache();
+
+private:
+ gpgme_ctx_t m_ctx;
+ gpgme_data_t in, out;
+ gpgme_error_t err;
+ gpgme_error_t readToBuffer(gpgme_data_t in, QByteArray *outBuffer);
+ QByteArray m_cache;
+ bool debug;
+ void checkErr(gpgme_error_t err) const;
+ void checkErr(gpgme_error_t err, QString comment) const;
+
+ static gpgme_error_t passphraseCb(void *hook, const char *uid_hint,
+ const char *passphrase_info,
+ int last_was_bad, int fd);
+ gpgme_error_t passphrase(const char *uid_hint,
+ const char *passphrase_info,
+ int last_was_bad, int fd);
+
+};
+} // namespace GpgME
+
+#endif // __SGPGMEPP_CONTEXT_H__
diff --git a/gpg4usb.ico b/gpg4usb.ico
new file mode 100644
index 0000000..51c9b00
--- /dev/null
+++ b/gpg4usb.ico
Binary files differ
diff --git a/gpg4usb.pro b/gpg4usb.pro
new file mode 100644
index 0000000..91bb5c2
--- /dev/null
+++ b/gpg4usb.pro
@@ -0,0 +1,25 @@
+######################################################################
+# Automatically generated by qmake (2.01a) Mi Mai 21 02:28:39 2008
+######################################################################
+
+TEMPLATE = app
+unix:TARGET = start_linux
+win32:TARGET = start_windows
+mac:TARGET = start_mac
+DESTDIR = release
+DEPENDPATH += .
+INCLUDEPATH += .
+
+# Input
+HEADERS += context.h gpgwin.h keylist.h
+SOURCES += context.cpp gpgwin.cpp main.cpp keylist.cpp
+RC_FILE = gpg4usb.rc
+# For Static build on Linux: uncomment line below
+#LIBS += lib/libgpgme.a -static-libgcc -Llib
+#LIBS += lib/libgpgme.a
+LIBS += -lgpgme -lgpg-error
+#LIBS += lib/libgpgme.a -Llib
+DEFINES += _FILE_OFFSET_BITS=64
+
+TRANSLATIONS = release/ts/gpg4usb_en.ts \
+ release/ts/gpg4usb_de.ts
diff --git a/gpg4usb.rc b/gpg4usb.rc
new file mode 100644
index 0000000..16b8539
--- /dev/null
+++ b/gpg4usb.rc
@@ -0,0 +1 @@
+IDI_ICON1 ICON DISCARDABLE "gpg4usb.ico"
diff --git a/gpgwin.cpp b/gpgwin.cpp
new file mode 100644
index 0000000..6215ba9
--- /dev/null
+++ b/gpgwin.cpp
@@ -0,0 +1,401 @@
+/*
+ * gpgwin.cpp
+ *
+ * Copyright 2008 gpg4usb-team <[email protected]>
+ *
+ * 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., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+#include <QApplication>
+#include <QMainWindow>
+#include <QPlainTextEdit>
+#include <QWidget>
+#include <QVBoxLayout>
+#include <QGridLayout>
+#include <iostream>
+#include <QtGui>
+#include <QString>
+#include <QFileDialog>
+#include <QStringList>
+#include <QIcon>
+#include <QMessageBox>
+
+#include "context.h"
+#include "gpgwin.h"
+
+
+GpgWin::GpgWin()
+{
+ myCtx = new GpgME::Context();
+
+ /* get path were app was started */
+ QString appPath = qApp->applicationDirPath();
+ iconPath = appPath + "/icons/";
+
+ edit = new QPlainTextEdit();
+ setCentralWidget(edit);
+
+ /* the list of Keys available*/
+ m_keyList = new KeyList();
+ m_keyList->setIconPath(iconPath);
+ m_keyList->setContext(myCtx);
+
+ createActions();
+ createMenus();
+ createToolBars();
+ createStatusBar();
+ createDockWindows();
+
+ setToolButtonStyle(Qt::ToolButtonTextUnderIcon);
+ setIconSize(QSize(32, 32));
+ setCurrentFile("");
+
+}
+
+void GpgWin::createActions()
+{
+ /** Main Menu
+ */
+ openAct = new QAction(tr("&Open..."), this);
+ openAct->setIcon(QIcon(iconPath + "fileopen.png"));
+ openAct->setShortcut(tr("Ctrl+O"));
+ openAct->setStatusTip(tr("Open an existing file"));
+ connect(openAct, SIGNAL(triggered()), this, SLOT(open()));
+
+ saveAct = new QAction(tr("&Save"), this);
+ saveAct->setIcon(QIcon(iconPath + "filesave.png"));
+ saveAct->setShortcut(tr("Ctrl+S"));
+ saveAct->setStatusTip(tr("Save the current File"));
+ connect(saveAct, SIGNAL(triggered()), this, SLOT(save()));
+
+ saveAsAct = new QAction(tr("Save &As"), this);
+ saveAsAct->setIcon(QIcon(iconPath + "filesaveas.png"));
+ saveAsAct->setStatusTip(tr("Save the current File as..."));
+ connect(saveAsAct, SIGNAL(triggered()), this, SLOT(saveAs()));
+
+ printAct = new QAction(tr("&Print"), this);
+ printAct->setIcon(QIcon(iconPath + "fileprint.png"));
+ printAct->setShortcut(tr("Ctrl+P"));
+ printAct->setStatusTip(tr("Print Document"));
+ connect(printAct, SIGNAL(triggered()), this, SLOT(print()));
+
+ quitAct = new QAction(tr("&Quit"), this);
+ quitAct->setShortcut(tr("Ctrl+Q"));
+ quitAct->setIcon(QIcon(iconPath + "exit.png"));
+ quitAct->setStatusTip(tr("Quit Program"));
+ connect(quitAct, SIGNAL(triggered()), this, SLOT(close()));
+
+ /** Edit Menu
+ */
+ pasteAct = new QAction(tr("&Paste"), this);
+ pasteAct->setIcon(QIcon(iconPath + "button_paste.png"));
+ pasteAct->setShortcut(tr("Ctrl+V"));
+ pasteAct->setStatusTip(tr("Paste Text From Clipboard"));
+ connect(pasteAct, SIGNAL(triggered()), edit, SLOT(paste()));
+
+ cutAct = new QAction(tr("Cu&t"), this);
+ cutAct->setIcon(QIcon(iconPath + "button_cut.png"));
+ cutAct->setShortcut(tr("Ctrl+X"));
+ cutAct->setStatusTip(tr("Cut the current selection's contents to the "
+ "clipboard"));
+ connect(cutAct, SIGNAL(triggered()), edit, SLOT(cut()));
+
+ copyAct = new QAction(tr("&Copy"), this);
+ copyAct->setIcon(QIcon(iconPath + "button_copy.png"));
+ copyAct->setShortcut(tr("Ctrl+C"));
+ copyAct->setStatusTip(tr("Copy the current selection's contents to the "
+ "clipboard"));
+ connect(copyAct, SIGNAL(triggered()), edit, SLOT(copy()));
+
+ selectallAct = new QAction(tr("Select &All"), this);
+ selectallAct->setIcon(QIcon(iconPath + "edit.png"));
+ selectallAct->setShortcut(tr("Ctrl+A"));
+ selectallAct->setStatusTip(tr("Select the whole text"));
+ connect(selectallAct, SIGNAL(triggered()), edit, SLOT(selectAll()));
+
+ /** Crypt Menu
+ */
+ encryptAct = new QAction(tr("&Encrypt"), this);
+ encryptAct->setIcon(QIcon(iconPath + "encrypted.png"));
+ encryptAct->setShortcut(tr("Ctrl+E"));
+ encryptAct->setStatusTip(tr("Encrypt Message"));
+ connect(encryptAct, SIGNAL(triggered()), this, SLOT(encrypt()));
+
+ decryptAct = new QAction(tr("&Decrypt"), this);
+ decryptAct->setIcon(QIcon(iconPath + "decrypted.png"));
+ decryptAct->setShortcut(tr("Ctrl+D"));
+ decryptAct->setStatusTip(tr("Decrypt Message"));
+ connect(decryptAct, SIGNAL(triggered()), this, SLOT(decrypt()));
+
+ importKeyFromFileAct = new QAction(tr("&Import Key From File"), this);
+ importKeyFromFileAct->setIcon(QIcon(iconPath + "kgpg_import.png"));
+ importKeyFromFileAct->setShortcut(tr("Ctrl+I"));
+ importKeyFromFileAct->setStatusTip(tr("Import New Key From File"));
+ connect(importKeyFromFileAct, SIGNAL(triggered()), this, SLOT(importKeyFromFile()));
+
+ importKeyFromEditAct = new QAction(tr("Import Key From &Editor"), this);
+ importKeyFromEditAct->setIcon(QIcon(iconPath + "importkey_editor.png"));
+ importKeyFromEditAct->setStatusTip(tr("Import New Key From Editor"));
+ connect(importKeyFromEditAct, SIGNAL(triggered()), this, SLOT(importKeyFromEdit()));
+
+ /** About Menu
+ */
+ aboutAct = new QAction(tr("&About"), this);
+ aboutAct->setIcon(QIcon(iconPath + "help.png"));
+ aboutAct->setStatusTip(tr("Show the application's About box"));
+ connect(aboutAct, SIGNAL(triggered()), this, SLOT(about()));
+}
+
+void GpgWin::createMenus()
+{
+ fileMenu = menuBar()->addMenu(tr("&File"));
+ fileMenu->addAction(openAct);
+ fileMenu->addAction(saveAct);
+ fileMenu->addAction(saveAsAct);
+ fileMenu->addAction(printAct);
+ fileMenu->addSeparator();
+ fileMenu->addAction(quitAct);
+
+ fileMenu = menuBar()->addMenu(tr("&Edit"));
+ fileMenu->addAction(copyAct);
+ fileMenu->addAction(cutAct);
+ fileMenu->addAction(pasteAct);
+ fileMenu->addAction(selectallAct);
+
+ fileMenu = menuBar()->addMenu(tr("&Crypt"));
+ fileMenu->addAction(encryptAct);
+ fileMenu->addAction(decryptAct);
+ fileMenu->addSeparator();
+ fileMenu->addAction(importKeyFromFileAct);
+ fileMenu->addAction(importKeyFromEditAct);
+
+ fileMenu = menuBar()->addMenu(tr("&Help"));
+ fileMenu->addAction(aboutAct);
+}
+
+void GpgWin::createToolBars()
+{
+ fileToolBar = addToolBar(tr("File"));
+ fileToolBar->addAction(encryptAct);
+ fileToolBar->addAction(decryptAct);
+
+ editToolBar = addToolBar(tr("Edit"));
+ editToolBar->addAction(copyAct);
+ editToolBar->addAction(pasteAct);
+ editToolBar->addAction(selectallAct);
+}
+
+void GpgWin::createStatusBar()
+{
+ statusBar()->showMessage(tr("Ready"));
+}
+
+void GpgWin::createDockWindows()
+{
+ QDockWidget *dock = new QDockWidget(tr("Encrypt for:"), this);
+ dock->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea);
+ addDockWidget(Qt::RightDockWidgetArea, dock);
+ dock->setWidget(m_keyList);
+}
+
+void GpgWin::closeEvent(QCloseEvent *event)
+{
+ if (maybeSave()) {
+ event->accept();
+ } else {
+ event->ignore();
+ }
+}
+
+void GpgWin::open()
+{
+ if (maybeSave()) {
+ QString fileName = QFileDialog::getOpenFileName(this);
+ if (!fileName.isEmpty())
+ loadFile(fileName);
+ }
+}
+
+bool GpgWin::save()
+{
+ if (curFile.isEmpty()) {
+ return saveAs();
+ } else {
+ return saveFile(curFile);
+ }
+}
+
+bool GpgWin::saveAs()
+{
+ QString fileName = QFileDialog::getSaveFileName(this);
+ if (fileName.isEmpty())
+ return false;
+
+ return saveFile(fileName);
+}
+
+void GpgWin::loadFile(const QString &fileName)
+{
+ QFile file(fileName);
+ if (!file.open(QFile::ReadOnly | QFile::Text)) {
+ QMessageBox::warning(this, tr("Application"),
+ tr("Cannot read file %1:\n%2.")
+ .arg(fileName)
+ .arg(file.errorString()));
+ return;
+ }
+
+ QTextStream in(&file);
+ QApplication::setOverrideCursor(Qt::WaitCursor);
+ edit->setPlainText(in.readAll());
+ QApplication::restoreOverrideCursor();
+
+ setCurrentFile(fileName);
+ statusBar()->showMessage(tr("File loaded"), 2000);
+}
+
+void GpgWin::setCurrentFile(const QString &fileName)
+{
+ curFile = fileName;
+ edit->document()->setModified(false);
+ setWindowModified(false);
+
+ QString shownName;
+ if (curFile.isEmpty())
+ shownName = tr("untitled.txt");
+ else
+ shownName = strippedName(curFile);
+
+ setWindowTitle(tr("%1[*] - %2").arg(shownName).arg(qApp->applicationName()));
+}
+
+QString GpgWin::strippedName(const QString &fullFileName)
+{
+ return QFileInfo(fullFileName).fileName();
+}
+
+bool GpgWin::maybeSave()
+{
+ if (edit->document()->isModified()) {
+ QMessageBox::StandardButton ret;
+ ret = QMessageBox::warning(this, tr("Application"),
+ tr("The document has been modified.\nDo you want to save your changes?"),
+ QMessageBox::Save | QMessageBox::Discard | QMessageBox::Cancel);
+ if (ret == QMessageBox::Save)
+ return save();
+ else if (ret == QMessageBox::Cancel)
+ return false;
+ }
+ return true;
+}
+
+bool GpgWin::saveFile(const QString &fileName)
+{
+ QFile file(fileName);
+ if (!file.open(QFile::WriteOnly | QFile::Text)) {
+ QMessageBox::warning(this, tr("File"),
+ tr("Cannot write file %1:\n%2.")
+ .arg(fileName)
+ .arg(file.errorString()));
+ return false;
+ }
+ QTextStream out(&file);
+ QApplication::setOverrideCursor(Qt::WaitCursor);
+ out << edit->toPlainText();
+ QApplication::restoreOverrideCursor();
+ statusBar()->showMessage(tr("Saved '%1'").arg(fileName), 2000);
+ return true;
+}
+
+void GpgWin::print()
+{
+#ifndef QT_NO_PRINTER
+ QTextDocument *document = edit->document();
+ QPrinter printer;
+
+ QPrintDialog *dlg = new QPrintDialog(&printer, this);
+ if (dlg->exec() != QDialog::Accepted)
+ return;
+
+ document->print(&printer);
+
+ statusBar()->showMessage(tr("Ready"), 2000);
+#endif
+}
+
+void GpgWin::about()
+{
+ QMessageBox::about(this, tr("About ") + qApp->applicationName(),
+ "<center><h2>" + qApp->applicationName() + " "
+ + qApp->applicationVersion() +"</h2></center>"
+ +tr("<center>This Application allows you to do simple<br>"
+ "encryption/decryption of your text-files.<br>"
+ "It's licensed under the GPL v2.0<br><br>"
+ "<b>Developer:</b><br>"
+ "Bene, Heimer, Juergen, Nils, Ubbo<br><br>"
+ "If you have any questions and/or<br>"
+ "suggestions, contact us at<br>"
+ "gpg4usb at cpunk.de</a><br><br>"
+ "or feel free to meet us in our channel at<br>"
+ "gpg4usb at conference.jabber.ccc.de<br><br>"
+ "and always remember:<br>"
+ "cpunk is NOT a bot...</center>"));
+}
+
+void GpgWin::encrypt()
+{
+ QList<QString> *uidList = m_keyList->getChecked();
+
+ QByteArray *tmp = new QByteArray();
+ if (myCtx->encrypt(uidList, edit->toPlainText().toAscii(), tmp)) {
+ QString *tmp2 = new QString(*tmp);
+ edit->setPlainText(*tmp2);
+ }
+
+}
+
+void GpgWin::decrypt()
+{
+ QByteArray *tmp = new QByteArray();
+ myCtx->decrypt(edit->toPlainText().toAscii(), tmp);
+ if (!tmp->isEmpty()) {
+ QString *tmp2 = new QString(*tmp);
+ edit->setPlainText(*tmp2);
+ }
+}
+
+void GpgWin::importKeyFromEdit()
+{
+ myCtx->importKey(edit->toPlainText().toAscii());
+ m_keyList->refresh();
+}
+
+
+void GpgWin::importKeyFromFile()
+{
+ QString fileName = QFileDialog::getOpenFileName(this, tr("Open Key"), "", tr("Key Files") + " (*.asc *.txt);;All Files (*.*)");
+ if (! fileName.isNull()) {
+ QFile file;
+ file.setFileName(fileName);
+ if (!file.open(QIODevice::ReadOnly)) {
+ qDebug() << tr("couldn't open file: ") + fileName;
+ }
+ QByteArray inBuffer = file.readAll();
+
+ myCtx->importKey(inBuffer);
+ m_keyList->refresh();
+ }
+}
+
diff --git a/gpgwin.h b/gpgwin.h
new file mode 100644
index 0000000..975c87a
--- /dev/null
+++ b/gpgwin.h
@@ -0,0 +1,87 @@
+/*
+ * gpgwin.h
+ *
+ * Copyright 2008 gpg4usb-team <[email protected]>
+ *
+ * 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., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+#include <QWidget>
+#include <QMainWindow>
+#include <QtGui>
+#include "context.h"
+#include "keylist.h"
+
+class QAction;
+class QMenu;
+class QPlainTextEdit;
+
+class GpgWin : public QMainWindow
+{
+ Q_OBJECT
+
+public:
+ GpgWin();
+
+protected:
+ void closeEvent(QCloseEvent *event);
+
+public slots:
+ void encrypt();
+ void decrypt();
+ void importKeyFromFile();
+ void importKeyFromEdit();
+ void print();
+ void about();
+ bool save();
+ bool saveAs();
+ void open();
+
+private:
+ void createActions();
+ void createMenus();
+ void createToolBars();
+ void createStatusBar();
+ void createDockWindows();
+ bool saveFile(const QString &fileName);
+ void loadFile(const QString &fileName);
+ void setCurrentFile(const QString &fileName);
+ bool maybeSave();
+ QString strippedName(const QString &fullFileName);
+
+ QPlainTextEdit *edit;
+ QMenu *fileMenu;
+ QToolBar *fileToolBar;
+ QToolBar *editToolBar;
+ QAction *openAct;
+ QAction *saveAct;
+ QAction *saveAsAct;
+ QAction *printAct;
+ QAction *quitAct;
+ QAction *encryptAct;
+ QAction *decryptAct;
+ QAction *importKeyFromFileAct;
+ QAction *importKeyFromEditAct;
+ QAction *copyAct;
+ QAction *cutAct;
+ QAction *pasteAct;
+ QAction *selectallAct;
+ QAction *aboutAct;
+
+ QString curFile;
+ KeyList *m_keyList;
+ GpgME::Context *myCtx;
+ QString iconPath;
+};
diff --git a/keylist.cpp b/keylist.cpp
new file mode 100644
index 0000000..710afc7
--- /dev/null
+++ b/keylist.cpp
@@ -0,0 +1,129 @@
+/*
+ * keylist.cpp
+ *
+ * Copyright 2008 gpg4usb-team <[email protected]>
+ *
+ * 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., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+#include <QWidget>
+#include <QVBoxLayout>
+#include <QListWidgetItem>
+#include <QLabel>
+#include <QMessageBox>
+#include <QtGui>
+#include "keylist.h"
+
+KeyList::KeyList(QWidget *parent)
+ : QWidget(parent)
+{
+ m_keyList = new QListWidget();
+ m_idList = new QList<QString>();
+ m_deleteButton = new QPushButton(tr("Delete Selected Keys"));
+
+ connect(m_deleteButton, SIGNAL(clicked()), this, SLOT(deleteKeys()));
+
+ QVBoxLayout *layout = new QVBoxLayout;
+ layout->addWidget(m_keyList);
+ layout->addWidget(m_deleteButton);
+ setLayout(layout);
+ createActions();
+
+}
+
+void KeyList::setContext(GpgME::Context *ctx)
+{
+ m_ctx = ctx;
+ refresh();
+}
+
+void KeyList::setIconPath(QString path)
+{
+ this->iconPath = path;
+}
+
+void KeyList::contextMenuEvent(QContextMenuEvent *event)
+{
+ QMenu menu(this);
+ menu.addAction(deleteKeyAct);
+ menu.exec(event->globalPos());
+}
+
+void KeyList::refresh()
+{
+ m_keyList->clear();
+ m_idList->clear();
+
+ GpgKeyList keys = m_ctx->listKeys();
+ GpgKeyList::iterator it = keys.begin();
+ while (it != keys.end()) {
+ QListWidgetItem *tmp = new QListWidgetItem(
+ it->name + " <" + it->email + ">"
+ );
+ tmp->setFlags(Qt::ItemIsUserCheckable | Qt::ItemIsEnabled | Qt::ItemIsSelectable);
+ tmp->setCheckState(Qt::Unchecked);
+ if (it->privkey == 1) tmp->setIcon(QIcon(iconPath + "kgpg_key2.png"));
+ m_keyList->addItem(tmp);
+
+ *m_idList << QString(it->id);
+ it++;
+ }
+}
+
+
+QList<QString> *KeyList::getChecked()
+{
+ QList<QString> *ret = new QList<QString>();
+ for (int i = 0; i < m_keyList->count(); i++) {
+ if (m_keyList->item(i)->checkState() == Qt::Checked) {
+ *ret << m_idList->at(i);
+ }
+ }
+ return ret;
+}
+
+QList<QString> *KeyList::getSelected()
+{
+ QList<QString> *ret = new QList<QString>();
+ for (int i = 0; i < m_keyList->count(); i++) {
+ if (m_keyList->item(i)->isSelected() == 1) {
+ *ret << m_idList->at(i);
+ }
+ }
+ return ret;
+}
+
+void KeyList::deleteKeys()
+{
+
+ m_ctx->deleteKeys(getChecked());
+ refresh();
+
+}
+
+void KeyList::deleteKey()
+{
+
+ m_ctx->deleteKeys(getSelected());
+ refresh();
+
+}
+
+void KeyList::createActions()
+{
+ deleteKeyAct = new QAction(tr("Delete Key"), this);
+ deleteKeyAct->setStatusTip(tr("Delete the selected keys"));
+ connect(deleteKeyAct, SIGNAL(triggered()), this, SLOT(deleteKey()));
+}
diff --git a/keylist.h b/keylist.h
new file mode 100644
index 0000000..2dec360
--- /dev/null
+++ b/keylist.h
@@ -0,0 +1,55 @@
+/*
+ * keylist.h
+ *
+ * Copyright 2008 gpg4usb-team <[email protected]>
+ *
+ * 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., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+#include <QWidget>
+#include <QListWidget>
+#include <QPushButton>
+#include "context.h"
+
+class QMenu;
+
+class KeyList : public QWidget
+{
+ Q_OBJECT
+
+public slots:
+ void deleteKeys();
+ void deleteKey();
+
+public:
+ KeyList(QWidget *parent = 0);
+ void setContext(GpgME::Context *ctx);
+ void setIconPath(QString iconPath);
+ QList<QString> *getChecked();
+ QList<QString> *getSelected();
+ void refresh();
+
+private:
+ GpgME::Context *m_ctx;
+ QListWidget *m_keyList;
+ QList<QString> *m_idList;
+ QPushButton *m_deleteButton;
+ QAction *deleteKeyAct;
+ void createActions();
+ QString iconPath;
+
+protected:
+ void contextMenuEvent(QContextMenuEvent *event);
+};
diff --git a/lib/libgpgme.a b/lib/libgpgme.a
new file mode 100644
index 0000000..2f164f0
--- /dev/null
+++ b/lib/libgpgme.a
Binary files differ
diff --git a/main.cpp b/main.cpp
new file mode 100644
index 0000000..17b2400
--- /dev/null
+++ b/main.cpp
@@ -0,0 +1,54 @@
+/*
+ * main.cpp
+ *
+ * Copyright 2008 gpg4usb-team <[email protected]>
+ *
+ * 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., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#include <QApplication>
+#include "gpgwin.h"
+
+int main(int argc, char *argv[])
+{
+
+#ifndef _WIN32
+ // do not use GPG_AGENTS like seahorse, because they may save
+ // a password an pc's not owned by user
+ unsetenv("GPG_AGENT_INFO");
+#endif
+
+ QApplication app(argc, argv);
+
+ app.setApplicationVersion("0.1");
+ app.setApplicationName("gpg4usb");
+
+ //internationalize
+ QString locale = QLocale::system().name();
+ QTranslator translator;
+ translator.load(QString("ts/gpg4usb_") + locale);
+ app.installTranslator(&translator);
+
+ GpgWin *window = new GpgWin();
+ window->resize(800, 450);
+
+ window->show();
+
+ return app.exec();
+}
+
+
+
diff --git a/release/COPYING b/release/COPYING
new file mode 100644
index 0000000..94fb846
--- /dev/null
+++ b/release/COPYING
@@ -0,0 +1,339 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 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 Lesser 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.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 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 Lesser General
+Public License instead of this License.
diff --git a/release/README b/release/README
new file mode 100644
index 0000000..ba5b274
--- /dev/null
+++ b/release/README
@@ -0,0 +1,45 @@
+ABOUT
+-----
+gpg4usb is an easy to use, small portable editor with the possibility
+to encrypt and decrypt any text-message or -file you want. For encryption it acts as
+a gpg-frontend (http://gnupg.org/). Its intend is to be used from an usb-stick,
+running on Windows(TM) and Linux. Providing a mac-binary is on our TODO-list.
+
+Our aim is, to give anyone the possibility to send and receive secure encrypted
+messages anywhere - on any computer out there, no matter if Microsoft Windows(TM)
+or Linux is running on it. Therefore it's usage should be self-describing, and the
+user-interface is kept as simple as possible.
+
+Of course gpg4usb is open source, as are included libs and binaries.
+
+OBTAINING
+---------
+You can get prepacked zip-files from http://gpg4usb.cpunk.de/download.html .
+For retrieving the source checkout http://cpunk.de/svn/src/ .
+
+HOWTO USE
+---------
+1. Unzip gpg4usblib.zip on your usb-stick.
+2. start programm with start_windows.exe or start_linux (depending on your os)
+3. import your private key and some public keys
+4. enjoy portable encryption ;-)
+
+CONTACT
+-------
+If you have any questions and/or suggestions contact us at
[email protected] - or feel free to meet us at [email protected]
+
+Our homepage is located at http://gpg4usb.cpunk.de .
+
+LICENSES
+--------
+gpg4usblib itself is licensed under the GPL (see COPYING).
+
+There are some libries and the gpg-binary included in the zip-file / a static
+gpg-build which (may) have different licenses, for more information check
+their homepages. You can also obtain the sources from there.
+
+GPG: http://gnupg.org/
+QT: http://trolltech.no/ , http://trolltech.no/downloads/opensource
+
+Iconset used is Nuvola (http://icon-king.com/?p=15), which has a LGPL License
diff --git a/release/bin/COPYING.txt b/release/bin/COPYING.txt
new file mode 100644
index 0000000..5b244d5
--- /dev/null
+++ b/release/bin/COPYING.txt
@@ -0,0 +1,676 @@
+
+ GNU GENERAL PUBLIC LICENSE
+ Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The GNU General Public License is a free, copyleft license for
+software and other kinds of works.
+
+ The licenses for most software and other practical works are designed
+to take away your freedom to share and change the works. By contrast,
+the GNU General Public License is intended to guarantee your freedom to
+share and change all versions of a program--to make sure it remains free
+software for all its users. We, the Free Software Foundation, use the
+GNU General Public License for most of our software; it applies also to
+any other work released this way by its authors. You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+them if you wish), that you receive source code or can get it if you
+want it, that you can change the software or use pieces of it in new
+free programs, and that you know you can do these things.
+
+ To protect your rights, we need to prevent others from denying you
+these rights or asking you to surrender the rights. Therefore, you have
+certain responsibilities if you distribute copies of the software, or if
+you modify it: responsibilities to respect the freedom of others.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must pass on to the recipients the same
+freedoms that you received. You must make sure that they, too, receive
+or can get the source code. And you must show them these terms so they
+know their rights.
+
+ Developers that use the GNU GPL protect your rights with two steps:
+(1) assert copyright on the software, and (2) offer you this License
+giving you legal permission to copy, distribute and/or modify it.
+
+ For the developers' and authors' protection, the GPL clearly explains
+that there is no warranty for this free software. For both users' and
+authors' sake, the GPL requires that modified versions be marked as
+changed, so that their problems will not be attributed erroneously to
+authors of previous versions.
+
+ Some devices are designed to deny users access to install or run
+modified versions of the software inside them, although the manufacturer
+can do so. This is fundamentally incompatible with the aim of
+protecting users' freedom to change the software. The systematic
+pattern of such abuse occurs in the area of products for individuals to
+use, which is precisely where it is most unacceptable. Therefore, we
+have designed this version of the GPL to prohibit the practice for those
+products. If such problems arise substantially in other domains, we
+stand ready to extend this provision to those domains in future versions
+of the GPL, as needed to protect the freedom of users.
+
+ Finally, every program is threatened constantly by software patents.
+States should not allow patents to restrict development and use of
+software on general-purpose computers, but in those that do, we wish to
+avoid the special danger that patents applied to a free program could
+make it effectively proprietary. To prevent this, the GPL assures that
+patents cannot be used to render the program non-free.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ TERMS AND CONDITIONS
+
+ 0. Definitions.
+
+ "This License" refers to version 3 of the GNU General Public License.
+
+ "Copyright" also means copyright-like laws that apply to other kinds of
+works, such as semiconductor masks.
+
+ "The Program" refers to any copyrightable work licensed under this
+License. Each licensee is addressed as "you". "Licensees" and
+"recipients" may be individuals or organizations.
+
+ To "modify" a work means to copy from or adapt all or part of the work
+in a fashion requiring copyright permission, other than the making of an
+exact copy. The resulting work is called a "modified version" of the
+earlier work or a work "based on" the earlier work.
+
+ A "covered work" means either the unmodified Program or a work based
+on the Program.
+
+ To "propagate" a work means to do anything with it that, without
+permission, would make you directly or secondarily liable for
+infringement under applicable copyright law, except executing it on a
+computer or modifying a private copy. Propagation includes copying,
+distribution (with or without modification), making available to the
+public, and in some countries other activities as well.
+
+ To "convey" a work means any kind of propagation that enables other
+parties to make or receive copies. Mere interaction with a user through
+a computer network, with no transfer of a copy, is not conveying.
+
+ An interactive user interface displays "Appropriate Legal Notices"
+to the extent that it includes a convenient and prominently visible
+feature that (1) displays an appropriate copyright notice, and (2)
+tells the user that there is no warranty for the work (except to the
+extent that warranties are provided), that licensees may convey the
+work under this License, and how to view a copy of this License. If
+the interface presents a list of user commands or options, such as a
+menu, a prominent item in the list meets this criterion.
+
+ 1. Source Code.
+
+ The "source code" for a work means the preferred form of the work
+for making modifications to it. "Object code" means any non-source
+form of a work.
+
+ A "Standard Interface" means an interface that either is an official
+standard defined by a recognized standards body, or, in the case of
+interfaces specified for a particular programming language, one that
+is widely used among developers working in that language.
+
+ The "System Libraries" of an executable work include anything, other
+than the work as a whole, that (a) is included in the normal form of
+packaging a Major Component, but which is not part of that Major
+Component, and (b) serves only to enable use of the work with that
+Major Component, or to implement a Standard Interface for which an
+implementation is available to the public in source code form. A
+"Major Component", in this context, means a major essential component
+(kernel, window system, and so on) of the specific operating system
+(if any) on which the executable work runs, or a compiler used to
+produce the work, or an object code interpreter used to run it.
+
+ The "Corresponding Source" for a work in object code form means all
+the source code needed to generate, install, and (for an executable
+work) run the object code and to modify the work, including scripts to
+control those activities. However, it does not include the work's
+System Libraries, or general-purpose tools or generally available free
+programs which are used unmodified in performing those activities but
+which are not part of the work. For example, Corresponding Source
+includes interface definition files associated with source files for
+the work, and the source code for shared libraries and dynamically
+linked subprograms that the work is specifically designed to require,
+such as by intimate data communication or control flow between those
+subprograms and other parts of the work.
+
+ The Corresponding Source need not include anything that users
+can regenerate automatically from other parts of the Corresponding
+Source.
+
+ The Corresponding Source for a work in source code form is that
+same work.
+
+ 2. Basic Permissions.
+
+ All rights granted under this License are granted for the term of
+copyright on the Program, and are irrevocable provided the stated
+conditions are met. This License explicitly affirms your unlimited
+permission to run the unmodified Program. The output from running a
+covered work is covered by this License only if the output, given its
+content, constitutes a covered work. This License acknowledges your
+rights of fair use or other equivalent, as provided by copyright law.
+
+ You may make, run and propagate covered works that you do not
+convey, without conditions so long as your license otherwise remains
+in force. You may convey covered works to others for the sole purpose
+of having them make modifications exclusively for you, or provide you
+with facilities for running those works, provided that you comply with
+the terms of this License in conveying all material for which you do
+not control copyright. Those thus making or running the covered works
+for you must do so exclusively on your behalf, under your direction
+and control, on terms that prohibit them from making any copies of
+your copyrighted material outside their relationship with you.
+
+ Conveying under any other circumstances is permitted solely under
+the conditions stated below. Sublicensing is not allowed; section 10
+makes it unnecessary.
+
+ 3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+
+ No covered work shall be deemed part of an effective technological
+measure under any applicable law fulfilling obligations under article
+11 of the WIPO copyright treaty adopted on 20 December 1996, or
+similar laws prohibiting or restricting circumvention of such
+measures.
+
+ When you convey a covered work, you waive any legal power to forbid
+circumvention of technological measures to the extent such circumvention
+is effected by exercising rights under this License with respect to
+the covered work, and you disclaim any intention to limit operation or
+modification of the work as a means of enforcing, against the work's
+users, your or third parties' legal rights to forbid circumvention of
+technological measures.
+
+ 4. Conveying Verbatim Copies.
+
+ You may convey verbatim copies of the Program's source code as you
+receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice;
+keep intact all notices stating that this License and any
+non-permissive terms added in accord with section 7 apply to the code;
+keep intact all notices of the absence of any warranty; and give all
+recipients a copy of this License along with the Program.
+
+ You may charge any price or no price for each copy that you convey,
+and you may offer support or warranty protection for a fee.
+
+ 5. Conveying Modified Source Versions.
+
+ You may convey a work based on the Program, or the modifications to
+produce it from the Program, in the form of source code under the
+terms of section 4, provided that you also meet all of these conditions:
+
+ a) The work must carry prominent notices stating that you modified
+ it, and giving a relevant date.
+
+ b) The work must carry prominent notices stating that it is
+ released under this License and any conditions added under section
+ 7. This requirement modifies the requirement in section 4 to
+ "keep intact all notices".
+
+ c) You must license the entire work, as a whole, under this
+ License to anyone who comes into possession of a copy. This
+ License will therefore apply, along with any applicable section 7
+ additional terms, to the whole of the work, and all its parts,
+ regardless of how they are packaged. This License gives no
+ permission to license the work in any other way, but it does not
+ invalidate such permission if you have separately received it.
+
+ d) If the work has interactive user interfaces, each must display
+ Appropriate Legal Notices; however, if the Program has interactive
+ interfaces that do not display Appropriate Legal Notices, your
+ work need not make them do so.
+
+ A compilation of a covered work with other separate and independent
+works, which are not by their nature extensions of the covered work,
+and which are not combined with it such as to form a larger program,
+in or on a volume of a storage or distribution medium, is called an
+"aggregate" if the compilation and its resulting copyright are not
+used to limit the access or legal rights of the compilation's users
+beyond what the individual works permit. Inclusion of a covered work
+in an aggregate does not cause this License to apply to the other
+parts of the aggregate.
+
+ 6. Conveying Non-Source Forms.
+
+ You may convey a covered work in object code form under the terms
+of sections 4 and 5, provided that you also convey the
+machine-readable Corresponding Source under the terms of this License,
+in one of these ways:
+
+ a) Convey the object code in, or embodied in, a physical product
+ (including a physical distribution medium), accompanied by the
+ Corresponding Source fixed on a durable physical medium
+ customarily used for software interchange.
+
+ b) Convey the object code in, or embodied in, a physical product
+ (including a physical distribution medium), accompanied by a
+ written offer, valid for at least three years and valid for as
+ long as you offer spare parts or customer support for that product
+ model, to give anyone who possesses the object code either (1) a
+ copy of the Corresponding Source for all the software in the
+ product that is covered by this License, on a durable physical
+ medium customarily used for software interchange, for a price no
+ more than your reasonable cost of physically performing this
+ conveying of source, or (2) access to copy the
+ Corresponding Source from a network server at no charge.
+
+ c) Convey individual copies of the object code with a copy of the
+ written offer to provide the Corresponding Source. This
+ alternative is allowed only occasionally and noncommercially, and
+ only if you received the object code with such an offer, in accord
+ with subsection 6b.
+
+ d) Convey the object code by offering access from a designated
+ place (gratis or for a charge), and offer equivalent access to the
+ Corresponding Source in the same way through the same place at no
+ further charge. You need not require recipients to copy the
+ Corresponding Source along with the object code. If the place to
+ copy the object code is a network server, the Corresponding Source
+ may be on a different server (operated by you or a third party)
+ that supports equivalent copying facilities, provided you maintain
+ clear directions next to the object code saying where to find the
+ Corresponding Source. Regardless of what server hosts the
+ Corresponding Source, you remain obligated to ensure that it is
+ available for as long as needed to satisfy these requirements.
+
+ e) Convey the object code using peer-to-peer transmission, provided
+ you inform other peers where the object code and Corresponding
+ Source of the work are being offered to the general public at no
+ charge under subsection 6d.
+
+ A separable portion of the object code, whose source code is excluded
+from the Corresponding Source as a System Library, need not be
+included in conveying the object code work.
+
+ A "User Product" is either (1) a "consumer product", which means any
+tangible personal property which is normally used for personal, family,
+or household purposes, or (2) anything designed or sold for incorporation
+into a dwelling. In determining whether a product is a consumer product,
+doubtful cases shall be resolved in favor of coverage. For a particular
+product received by a particular user, "normally used" refers to a
+typical or common use of that class of product, regardless of the status
+of the particular user or of the way in which the particular user
+actually uses, or expects or is expected to use, the product. A product
+is a consumer product regardless of whether the product has substantial
+commercial, industrial or non-consumer uses, unless such uses represent
+the only significant mode of use of the product.
+
+ "Installation Information" for a User Product means any methods,
+procedures, authorization keys, or other information required to install
+and execute modified versions of a covered work in that User Product from
+a modified version of its Corresponding Source. The information must
+suffice to ensure that the continued functioning of the modified object
+code is in no case prevented or interfered with solely because
+modification has been made.
+
+ If you convey an object code work under this section in, or with, or
+specifically for use in, a User Product, and the conveying occurs as
+part of a transaction in which the right of possession and use of the
+User Product is transferred to the recipient in perpetuity or for a
+fixed term (regardless of how the transaction is characterized), the
+Corresponding Source conveyed under this section must be accompanied
+by the Installation Information. But this requirement does not apply
+if neither you nor any third party retains the ability to install
+modified object code on the User Product (for example, the work has
+been installed in ROM).
+
+ The requirement to provide Installation Information does not include a
+requirement to continue to provide support service, warranty, or updates
+for a work that has been modified or installed by the recipient, or for
+the User Product in which it has been modified or installed. Access to a
+network may be denied when the modification itself materially and
+adversely affects the operation of the network or violates the rules and
+protocols for communication across the network.
+
+ Corresponding Source conveyed, and Installation Information provided,
+in accord with this section must be in a format that is publicly
+documented (and with an implementation available to the public in
+source code form), and must require no special password or key for
+unpacking, reading or copying.
+
+ 7. Additional Terms.
+
+ "Additional permissions" are terms that supplement the terms of this
+License by making exceptions from one or more of its conditions.
+Additional permissions that are applicable to the entire Program shall
+be treated as though they were included in this License, to the extent
+that they are valid under applicable law. If additional permissions
+apply only to part of the Program, that part may be used separately
+under those permissions, but the entire Program remains governed by
+this License without regard to the additional permissions.
+
+ When you convey a copy of a covered work, you may at your option
+remove any additional permissions from that copy, or from any part of
+it. (Additional permissions may be written to require their own
+removal in certain cases when you modify the work.) You may place
+additional permissions on material, added by you to a covered work,
+for which you have or can give appropriate copyright permission.
+
+ Notwithstanding any other provision of this License, for material you
+add to a covered work, you may (if authorized by the copyright holders of
+that material) supplement the terms of this License with terms:
+
+ a) Disclaiming warranty or limiting liability differently from the
+ terms of sections 15 and 16 of this License; or
+
+ b) Requiring preservation of specified reasonable legal notices or
+ author attributions in that material or in the Appropriate Legal
+ Notices displayed by works containing it; or
+
+ c) Prohibiting misrepresentation of the origin of that material, or
+ requiring that modified versions of such material be marked in
+ reasonable ways as different from the original version; or
+
+ d) Limiting the use for publicity purposes of names of licensors or
+ authors of the material; or
+
+ e) Declining to grant rights under trademark law for use of some
+ trade names, trademarks, or service marks; or
+
+ f) Requiring indemnification of licensors and authors of that
+ material by anyone who conveys the material (or modified versions of
+ it) with contractual assumptions of liability to the recipient, for
+ any liability that these contractual assumptions directly impose on
+ those licensors and authors.
+
+ All other non-permissive additional terms are considered "further
+restrictions" within the meaning of section 10. If the Program as you
+received it, or any part of it, contains a notice stating that it is
+governed by this License along with a term that is a further
+restriction, you may remove that term. If a license document contains
+a further restriction but permits relicensing or conveying under this
+License, you may add to a covered work material governed by the terms
+of that license document, provided that the further restriction does
+not survive such relicensing or conveying.
+
+ If you add terms to a covered work in accord with this section, you
+must place, in the relevant source files, a statement of the
+additional terms that apply to those files, or a notice indicating
+where to find the applicable terms.
+
+ Additional terms, permissive or non-permissive, may be stated in the
+form of a separately written license, or stated as exceptions;
+the above requirements apply either way.
+
+ 8. Termination.
+
+ You may not propagate or modify a covered work except as expressly
+provided under this License. Any attempt otherwise to propagate or
+modify it is void, and will automatically terminate your rights under
+this License (including any patent licenses granted under the third
+paragraph of section 11).
+
+ However, if you cease all violation of this License, then your
+license from a particular copyright holder is reinstated (a)
+provisionally, unless and until the copyright holder explicitly and
+finally terminates your license, and (b) permanently, if the copyright
+holder fails to notify you of the violation by some reasonable means
+prior to 60 days after the cessation.
+
+ Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+
+ Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License. If your rights have been terminated and not permanently
+reinstated, you do not qualify to receive new licenses for the same
+material under section 10.
+
+ 9. Acceptance Not Required for Having Copies.
+
+ You are not required to accept this License in order to receive or
+run a copy of the Program. Ancillary propagation of a covered work
+occurring solely as a consequence of using peer-to-peer transmission
+to receive a copy likewise does not require acceptance. However,
+nothing other than this License grants you permission to propagate or
+modify any covered work. These actions infringe copyright if you do
+not accept this License. Therefore, by modifying or propagating a
+covered work, you indicate your acceptance of this License to do so.
+
+ 10. Automatic Licensing of Downstream Recipients.
+
+ Each time you convey a covered work, the recipient automatically
+receives a license from the original licensors, to run, modify and
+propagate that work, subject to this License. You are not responsible
+for enforcing compliance by third parties with this License.
+
+ An "entity transaction" is a transaction transferring control of an
+organization, or substantially all assets of one, or subdividing an
+organization, or merging organizations. If propagation of a covered
+work results from an entity transaction, each party to that
+transaction who receives a copy of the work also receives whatever
+licenses to the work the party's predecessor in interest had or could
+give under the previous paragraph, plus a right to possession of the
+Corresponding Source of the work from the predecessor in interest, if
+the predecessor has it or can get it with reasonable efforts.
+
+ You may not impose any further restrictions on the exercise of the
+rights granted or affirmed under this License. For example, you may
+not impose a license fee, royalty, or other charge for exercise of
+rights granted under this License, and you may not initiate litigation
+(including a cross-claim or counterclaim in a lawsuit) alleging that
+any patent claim is infringed by making, using, selling, offering for
+sale, or importing the Program or any portion of it.
+
+ 11. Patents.
+
+ A "contributor" is a copyright holder who authorizes use under this
+License of the Program or a work on which the Program is based. The
+work thus licensed is called the contributor's "contributor version".
+
+ A contributor's "essential patent claims" are all patent claims
+owned or controlled by the contributor, whether already acquired or
+hereafter acquired, that would be infringed by some manner, permitted
+by this License, of making, using, or selling its contributor version,
+but do not include claims that would be infringed only as a
+consequence of further modification of the contributor version. For
+purposes of this definition, "control" includes the right to grant
+patent sublicenses in a manner consistent with the requirements of
+this License.
+
+ Each contributor grants you a non-exclusive, worldwide, royalty-free
+patent license under the contributor's essential patent claims, to
+make, use, sell, offer for sale, import and otherwise run, modify and
+propagate the contents of its contributor version.
+
+ In the following three paragraphs, a "patent license" is any express
+agreement or commitment, however denominated, not to enforce a patent
+(such as an express permission to practice a patent or covenant not to
+sue for patent infringement). To "grant" such a patent license to a
+party means to make such an agreement or commitment not to enforce a
+patent against the party.
+
+ If you convey a covered work, knowingly relying on a patent license,
+and the Corresponding Source of the work is not available for anyone
+to copy, free of charge and under the terms of this License, through a
+publicly available network server or other readily accessible means,
+then you must either (1) cause the Corresponding Source to be so
+available, or (2) arrange to deprive yourself of the benefit of the
+patent license for this particular work, or (3) arrange, in a manner
+consistent with the requirements of this License, to extend the patent
+license to downstream recipients. "Knowingly relying" means you have
+actual knowledge that, but for the patent license, your conveying the
+covered work in a country, or your recipient's use of the covered work
+in a country, would infringe one or more identifiable patents in that
+country that you have reason to believe are valid.
+
+ If, pursuant to or in connection with a single transaction or
+arrangement, you convey, or propagate by procuring conveyance of, a
+covered work, and grant a patent license to some of the parties
+receiving the covered work authorizing them to use, propagate, modify
+or convey a specific copy of the covered work, then the patent license
+you grant is automatically extended to all recipients of the covered
+work and works based on it.
+
+ A patent license is "discriminatory" if it does not include within
+the scope of its coverage, prohibits the exercise of, or is
+conditioned on the non-exercise of one or more of the rights that are
+specifically granted under this License. You may not convey a covered
+work if you are a party to an arrangement with a third party that is
+in the business of distributing software, under which you make payment
+to the third party based on the extent of your activity of conveying
+the work, and under which the third party grants, to any of the
+parties who would receive the covered work from you, a discriminatory
+patent license (a) in connection with copies of the covered work
+conveyed by you (or copies made from those copies), or (b) primarily
+for and in connection with specific products or compilations that
+contain the covered work, unless you entered into that arrangement,
+or that patent license was granted, prior to 28 March 2007.
+
+ Nothing in this License shall be construed as excluding or limiting
+any implied license or other defenses to infringement that may
+otherwise be available to you under applicable patent law.
+
+ 12. No Surrender of Others' Freedom.
+
+ If conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot convey a
+covered work so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you may
+not convey it at all. For example, if you agree to terms that obligate you
+to collect a royalty for further conveying from those to whom you convey
+the Program, the only way you could satisfy both those terms and this
+License would be to refrain entirely from conveying the Program.
+
+ 13. Use with the GNU Affero General Public License.
+
+ Notwithstanding any other provision of this License, you have
+permission to link or combine any covered work with a work licensed
+under version 3 of the GNU Affero General Public License into a single
+combined work, and to convey the resulting work. The terms of this
+License will continue to apply to the part which is the covered work,
+but the special requirements of the GNU Affero General Public License,
+section 13, concerning interaction through a network will apply to the
+combination as such.
+
+ 14. Revised Versions of this License.
+
+ The Free Software Foundation may publish revised and/or new versions of
+the GNU General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+ Each version is given a distinguishing version number. If the
+Program specifies that a certain numbered version of the GNU General
+Public License "or any later version" applies to it, you have the
+option of following the terms and conditions either of that numbered
+version or of any later version published by the Free Software
+Foundation. If the Program does not specify a version number of the
+GNU General Public License, you may choose any version ever published
+by the Free Software Foundation.
+
+ If the Program specifies that a proxy can decide which future
+versions of the GNU General Public License can be used, that proxy's
+public statement of acceptance of a version permanently authorizes you
+to choose that version for the Program.
+
+ Later license versions may give you additional or different
+permissions. However, no additional obligations are imposed on any
+author or copyright holder as a result of your choosing to follow a
+later version.
+
+ 15. Disclaimer of Warranty.
+
+ THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
+APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
+HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
+OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
+IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
+ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+ 16. Limitation of Liability.
+
+ IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
+THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
+GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
+USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
+DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
+PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
+EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGES.
+
+ 17. Interpretation of Sections 15 and 16.
+
+ If the disclaimer of warranty and limitation of liability provided
+above cannot be given local legal effect according to their terms,
+reviewing courts shall apply local law that most closely approximates
+an absolute waiver of all civil liability in connection with the
+Program, unless a warranty or assumption of liability accompanies a
+copy of the Program in return for a fee.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+state the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+Also add information on how to contact you by electronic and paper mail.
+
+ If the program does terminal interaction, make it output a short
+notice like this when it starts in an interactive mode:
+
+ <program> Copyright (C) <year> <name of author>
+ This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, your program's commands
+might be different; for a GUI interface, you would use an "about box".
+
+ You should also get your employer (if you work as a programmer) or school,
+if any, to sign a "copyright disclaimer" for the program, if necessary.
+For more information on this, and how to apply and follow the GNU GPL, see
+<http://www.gnu.org/licenses/>.
+
+ The GNU General Public License does not permit incorporating your program
+into proprietary programs. If your program is a subroutine library, you
+may consider it more useful to permit linking proprietary applications with
+the library. If this is what you want to do, use the GNU Lesser General
+Public License instead of this License. But first, please read
+<http://www.gnu.org/philosophy/why-not-lgpl.html>.
+
diff --git a/release/bin/README.txt b/release/bin/README.txt
new file mode 100644
index 0000000..1683a89
--- /dev/null
+++ b/release/bin/README.txt
@@ -0,0 +1,822 @@
+
+ GnuPG - The GNU Privacy Guard
+ -------------------------------
+ Version 1.4.9
+
+ Copyright 1998, 1999, 2000, 2001, 2002, 2003, 2004,
+ 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
+
+ This file is free software; as a special exception the author
+ gives unlimited permission to copy and/or distribute it, with or
+ without modifications, as long as this notice is preserved.
+
+ This file is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY, to the extent permitted by law; without even
+ the implied warranty of MERCHANTABILITY or FITNESS FOR A
+ PARTICULAR PURPOSE.
+
+
+ Intro
+ -----
+
+ GnuPG is GNU's tool for secure communication and data storage.
+ It can be used to encrypt data and to create digital signatures.
+ It includes an advanced key management facility and is compliant
+ with the proposed OpenPGP Internet standard as described in RFC2440.
+
+ GnuPG works best on GNU/Linux or *BSD systems. Most other Unices
+ are also supported but are not as well tested as the Free Unices.
+ See http://www.gnupg.org/download/supported_systems.html for a
+ list of systems which are known to work.
+
+ See the file COPYING for copyright and warranty information.
+
+ Because GnuPG does not use use any patented algorithms it is not
+ by default fully compatible with PGP 2.x, which uses the patented
+ IDEA algorithm. See http://www.gnupg.org/why-not-idea.html for
+ more information on this subject, including what to do if you are
+ legally entitled to use IDEA.
+
+ The default public key algorithms are DSA and Elgamal, but RSA is
+ also supported. Symmetric algorithms available are AES (with 128,
+ 192, and 256 bit keys), 3DES, Blowfish, CAST5 and Twofish. Digest
+ algorithms available are MD5, RIPEMD/160, SHA-1, SHA-256, SHA-384,
+ and SHA-512. Compression algorithms available are ZIP, ZLIB, and
+ BZIP2 (with libbz2 installed).
+
+
+ Installation
+ ------------
+
+ Please read the file INSTALL and the sections in this file
+ related to the installation. Here is a quick summary:
+
+ 1) Check that you have unmodified sources. See below on how to do
+ this. Don't skip it - this is an important step!
+
+ 2) Unpack the tarball. With GNU tar you can do it this way:
+ "tar xzvf gnupg-x.y.z.tar.gz". If got a bzip2 compressed
+ tarball you need to use: "tar xjvf gnupg-x.y.z.tar.bz2".
+
+ 3) "cd gnupg-x.y.z"
+
+ 4) "./configure"
+
+ 5) "make"
+
+ 6) "make install"
+
+ 7) You end up with a "gpg" binary in /usr/local/bin.
+
+ 8) To avoid swapping out of sensitive data, you can install "gpg"
+ setuid root. If you don't do so, you may want to add the
+ option "no-secmem-warning" to ~/.gnupg/gpg.conf
+
+
+ How to Verify the Source
+ ------------------------
+
+ In order to check that the version of GnuPG which you are going to
+ install is an original and unmodified one, you can do it in one of
+ the following ways:
+
+ a) If you already have a trusted Version of GnuPG installed, you
+ can simply check the supplied signature:
+
+ $ gpg --verify gnupg-x.y.z.tar.gz.sig
+
+ This checks that the detached signature gnupg-x.y.z.tar.gz.sig
+ is indeed a signature of gnupg-x.y.z.tar.gz. The key currently
+ used to create this signature is:
+
+ "pub 1024R/1CE0C630 2006-01-01 Werner Koch (dist sig) <[email protected]>"
+
+ If you do not have this key, you can get it from the source in
+ the file doc/samplekeys.asc (use "gpg --import doc/samplekeys.asc"
+ to add it to the keyring) or from any keyserver. You have to
+ make sure that this is really the key and not a faked one. You
+ can do this by comparing the output of:
+
+ $ gpg --fingerprint 0x1CE0C630
+
+ with the fingerprint published elsewhere.
+
+ Please note, that you have to use an old version of GnuPG to
+ do all this stuff. *Never* use the version which you are going
+ to check!
+
+
+ b) If you don't have any of the above programs, you have to verify
+ the SHA1 checksum:
+
+ $ sha1sum gnupg-x.y.z.tar.gz
+
+ This should yield an output _similar_ to this:
+
+ fd9351b26b3189c1d577f0970f9dcadc1234abcd gnupg-x.y.z.tar.gz
+
+ Now check that this checksum is _exactly_ the same as the one
+ published via the announcement list and probably via Usenet.
+
+
+ Documentation
+ -------------
+
+ The manual will be distributed separately under the name "gph".
+ An online version of the latest manual draft is available at the
+ GnuPG web pages:
+
+ http://www.gnupg.org/documentation/
+
+ A list of frequently asked questions is available in the GnuPG
+ distribution in the file doc/FAQ and online as:
+
+ http://www.gnupg.org/documentation/faqs.html
+
+ A couple of HOWTO documents are available online; for a listing see:
+
+ http://www.gnupg.org/documentation/howtos.html
+
+ A man page with a description of all commands and options gets installed
+ along with the program.
+
+
+ Introduction
+ ------------
+
+ Here is a brief overview on how to use GnuPG - it is strongly suggested
+ that you read the manual and other information about the use of
+ cryptography. GnuPG is only a tool, secure usage requires that
+ YOU KNOW WHAT YOU ARE DOING.
+
+ The first time you run gpg, it will create a .gnupg directory in
+ your home directory and populate it with a default configuration
+ file. Once this is done, you may create a new key, or if you
+ already have keyrings from PGP, you can import them into GnuPG
+ with:
+
+ gpg --import path/to/pgp/keyring/pubring.pkr
+ and
+ gpg --import path/to/pgp/keyring/secring.skr
+
+ The normal way to create a key is
+
+ gpg --gen-key
+
+ This asks some questions and then starts key generation. To create
+ good random numbers for the key parameters, GnuPG needs to gather
+ enough noise (entropy) from your system. If you see no progress
+ during key generation you should start some other activities such
+ as moving the mouse or hitting the CTRL and SHIFT keys.
+
+ Generate a key ONLY on a machine where you have direct physical
+ access - don't do it over the network or on a machine also used
+ by others, especially if you have no access to the root account.
+
+ When you are asked for a passphrase use a good one which you can
+ easily remember. Don't make the passphrase too long because you
+ have to type it for every decryption or signing; but, - AND THIS
+ IS VERY IMPORTANT - use a good one that is not easily to guess
+ because the security of the whole system relies on your secret key
+ and the passphrase that protects it when someone gains access to
+ your secret keyring. One good way to select a passphrase is to
+ figure out a short nonsense sentence which makes some sense for
+ you and modify it by inserting extra spaces, non-letters and
+ changing the case of some characters - this is really easy to
+ remember especially if you associate some pictures with it.
+
+ Next, you should create a revocation certificate in case someone
+ gets knowledge of your secret key or you forgot your passphrase
+
+ gpg --gen-revoke your_user_id
+
+ Run this command and store the revocation certificate away. The output
+ is always ASCII armored, so that you can print it and (hopefully
+ never) re-create it if your electronic media fails.
+
+ Now you can use your key to create digital signatures
+
+ gpg -s file
+
+ This creates a file "file.gpg" which is compressed and has a
+ signature attached.
+
+ gpg -sa file
+
+ Same as above, but creates a file "file.asc" which is ASCII armored
+ and and ready for sending by mail. It is better to use your
+ mailers features to create signatures (The mailer uses GnuPG to do
+ this) because the mailer has the ability to MIME encode such
+ signatures - but this is not a security issue.
+
+ gpg -s -o out file
+
+ Creates a signature of "file", but writes the output to the file
+ "out".
+
+ Everyone who knows your public key (you can and should publish
+ your key by putting it on a key server, a web page or in your .plan
+ file) is now able to check whether you really signed this text
+
+ gpg --verify file
+
+ GnuPG now checks whether the signature is valid and prints an
+ appropriate message. If the signature is good, you know at least
+ that the person (or machine) has access to the secret key which
+ corresponds to the published public key.
+
+ If you run gpg without an option it will verify the signature and
+ create a new file that is identical to the original. gpg can also
+ run as a filter, so that you can pipe data to verify trough it
+
+ cat signed-file | gpg | wc -l
+
+ which will check the signature of signed-file and then display the
+ number of lines in the original file.
+
+ To send a message encrypted to someone you can use
+
+ gpg -e -r heine file
+
+ This encrypts "file" with the public key of the user "heine" and
+ writes it to "file.gpg"
+
+ echo "hello" | gpg -ea -r heine | mail heine
+
+ Ditto, but encrypts "hello\n" and mails it as ASCII armored message
+ to the user with the mail address heine.
+
+ gpg -se -r heine file
+
+ This encrypts "file" with the public key of "heine" and writes it
+ to "file.gpg" after signing it with your user id.
+
+ gpg -se -r heine -u Suttner file
+
+ Ditto, but sign the file with your alternative user id "Suttner"
+
+
+ GnuPG has some options to help you publish public keys. This is
+ called "exporting" a key, thus
+
+ gpg --export >all-my-keys
+
+ exports all the keys in the keyring and writes them (in a binary
+ format) to "all-my-keys". You may then mail "all-my-keys" as an
+ MIME attachment to someone else or put it on an FTP server. To
+ export only some user IDs, you give them as arguments on the command
+ line.
+
+ To mail a public key or put it on a web page you have to create
+ the key in ASCII armored format
+
+ gpg --export --armor | mail [email protected]
+
+ This will send all your public keys to your friend panther.
+
+ If you have received a key from someone else you can put it
+ into your public keyring. This is called "importing"
+
+ gpg --import [filenames]
+
+ New keys are appended to your keyring and already existing
+ keys are updated. Note that GnuPG does not import keys that
+ are not self-signed.
+
+ Because anyone can claim that a public key belongs to her
+ we must have some way to check that a public key really belongs
+ to the owner. This can be achieved by comparing the key during
+ a phone call. Sure, it is not very easy to compare a binary file
+ by reading the complete hex dump of the file - GnuPG (and nearly
+ every other program used for management of cryptographic keys)
+ provides other solutions.
+
+ gpg --fingerprint <username>
+
+ prints the so called "fingerprint" of the given username which
+ is a sequence of hex bytes (which you may have noticed in mail
+ sigs or on business cards) that uniquely identifies the public
+ key - different keys will always have different fingerprints.
+ It is easy to compare fingerprints by phone and I suggest
+ that you print your fingerprint on the back of your business
+ card. To see the fingerprints of the secondary keys, you can
+ give the command twice; but this is normally not needed.
+
+ If you don't know the owner of the public key you are in trouble.
+ Suppose however that friend of yours knows someone who knows someone
+ who has met the owner of the public key at some computer conference.
+ Suppose that all the people between you and the public key holder
+ may now act as introducers to you. Introducers signing keys thereby
+ certify that they know the owner of the keys they sign. If you then
+ trust all the introducers to have correctly signed other keys, you
+ can be be sure that the other key really belongs to the one who
+ claims to own it.
+
+ There are 2 steps to validate a key:
+ 1. First check that there is a complete chain
+ of signed keys from the public key you want to use
+ and your key and verify each signature.
+ 2. Make sure that you have full trust in the certificates
+ of all the introduces between the public key holder and
+ you.
+ Step 2 is the more complicated part because there is no easy way
+ for a computer to decide who is trustworthy and who is not. GnuPG
+ leaves this decision to you and will ask you for a trust value
+ (here also referenced as the owner-trust of a key) for every key
+ needed to check the chain of certificates. You may choose from:
+ a) "I don't know" - then it is not possible to use any
+ of the chains of certificates, in which this key is used
+ as an introducer, to validate the target key. Use this if
+ you don't know the introducer.
+ b) "I do not trust" - Use this if you know that the introducer
+ does not do a good job in certifying other keys. The effect
+ is the same as with a) but for a) you may later want to
+ change the value because you got new information about this
+ introducer.
+ c) "I trust marginally" - Use this if you assume that the
+ introducer knows what he is doing. Together with some
+ other marginally trusted keys, GnuPG validates the target
+ key then as good.
+ d) "I fully trust" - Use this if you really know that this
+ introducer does a good job when certifying other keys.
+ If all the introducer are of this trust value, GnuPG
+ normally needs only one chain of signatures to validate
+ a target key okay. (But this may be adjusted with the help
+ of some options).
+ This information is confidential because it gives your personal
+ opinion on the trustworthiness of someone else. Therefore this data
+ is not stored in the keyring but in the "trustdb"
+ (~/.gnupg/trustdb.gpg). Do not assign a high trust value just
+ because the introducer is a friend of yours - decide how well she
+ understands the implications of key signatures and you may want to
+ tell her more about public key cryptography so you can later change
+ the trust value you assigned.
+
+ Okay, here is how GnuPG helps you with key management. Most stuff
+ is done with the --edit-key command
+
+ gpg --edit-key <keyid or username>
+
+ GnuPG displays some information about the key and then prompts
+ for a command (enter "help" to see a list of commands and see
+ the man page for a more detailed explanation). To sign a key
+ you select the user ID you want to sign by entering the number
+ that is displayed in the leftmost column (or do nothing if the
+ key has only one user ID) and then enter the command "sign" and
+ follow all the prompts. When you are ready, give the command
+ "save" (or use "quit" to cancel your actions).
+
+ If you want to sign the key with another of your user IDs, you
+ must give an "-u" option on the command line together with the
+ "--edit-key".
+
+ Normally you want to sign only one user ID because GnuPG
+ uses only one and this keeps the public key certificate
+ small. Because such key signatures are very important you
+ should make sure that the signatories of your key sign a user ID
+ which is very likely to stay for a long time - choose one with an
+ email address you have full control of or do not enter an email
+ address at all. In future GnuPG will have a way to tell which
+ user ID is the one with an email address you prefer - because
+ you have no signatures on this email address it is easy to change
+ this address. Remember, your signatories sign your public key (the
+ primary one) together with one of your user IDs - so it is not possible
+ to change the user ID later without voiding all the signatures.
+
+ Tip: If you hear about a key signing party on a computer conference
+ join it because this is a very convenient way to get your key
+ certified (But remember that signatures have nothing to to with the
+ trust you assign to a key).
+
+
+ 8 Ways to Specify a User ID
+ ---------=-----------------
+
+ There are several ways to specify a user ID, here are some examples.
+
+ * Only by the short keyid (prepend a zero if it begins with A..F):
+
+ "234567C4"
+ "0F34E556E"
+ "01347A56A"
+ "0xAB123456
+
+ * By a complete keyid:
+
+ "234AABBCC34567C4"
+ "0F323456784E56EAB"
+ "01AB3FED1347A5612"
+ "0x234AABBCC34567C4"
+
+ * By a fingerprint:
+
+ "1234343434343434C434343434343434"
+ "123434343434343C3434343434343734349A3434"
+ "0E12343434343434343434EAB3484343434343434"
+
+ The first one is a short fingerprint for PGP 2.x style keys.
+ The others are long fingerprints for OpenPGP keys.
+
+ * By an exact string:
+
+ "=Heinrich Heine <[email protected]>"
+
+ * By an email address:
+
+
+ * By word match
+
+ "+Heinrich Heine duesseldorf"
+
+ All words must match exactly (not case sensitive) and appear in
+ any order in the user ID. Words are any sequences of letters,
+ digits, the underscore and characters with bit 7 set.
+
+ * Or by the usual substring:
+
+ "Heine"
+ "*Heine"
+
+ The '*' indicates substring search explicitly.
+
+
+ Batch mode
+ ----------
+
+ If you use the option "--batch", GnuPG runs in non-interactive mode and
+ never prompts for input data. This does not even allow entering the
+ passphrase. Until we have a better solution (something like ssh-agent),
+ you can use the option "--passphrase-fd n", which works like PGP's
+ PGPPASSFD.
+
+ Batch mode also causes GnuPG to terminate as soon as a BAD signature is
+ detected.
+
+
+ Exit status
+ -----------
+
+ GnuPG returns with an exit status of 1 if in batch mode and a bad signature
+ has been detected or 2 or higher for all other errors. You should parse
+ stderr or, better, the output of the fd specified with --status-fd to get
+ detailed information about the errors.
+
+
+ Configure options
+ -----------------
+
+ Here is a list of configure options which are sometime useful
+ for installation.
+
+ --enable-static-rnd=<name>
+ Force the use of the random byte gathering
+ module <name>. Default is either to use /dev/random
+ or the auto mode. Value for name:
+ egd - Use the module which accesses the
+ Entropy Gathering Daemon. See the webpages
+ for more information about it.
+ unix - Use the standard Unix module which does not
+ have a very good performance.
+ linux - Use the module which accesses /dev/random.
+ This is the first choice and the default one
+ for GNU/Linux or *BSD.
+ auto - Compile linux, egd and unix in and
+ automagically select at runtime.
+
+ --with-egd-socket=<name>
+ This is only used when EGD is used as random
+ gatherer. GnuPG uses by default "~/.gnupg/entropy"
+ as the socket to connect EGD. Using this option the
+ socket name can be changed. You may use any filename
+ here with 2 exceptions: a filename starting with
+ "~/" uses the socket in the home directory of the user
+ and one starting with a "=" uses a socket in the
+ GnuPG home directory which is "~/.gnupg" by default.
+
+ --without-readline
+ Do not include support for the readline library
+ even if it is available. The default is to check
+ whether the readline library is a available and
+ use it to allow fancy command line editing.
+
+ --with-included-zlib
+ Forces usage of the local zlib sources. Default is
+ to use the (shared) library of the system.
+
+ --with-zlib=<DIR>
+ Look for the system zlib in DIR.
+
+ --with-bzip2=<DIR>
+ Look for the system libbz2 in DIR.
+
+ --without-bzip2
+ Disable the BZIP2 compression algorithm.
+
+ --with-included-gettext
+ Forces usage of the local gettext sources instead of
+ the one provided by your system.
+
+ --disable-nls
+ Disable NLS support (See the file ABOUT-NLS)
+
+ --enable-m-guard
+ Enable the integrated malloc checking code. Please
+ note that this feature does not work on all CPUs
+ (e.g. SunOS 5.7 on UltraSparc-2) and might give
+ you a bus error.
+
+ --disable-dynload
+ If you have problems with dynamic loading, this
+ option disables all dynamic loading stuff. Note
+ that the use of dynamic linking is very limited.
+
+ --disable-asm
+ Do not use assembler modules. It is not possible
+ to use this on some CPU types.
+
+ --disable-exec
+ Disable all remote program execution. This
+ disables photo ID viewing as well as all keyserver
+ access.
+
+ --disable-photo-viewers
+ Disable only photo ID viewing.
+
+ --disable-keyserver-helpers
+ Disable only keyserver helpers.
+
+ --disable-keyserver-path
+ Disables the user's ability to use the exec-path
+ feature to add additional search directories when
+ executing a keyserver helper.
+
+ --with-photo-viewer=FIXED_VIEWER
+ Force the photo viewer to be FIXED_VIEWER and
+ disable any ability for the user to change it in
+ their options file.
+
+ --disable-rsa
+ Removes support for the RSA public key algorithm.
+ This can give a smaller gpg binary for places
+ where space is tight.
+
+ --disable-idea
+ --disable-cast5
+ --disable-blowfish
+ --disable-aes
+ --disable-twofish
+ --disable-sha256
+ --disable-sha512
+ Removes support for the selected symmetric or hash
+ algorithm. This can give a smaller gpg binary for
+ places where space is tight.
+
+ **** Note that if there are existing keys that
+ have one of these algorithms as a preference,
+ messages may be received that use one of these
+ algorithms and you will not be able to decrypt the
+ message! ****
+
+ The public key preference list can be updated to
+ match the list of available algorithms by using
+ "gpg --edit-key (thekey)", and running the
+ "setpref" command.
+
+ --enable-minimal
+ Build the smallest gpg binary possible (disables
+ all optional algorithms, disables keyserver
+ access, and disables photo IDs). Specifically,
+ this means --disable-rsa --disable-idea,
+ --disable-cast5, --disable-blowfish,
+ --disable-aes, --disable-twofish,
+ --disable-sha256, --disable-sha512,
+ --without-bzip2, --disable-exec,
+ --disable-card-support and
+ --disable-agent-support.
+ Configure command lines are read from left to
+ right, so if you want to have an "almost minimal"
+ configuration, you can do (for example)
+ "--enable-minimal --enable-rsa" to have RSA added
+ to the minimal build.
+
+ --enable-key-cache=SIZE
+ Set the internal key and UID cache size. This has
+ a significant impact on performance with large
+ keyrings. The default is 4096, but for use on
+ platforms where memory is an issue, it can be set
+ as low as 5.
+
+ --disable-card-support
+ Do not include smartcard support. The default is
+ to include support if all required libraries are
+ available.
+
+ --disable-agent-support
+ Do not include support for the gpg-agent. The
+ default is to include support.
+
+ --enable-selinux-support
+ This prevents access to certain files and won't
+ allow import or export of secret keys.
+
+ --enable-noexecstack
+ Pass option --noexecstack to as. Autdetect wether
+ the tool chain actually support this.
+
+ --disable-gnupg-iconv
+ If iconv is available it is used to convert
+ between utf-8 and the system character set. This
+ is in general the preferable solution. However
+ the code is new and under some cirumstances it may
+ give different output than with the limited old
+ support. This option allows to explicity disable
+ the use of iconv. Note, that iconv is also
+ disabled if gettext has been disabled.
+
+
+ Installation Problems
+ ---------------------
+
+ If you get unresolved externals "gettext" you should run configure
+ again with the option "--with-included-gettext"; this is version
+ 0.12.1 which is available at ftp.gnu.org.
+
+ If you have other compile problems, try the configure options
+ "--with-included-zlib" or "--disable-nls" (See ABOUT-NLS) or
+ --disable-dynload.
+
+ We can't check all assembler files, so if you have problems
+ assembling them (or the program crashes) use --disable-asm with
+ ./configure. If you opt to delete individual replacement files in
+ hopes of using the remaining ones, be aware that the configure
+ scripts may consider several subdirectories to get all available
+ assembler files; be sure to delete the correct ones. The assembler
+ replacements are in C and in mpi/generic; never delete
+ udiv-qrnnd.S in any CPU directory, because there may be no C
+ substitute. Don't forget to delete "config.cache" and run
+ "./config.status --recheck". We have also heard reports of
+ problems when using versions of gcc earlier than 2.96 along with a
+ non-GNU assembler (as). If this applies to your platform, you can
+ either upgrade gcc to a more recent version, or use the GNU
+ assembler.
+
+ Some make tools are broken - the best solution is to use GNU's
+ make. Try gmake or grab the sources from a GNU archive and
+ install them.
+
+ On some OSF systems you may get unresolved externals. This is a
+ libtool problem and the workaround is to manually remove all the
+ "-lc -lz" but the last one from the linker line and execute them
+ manually.
+
+ On some architectures you see warnings like:
+ longlong.h:175: warning: function declaration isn't a prototype
+ or
+ http.c:647: warning: cast increases required alignment of target type
+ This doesn't matter and we know about it (actually it is due to
+ some warning options which we have enabled for gcc)
+
+ If you are cross-compiling and you get an error either building a
+ tool called "yat2m" or running that tool, the problem is most
+ likely a bad or missing native compiler. We require a standard
+ C-89 compiler to produce an executable to be run on the build
+ platform. You can explicitly set such a compiler with configure
+ arguments. On HP/UX you might want to try: "CC_FOR_BUILD=c89".
+
+
+
+ Specific problems on some machines
+ ----------------------------------
+
+ * Apple Darwin 6.1:
+
+ ./configure --with-libiconv-prefix=/sw
+
+ * IBM RS/6000 running AIX:
+
+ Due to a change in gcc (since version 2.8) the MPI stuff may
+ not build. In this case try to run configure using:
+ CFLAGS="-g -O2 -mcpu=powerpc" ./configure
+
+ * SVR4.2 (ESIX V4.2 cc)
+
+ Due to problems with the ESIX as, you probably want to do
+ CFLAGS="-O -K pentium" ./configure --disable-asm
+
+ * SunOS 4.1.4
+
+ ./configure ac_cv_sys_symbol_underscore=yes
+
+
+ The Random Device
+ -----------------
+
+ Random devices are available in Linux, FreeBSD and OpenBSD.
+ Operating systems without a random devices must use another
+ entropy collector.
+
+ This collector works by running a lot of commands that yield more
+ or less unpredictable output and feds this as entropy into the
+ random generator - It should work reliably but you should check
+ whether it produces good output for your version of Unix. There
+ are some debug options to help you (see cipher/rndunix.c).
+
+
+ Creating an RPM package
+ -----------------------
+
+ The file scripts/gnupg.spec is used to build a RPM package (both
+ binary and src):
+ 1. copy the spec file into /usr/src/redhat/SPECS
+ 2. copy the tar file into /usr/src/redhat/SOURCES
+ 3. type: rpm -ba SPECS/gnupg.spec
+
+ Or use the -t (--tarbuild) option of rpm:
+ 1. rpm -ta gnupg-x.x.x.tar.gz
+
+ The binary rpm file can now be found in /usr/src/redhat/RPMS, source
+ rpm in /usr/src/redhat/SRPMS
+
+
+ Building Universal Binaries on Apple OS X
+ -----------------------------------------
+
+ You can build a universal ("fat") binary that will work on both
+ PPC and Intel Macs with something like:
+
+ ./configure CFLAGS="-arch ppc -arch i386" --disable-endian-check \
+ --disable-dependency-tracking --disable-asm
+
+ If you are doing the build on a OS X 10.4 (Tiger) PPC machine you
+ may need to add "-isysroot /Developer/SDKs/MacOSX10.4u.sdk" to
+ those CFLAGS. This additional isysroot is not necessary on Intel
+ Tiger boxes, or any OS X 10.5 (Leopard) or later boxes.
+
+ Note that when building a universal binary, any third-party
+ libraries you may link with need to be universal as well. All
+ Apple-supplied libraries (even libraries not originally written by
+ Apple like curl, zip, and BZ2) are universal.
+
+
+ GnuPG 1.4 and GnuPG 2.0
+ -----------------------
+
+ GnuPG 2.0 is a newer version of GnuPG with additional support for
+ S/MIME. It has a different design philosophy that splits
+ functionality up into several modules. Both versions may be
+ installed simultaneously without any conflict (gpg is called gpg2
+ in GnuPG 2). In fact, the gpg version from GnuPG 1.4 is able to
+ make use of the gpg-agent as included in GnuPG 2 and allows for
+ seamless passphrase caching. The advantage of GnupG 1.4 is its
+ smaller size and no dependency on other modules at run and build
+ time.
+
+
+ How to Get More Information
+ ---------------------------
+
+ The primary WWW page is "http://www.gnupg.org"
+ The primary FTP site is "ftp://ftp.gnupg.org/gcrypt/"
+
+ See http://www.gnupg.org/download/mirrors.html for a list of
+ mirrors and use them if possible. You may also find GnuPG
+ mirrored on some of the regular GNU mirrors.
+
+ We have some mailing lists dedicated to GnuPG:
+
+ [email protected] For important announcements like
+ new versions and such stuff.
+ This is a moderated list and has
+ very low traffic. Do not post to
+ this list.
+
+ [email protected] For general user discussion and
+ help (English).
+
+ [email protected] German speaking counterpart of
+ gnupg-users.
+
+ [email protected] Russian speaking counterpart of
+ gnupg-users.
+
+ [email protected] GnuPG developers main forum.
+
+ You subscribe to one of the list by sending mail with a subject
+ of "subscribe" to [email protected], where x is the name of the
+ mailing list (gnupg-announce, gnupg-users, etc.). An archive of
+ the mailing lists are available at
+ http://www.gnupg.org/documentation/mailing-lists.html
+
+ Please direct bug reports to http://bugs.gnupg.org or post
+ them direct to the mailing list <[email protected]>.
+
+ Please direct questions about GnuPG to the users mailing list or
+ one of the pgp newsgroups; please do not direct questions to one
+ of the authors directly as we are busy working on improvements and
+ bug fixes. The English and German mailing lists are watched by
+ the authors and we try to answer questions when time allows us to
+ do so.
+
+ Commercial grade support for GnuPG is available; please see
+ http://www.gnupg.org/service.html .
diff --git a/release/bin/gpg b/release/bin/gpg
new file mode 100755
index 0000000..af65ffb
--- /dev/null
+++ b/release/bin/gpg
Binary files differ
diff --git a/release/bin/gpg.exe b/release/bin/gpg.exe
new file mode 100644
index 0000000..3cf1811
--- /dev/null
+++ b/release/bin/gpg.exe
Binary files differ
diff --git a/release/icons/button_cancel.png b/release/icons/button_cancel.png
new file mode 100644
index 0000000..75980de
--- /dev/null
+++ b/release/icons/button_cancel.png
Binary files differ
diff --git a/release/icons/button_copy.png b/release/icons/button_copy.png
new file mode 100644
index 0000000..a04d2f7
--- /dev/null
+++ b/release/icons/button_copy.png
Binary files differ
diff --git a/release/icons/button_cut.png b/release/icons/button_cut.png
new file mode 100644
index 0000000..57c4711
--- /dev/null
+++ b/release/icons/button_cut.png
Binary files differ
diff --git a/release/icons/button_ok.png b/release/icons/button_ok.png
new file mode 100644
index 0000000..94aac4b
--- /dev/null
+++ b/release/icons/button_ok.png
Binary files differ
diff --git a/release/icons/button_paste.png b/release/icons/button_paste.png
new file mode 100644
index 0000000..099c51f
--- /dev/null
+++ b/release/icons/button_paste.png
Binary files differ
diff --git a/release/icons/configure.png b/release/icons/configure.png
new file mode 100644
index 0000000..2bf463b
--- /dev/null
+++ b/release/icons/configure.png
Binary files differ
diff --git a/release/icons/decrypted.png b/release/icons/decrypted.png
new file mode 100644
index 0000000..2b49969
--- /dev/null
+++ b/release/icons/decrypted.png
Binary files differ
diff --git a/release/icons/edit.png b/release/icons/edit.png
new file mode 100644
index 0000000..bee2645
--- /dev/null
+++ b/release/icons/edit.png
Binary files differ
diff --git a/release/icons/encrypted.png b/release/icons/encrypted.png
new file mode 100644
index 0000000..4ae41ee
--- /dev/null
+++ b/release/icons/encrypted.png
Binary files differ
diff --git a/release/icons/exit.png b/release/icons/exit.png
new file mode 100644
index 0000000..08e97b4
--- /dev/null
+++ b/release/icons/exit.png
Binary files differ
diff --git a/release/icons/fileopen.png b/release/icons/fileopen.png
new file mode 100644
index 0000000..7341929
--- /dev/null
+++ b/release/icons/fileopen.png
Binary files differ
diff --git a/release/icons/fileprint.png b/release/icons/fileprint.png
new file mode 100644
index 0000000..05e1598
--- /dev/null
+++ b/release/icons/fileprint.png
Binary files differ
diff --git a/release/icons/filesave.png b/release/icons/filesave.png
new file mode 100644
index 0000000..0006ad4
--- /dev/null
+++ b/release/icons/filesave.png
Binary files differ
diff --git a/release/icons/filesaveas.png b/release/icons/filesaveas.png
new file mode 100644
index 0000000..2be6df2
--- /dev/null
+++ b/release/icons/filesaveas.png
Binary files differ
diff --git a/release/icons/help.png b/release/icons/help.png
new file mode 100644
index 0000000..915f9fd
--- /dev/null
+++ b/release/icons/help.png
Binary files differ
diff --git a/release/icons/importkey_editor.png b/release/icons/importkey_editor.png
new file mode 100644
index 0000000..4fa7e01
--- /dev/null
+++ b/release/icons/importkey_editor.png
Binary files differ
diff --git a/release/icons/kgpg_export.png b/release/icons/kgpg_export.png
new file mode 100644
index 0000000..ba72a3d
--- /dev/null
+++ b/release/icons/kgpg_export.png
Binary files differ
diff --git a/release/icons/kgpg_import.png b/release/icons/kgpg_import.png
new file mode 100644
index 0000000..0226c2f
--- /dev/null
+++ b/release/icons/kgpg_import.png
Binary files differ
diff --git a/release/icons/kgpg_key2.png b/release/icons/kgpg_key2.png
new file mode 100644
index 0000000..43e5a52
--- /dev/null
+++ b/release/icons/kgpg_key2.png
Binary files differ
diff --git a/release/icons/undo.png b/release/icons/undo.png
new file mode 100644
index 0000000..5cbf37d
--- /dev/null
+++ b/release/icons/undo.png
Binary files differ
diff --git a/release/keydb/gpg.conf b/release/keydb/gpg.conf
new file mode 100755
index 0000000..32c4395
--- /dev/null
+++ b/release/keydb/gpg.conf
@@ -0,0 +1 @@
+lock-never
diff --git a/release/keydb/pubring.gpg b/release/keydb/pubring.gpg
new file mode 100644
index 0000000..acb4872
--- /dev/null
+++ b/release/keydb/pubring.gpg
Binary files differ
diff --git a/release/mingwm10.dll b/release/mingwm10.dll
new file mode 100644
index 0000000..d566c80
--- /dev/null
+++ b/release/mingwm10.dll
Binary files differ
diff --git a/release/ts/gpg4usb_de.qm b/release/ts/gpg4usb_de.qm
new file mode 100644
index 0000000..41d7199
--- /dev/null
+++ b/release/ts/gpg4usb_de.qm
Binary files differ
diff --git a/release/ts/gpg4usb_de.ts b/release/ts/gpg4usb_de.ts
new file mode 100644
index 0000000..ba3d1d5
--- /dev/null
+++ b/release/ts/gpg4usb_de.ts
@@ -0,0 +1,333 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS><TS version="1.1" language="de">
+<defaultcodec></defaultcodec>
+<context>
+ <name>GpgWin</name>
+ <message>
+ <location filename="../gpgwin.cpp" line="66"/>
+ <source>&amp;Open...</source>
+ <translation>Ö&amp;ffnen...</translation>
+ </message>
+ <message>
+ <location filename="../gpgwin.cpp" line="68"/>
+ <source>Ctrl+O</source>
+ <translation></translation>
+ </message>
+ <message>
+ <location filename="../gpgwin.cpp" line="69"/>
+ <source>Open an existing file</source>
+ <translation>Öffen Datei</translation>
+ </message>
+ <message>
+ <location filename="../gpgwin.cpp" line="72"/>
+ <source>&amp;Save</source>
+ <translation>&amp;Speichern</translation>
+ </message>
+ <message>
+ <location filename="../gpgwin.cpp" line="74"/>
+ <source>Ctrl+S</source>
+ <translation></translation>
+ </message>
+ <message>
+ <location filename="../gpgwin.cpp" line="75"/>
+ <source>Save the current File</source>
+ <translation>Speichere Datei</translation>
+ </message>
+ <message>
+ <location filename="../gpgwin.cpp" line="78"/>
+ <source>Save &amp;As</source>
+ <translation type="unfinished">Speichern &amp;unter</translation>
+ </message>
+ <message>
+ <location filename="../gpgwin.cpp" line="120"/>
+ <source>Ctrl+A</source>
+ <translation></translation>
+ </message>
+ <message>
+ <location filename="../gpgwin.cpp" line="81"/>
+ <source>Save the current File as...</source>
+ <translation>Speichere aktuelle Datei als....</translation>
+ </message>
+ <message>
+ <location filename="../gpgwin.cpp" line="84"/>
+ <source>&amp;Print</source>
+ <translation>&amp;Drucken</translation>
+ </message>
+ <message>
+ <location filename="../gpgwin.cpp" line="86"/>
+ <source>Ctrl+P</source>
+ <translation></translation>
+ </message>
+ <message>
+ <location filename="../gpgwin.cpp" line="87"/>
+ <source>Print Document</source>
+ <translation>Drucken</translation>
+ </message>
+ <message>
+ <location filename="../gpgwin.cpp" line="90"/>
+ <source>&amp;Quit</source>
+ <translation type="unfinished">&amp;Beenden</translation>
+ </message>
+ <message>
+ <location filename="../gpgwin.cpp" line="91"/>
+ <source>Ctrl+Q</source>
+ <translation></translation>
+ </message>
+ <message>
+ <location filename="../gpgwin.cpp" line="93"/>
+ <source>Quit Program</source>
+ <translation>Beende das Programm</translation>
+ </message>
+ <message>
+ <location filename="../gpgwin.cpp" line="98"/>
+ <source>&amp;Paste</source>
+ <translation type="unfinished">E&amp;infügen</translation>
+ </message>
+ <message>
+ <location filename="../gpgwin.cpp" line="100"/>
+ <source>Ctrl+V</source>
+ <translation></translation>
+ </message>
+ <message>
+ <location filename="../gpgwin.cpp" line="101"/>
+ <source>Paste Text From Clipboard</source>
+ <translation>Füge Text aus der Zwischenablage ein</translation>
+ </message>
+ <message>
+ <location filename="../gpgwin.cpp" line="104"/>
+ <source>Cu&amp;t</source>
+ <translation>&amp;Ausschneiden</translation>
+ </message>
+ <message>
+ <location filename="../gpgwin.cpp" line="106"/>
+ <source>Ctrl+X</source>
+ <translation></translation>
+ </message>
+ <message>
+ <location filename="../gpgwin.cpp" line="108"/>
+ <source>Cut the current selection&apos;s contents to the clipboard</source>
+ <translation>aktuelle Auswahl ausschneiden und in Zwischenablage einfügen</translation>
+ </message>
+ <message>
+ <location filename="../gpgwin.cpp" line="111"/>
+ <source>&amp;Copy</source>
+ <translation>&amp;Kopieren</translation>
+ </message>
+ <message>
+ <location filename="../gpgwin.cpp" line="113"/>
+ <source>Ctrl+C</source>
+ <translation></translation>
+ </message>
+ <message>
+ <location filename="../gpgwin.cpp" line="115"/>
+ <source>Copy the current selection&apos;s contents to the clipboard</source>
+ <translation>aktuelle Auswahl in Zwischenablage kopieren</translation>
+ </message>
+ <message>
+ <location filename="../gpgwin.cpp" line="118"/>
+ <source>Select &amp;All</source>
+ <translation>Alles &amp;markieren</translation>
+ </message>
+ <message>
+ <location filename="../gpgwin.cpp" line="121"/>
+ <source>Select the whole text</source>
+ <translation>Den ganzen Text markieren</translation>
+ </message>
+ <message>
+ <location filename="../gpgwin.cpp" line="126"/>
+ <source>&amp;Encrypt</source>
+ <translation type="unfinished">&amp;Verschlüsseln</translation>
+ </message>
+ <message>
+ <location filename="../gpgwin.cpp" line="128"/>
+ <source>Ctrl+E</source>
+ <translation></translation>
+ </message>
+ <message>
+ <location filename="../gpgwin.cpp" line="129"/>
+ <source>Encrypt Message</source>
+ <translation>Verschlüssele den Text</translation>
+ </message>
+ <message>
+ <location filename="../gpgwin.cpp" line="132"/>
+ <source>&amp;Decrypt</source>
+ <translation type="unfinished">&amp;Entschlüsseln</translation>
+ </message>
+ <message>
+ <location filename="../gpgwin.cpp" line="134"/>
+ <source>Ctrl+D</source>
+ <translation></translation>
+ </message>
+ <message>
+ <location filename="../gpgwin.cpp" line="135"/>
+ <source>Decrypt Message</source>
+ <translation>Entschlüssele den Text</translation>
+ </message>
+ <message>
+ <location filename="../gpgwin.cpp" line="138"/>
+ <source>&amp;Import Key From File</source>
+ <translation>Importiere Schlüssel aus &amp;Datei</translation>
+ </message>
+ <message>
+ <location filename="../gpgwin.cpp" line="140"/>
+ <source>Ctrl+I</source>
+ <translation></translation>
+ </message>
+ <message>
+ <location filename="../gpgwin.cpp" line="141"/>
+ <source>Import New Key From File</source>
+ <translation>Importiere einen neuen Schlüssel aus Datei</translation>
+ </message>
+ <message>
+ <location filename="../gpgwin.cpp" line="144"/>
+ <source>Import Key From &amp;Editor</source>
+ <translation>Importiere Schlüssel aus Textfeld</translation>
+ </message>
+ <message>
+ <location filename="../gpgwin.cpp" line="146"/>
+ <source>Import New Key From Editor</source>
+ <translation>Importiere einen neuen Schlüssel aus dem Textfeld</translation>
+ </message>
+ <message>
+ <location filename="../gpgwin.cpp" line="151"/>
+ <source>&amp;About</source>
+ <translation>&amp;Info</translation>
+ </message>
+ <message>
+ <location filename="../gpgwin.cpp" line="153"/>
+ <source>Show the application&apos;s About box</source>
+ <translation>Zeige die Information über die Anwendung</translation>
+ </message>
+ <message>
+ <location filename="../gpgwin.cpp" line="159"/>
+ <source>&amp;File</source>
+ <translation>&amp;Datei</translation>
+ </message>
+ <message>
+ <location filename="../gpgwin.cpp" line="167"/>
+ <source>&amp;Edit</source>
+ <translation>&amp;Bearbeiten</translation>
+ </message>
+ <message>
+ <location filename="../gpgwin.cpp" line="173"/>
+ <source>&amp;Crypto</source>
+ <translation>&amp;Crypt</translation>
+ </message>
+ <message>
+ <location filename="../gpgwin.cpp" line="180"/>
+ <source>&amp;Help</source>
+ <translation>&amp;Hilfe</translation>
+ </message>
+ <message>
+ <location filename="../gpgwin.cpp" line="317"/>
+ <source>File</source>
+ <translation>Datei</translation>
+ </message>
+ <message>
+ <location filename="../gpgwin.cpp" line="190"/>
+ <source>Edit</source>
+ <translation>Bearbeiten</translation>
+ </message>
+ <message>
+ <location filename="../gpgwin.cpp" line="342"/>
+ <source>Ready</source>
+ <translation>Fertig</translation>
+ </message>
+ <message>
+ <location filename="../gpgwin.cpp" line="203"/>
+ <source>Encrypt for:</source>
+ <translation>Verschlüssele für:</translation>
+ </message>
+ <message>
+ <location filename="../gpgwin.cpp" line="297"/>
+ <source>Application</source>
+ <translation>Anwendung</translation>
+ </message>
+ <message>
+ <location filename="../gpgwin.cpp" line="259"/>
+ <source>Cannot read file %1:
+%2.</source>
+ <translation>Kann Datei nicht lesen %1: %2.</translation>
+ </message>
+ <message>
+ <location filename="../gpgwin.cpp" line="270"/>
+ <source>File loaded</source>
+ <translation>Datei geladen</translation>
+ </message>
+ <message>
+ <location filename="../gpgwin.cpp" line="285"/>
+ <source>%1[*] - %2</source>
+ <translation></translation>
+ </message>
+ <message>
+ <location filename="../gpgwin.cpp" line="298"/>
+ <source>The document has been modified.
+Do you want to save your changes?</source>
+ <translation>Die Datei würde verändert. Möchten Sie die Änderung speichern?</translation>
+ </message>
+ <message>
+ <location filename="../gpgwin.cpp" line="319"/>
+ <source>Cannot write file %1:
+%2.</source>
+ <translation>Kann Datei nicht lesen %1: %2.</translation>
+ </message>
+ <message>
+ <location filename="../gpgwin.cpp" line="327"/>
+ <source>Saved &apos;%1&apos;</source>
+ <translation>%1 gespeichert</translation>
+ </message>
+ <message>
+ <location filename="../gpgwin.cpp" line="347"/>
+ <source>About gpg4usb</source>
+ <translation>Über gpg4usb</translation>
+ </message>
+ <message>
+ <location filename="../gpgwin.cpp" line="359"/>
+ <source>&lt;center&gt;This Application allows you to do simple&lt;br&gt;encryption/decryption of your text-files.&lt;br&gt;It&apos;s licensed under the GPL v2.0&lt;br&gt;&lt;br&gt;&lt;b&gt;Developer:&lt;/b&gt;&lt;br&gt;Bene, Heimer, Juergen, Nils, Ubbo&lt;br&gt;&lt;br&gt;If you have any questions and/or&lt;br&gt;suggestions, contact us at&lt;br&gt;gpg4usb at cpunk.de&lt;/a&gt;&lt;br&gt;&lt;br&gt;or feel free to meet us in our channel at&lt;br&gt;gpg4usb at conference.jabber.ccc.de&lt;br&gt;&lt;br&gt;and always remember:&lt;br&gt;cpunk is NOT a bot...&lt;/center&gt;</source>
+ <translation></translation>
+ </message>
+ <message>
+ <location filename="../gpgwin.cpp" line="389"/>
+ <source>Open Key</source>
+ <translation>Öffne Datei</translation>
+ </message>
+ <message>
+ <location filename="../gpgwin.cpp" line="389"/>
+ <source>Key Files (*.asc *.txt);;All Files (*.*)</source>
+ <translation>Schhlüsseldateien (*.asc *.txt);;Alle Dateien (*.*)</translation>
+ </message>
+ <message>
+ <location filename="../gpgwin.cpp" line="281"/>
+ <source>untitled.txt</source>
+ <translation>Neue Datei.txt</translation>
+ </message>
+ <message>
+ <location filename="../gpgwin.cpp" line="396"/>
+ <source>couldn&apos;t open file: </source>
+ <translation>Konnte Datei nicht öffnen:</translation>
+ </message>
+ <message>
+ <location filename="../gpgwin.cpp" line="285"/>
+ <source>gpg4usb</source>
+ <translation>gpg4usb</translation>
+ </message>
+</context>
+<context>
+ <name>KeyList</name>
+ <message>
+ <location filename="keylist.cpp" line="35"/>
+ <source>Delete Selected Keys</source>
+ <translation>Lösche die markierten Schlüssel</translation>
+ </message>
+ <message>
+ <location filename="keylist.cpp" line="116"/>
+ <source>Delete Key</source>
+ <translation>Lösche Schlüssel</translation>
+ </message>
+ <message>
+ <location filename="keylist.cpp" line="117"/>
+ <source>Delete the selected keys</source>
+ <translation>Lösche die markierten Schlüssel</translation>
+ </message>
+</context>
+</TS>
diff --git a/release/ts/gpg4usb_en.qm b/release/ts/gpg4usb_en.qm
new file mode 100644
index 0000000..768f0b0
--- /dev/null
+++ b/release/ts/gpg4usb_en.qm
Binary files differ
diff --git a/release/ts/gpg4usb_en.ts b/release/ts/gpg4usb_en.ts
new file mode 100644
index 0000000..b301ec4
--- /dev/null
+++ b/release/ts/gpg4usb_en.ts
@@ -0,0 +1,332 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS><TS version="1.1">
+<context>
+ <name>GpgWin</name>
+ <message>
+ <location filename="../gpgwin.cpp" line="66"/>
+ <source>&amp;Open...</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../gpgwin.cpp" line="68"/>
+ <source>Ctrl+O</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../gpgwin.cpp" line="69"/>
+ <source>Open an existing file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../gpgwin.cpp" line="72"/>
+ <source>&amp;Save</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../gpgwin.cpp" line="74"/>
+ <source>Ctrl+S</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../gpgwin.cpp" line="75"/>
+ <source>Save the current File</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../gpgwin.cpp" line="78"/>
+ <source>Save &amp;As</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../gpgwin.cpp" line="120"/>
+ <source>Ctrl+A</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../gpgwin.cpp" line="81"/>
+ <source>Save the current File as...</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../gpgwin.cpp" line="84"/>
+ <source>&amp;Print</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../gpgwin.cpp" line="86"/>
+ <source>Ctrl+P</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../gpgwin.cpp" line="87"/>
+ <source>Print Document</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../gpgwin.cpp" line="90"/>
+ <source>&amp;Quit</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../gpgwin.cpp" line="91"/>
+ <source>Ctrl+Q</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../gpgwin.cpp" line="93"/>
+ <source>Quit Program</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../gpgwin.cpp" line="98"/>
+ <source>&amp;Paste</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../gpgwin.cpp" line="100"/>
+ <source>Ctrl+V</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../gpgwin.cpp" line="101"/>
+ <source>Paste Text From Clipboard</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../gpgwin.cpp" line="104"/>
+ <source>Cu&amp;t</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../gpgwin.cpp" line="106"/>
+ <source>Ctrl+X</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../gpgwin.cpp" line="108"/>
+ <source>Cut the current selection&apos;s contents to the clipboard</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../gpgwin.cpp" line="111"/>
+ <source>&amp;Copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../gpgwin.cpp" line="113"/>
+ <source>Ctrl+C</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../gpgwin.cpp" line="115"/>
+ <source>Copy the current selection&apos;s contents to the clipboard</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../gpgwin.cpp" line="118"/>
+ <source>Select &amp;All</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../gpgwin.cpp" line="121"/>
+ <source>Select the whole text</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../gpgwin.cpp" line="126"/>
+ <source>&amp;Encrypt</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../gpgwin.cpp" line="128"/>
+ <source>Ctrl+E</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../gpgwin.cpp" line="129"/>
+ <source>Encrypt Message</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../gpgwin.cpp" line="132"/>
+ <source>&amp;Decrypt</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../gpgwin.cpp" line="134"/>
+ <source>Ctrl+D</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../gpgwin.cpp" line="135"/>
+ <source>Decrypt Message</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../gpgwin.cpp" line="138"/>
+ <source>&amp;Import Key From File</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../gpgwin.cpp" line="140"/>
+ <source>Ctrl+I</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../gpgwin.cpp" line="141"/>
+ <source>Import New Key From File</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../gpgwin.cpp" line="144"/>
+ <source>Import Key From Editor</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../gpgwin.cpp" line="146"/>
+ <source>Import New Key From Editor</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../gpgwin.cpp" line="151"/>
+ <source>&amp;About</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../gpgwin.cpp" line="153"/>
+ <source>Show the application&apos;s About box</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../gpgwin.cpp" line="159"/>
+ <source>&amp;File</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../gpgwin.cpp" line="167"/>
+ <source>&amp;Edit</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../gpgwin.cpp" line="173"/>
+ <source>&amp;Crypto</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../gpgwin.cpp" line="180"/>
+ <source>&amp;Help</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../gpgwin.cpp" line="317"/>
+ <source>File</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../gpgwin.cpp" line="190"/>
+ <source>Edit</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../gpgwin.cpp" line="342"/>
+ <source>Ready</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../gpgwin.cpp" line="203"/>
+ <source>Encrypt for:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../gpgwin.cpp" line="297"/>
+ <source>Application</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../gpgwin.cpp" line="259"/>
+ <source>Cannot read file %1:
+%2.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../gpgwin.cpp" line="270"/>
+ <source>File loaded</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../gpgwin.cpp" line="281"/>
+ <source>untitled.txt</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../gpgwin.cpp" line="285"/>
+ <source>%1[*] - %2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../gpgwin.cpp" line="285"/>
+ <source>gpg4usb</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../gpgwin.cpp" line="298"/>
+ <source>The document has been modified.
+Do you want to save your changes?</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../gpgwin.cpp" line="319"/>
+ <source>Cannot write file %1:
+%2.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../gpgwin.cpp" line="327"/>
+ <source>Saved &apos;%1&apos;</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../gpgwin.cpp" line="347"/>
+ <source>About gpg4usb</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../gpgwin.cpp" line="359"/>
+ <source>&lt;center&gt;This Application allows you to do simple&lt;br&gt;encryption/decryption of your text-files.&lt;br&gt;It&apos;s licensed under the GPL v2.0&lt;br&gt;&lt;br&gt;&lt;b&gt;Developer:&lt;/b&gt;&lt;br&gt;Bene, Heimer, Juergen, Nils, Ubbo&lt;br&gt;&lt;br&gt;If you have any questions and/or&lt;br&gt;suggestions, contact us at&lt;br&gt;gpg4usb at cpunk.de&lt;/a&gt;&lt;br&gt;&lt;br&gt;or feel free to meet us in our channel at&lt;br&gt;gpg4usb at conference.jabber.ccc.de&lt;br&gt;&lt;br&gt;and always remember:&lt;br&gt;cpunk is NOT a bot...&lt;/center&gt;</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../gpgwin.cpp" line="389"/>
+ <source>Open Key</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../gpgwin.cpp" line="389"/>
+ <source>Key Files</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../gpgwin.cpp" line="396"/>
+ <source>couldn&apos;t open file: </source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>KeyList</name>
+ <message>
+ <location filename="../keylist.cpp" line="35"/>
+ <source>Delete Selected Keys</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../keylist.cpp" line="116"/>
+ <source>Delete Key</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../keylist.cpp" line="117"/>
+ <source>Delete the selected keys</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/testdata/crypt1.txt b/testdata/crypt1.txt
new file mode 100644
index 0000000..09ca96d
--- /dev/null
+++ b/testdata/crypt1.txt
@@ -0,0 +1,13 @@
+-----BEGIN PGP MESSAGE-----
+Version: GnuPG v1.4.6 (GNU/Linux)
+
+hQEOAwh91+A4FwHEEAP6A5TMwuHyihbn+kh/jzh+ItU+T2OqyOe3zIRJxmEC4M0M
+Pw1vvXqDLx6V5Cd2OW4w0ucs73YT30P4FaGGlOiWXoBvnQYALdHaBiLPUa6bLoRR
+F9hgh3rlzlxKlQTxJ3nSWDjlEePJgtqhF/UJztsQnwdIOz1sX6tCOJ63hK7AZMgE
+AJYpwqq9fsdytix4KPMurGWA3/XN7jn3D55xascR8z5aWv6zT50uiI8VyzQKqyd7
+QsCTvfhii0ukb4PEDAZ+2KQzXI6C3y1k/YiyWu+MWT0bZDt6zyAZhX7dUAULcM5s
+9FWRdwpihKaYGWjxDyT9Fi7o23KY+5X1RsdzPqopPkDw0kIBoLM8SPd1YfvSLoC1
+DpXz7/GWDzeBxtj8HAwLb8JxdGXzK8L/A/3MoOB5IAvMxKb9rWuDYoRHxHMLgFyb
+bYw5ocI=
+=x93j
+-----END PGP MESSAGE-----
diff --git a/testdata/pubkey-1.asc b/testdata/pubkey-1.asc
new file mode 100644
index 0000000..8b13789
--- /dev/null
+++ b/testdata/pubkey-1.asc
@@ -0,0 +1 @@
+
diff --git a/testdata/pubkey-2.asc b/testdata/pubkey-2.asc
new file mode 100644
index 0000000..8b13789
--- /dev/null
+++ b/testdata/pubkey-2.asc
@@ -0,0 +1 @@
+
diff --git a/testdata/seckey-1.asc b/testdata/seckey-1.asc
new file mode 100644
index 0000000..3934804
--- /dev/null
+++ b/testdata/seckey-1.asc
@@ -0,0 +1,30 @@
+-----BEGIN PGP PRIVATE KEY BLOCK-----
+Version: GnuPG v1.0.4b (GNU/Linux)
+Comment: For info see http://www.gnupg.org
+
+lQHPBDo41NoRBADSfQazKGYf8nokq6zUKH/6INtV6MypSzSGmX2XErnARkIIPPYj
+cQRQ8zCbGV7ZU2ezVbzhFLUSJveE8PZUzzCrLp1O2NSyBTRcR5HVSXW95nJfY8eV
+pOvZRAKul0BVLh81kYTsrfzaaCjh9VWNP26LoeN2r+PjZyktXe7gM3C4SwCgoTxK
+WUVi9HoT2HCLY7p7oig5hEcEALdCJal0UYomX3nJapIVLVZg3vkidr1RICYMb2vz
+58i17h8sxEtobD1vdIKNejulntaRAXs4n0tDYD9z7pRlwG1CLz1R9WxYzeOOqUDr
+fnVXdmU8L/oVWABat8v1V7QQhjMMf+41fuzVwDMMGqjVPLhu4X6wp3A8uyM3YDnQ
+VMN1A/4n2G5gHoOvjqxn8Ch5tBAdMGfO8gH4RjQOwzm2R1wPQss/yzUN1+tlMZGX
+K2dQ2FCWC/hDUSNaEQRlI15wxxBNZ2RQwlzE2A8v113DpvyzOtv0QO95gJ1teCXC
+7j/BN9asgHaBBc39JLO/TcpuI7Hf8PQ5VcP2F0UE3lczGhXbLP8DAwKVpe92I5n5
+JGBjXsTTnVLoJ1hrWTdbLvdbn882m5pHYeqFlvkqKYXJTf0mIzpEU0FfZmFjdG9y
+OgAAr0JzPBwQoEmNI3YSC1MwimZ77bpvVKP9JiM6RFNBX2ZhY3RvcjoAAK9/fVBz
+g73cYbgeNWbz2uITUwNd9KEN/SYjOkRTQV9mYWN0b3I6AACvWjjITYZwah6NiH6C
+YgX52m55Dy5PX7Q/Sm9lIFJhbmRvbSBIYWNrZXIgKHRlc3Qga2V5IHdpdGggcGFz
+c3BocmFzZSAieCIpIDxqb2VAc2V0cS5vcmc+iFcEExECABcFAjo41NoFCwcKAwQD
+FQMCAxYCAQIXgAAKCRCvgiRPnNn9VXm9AKCFQ/t23GQnQEfnnAnvbRNfRo4zIQCb
+BHwILsDBASB1rQzW68UA/XHze0WdAUYEOjjU3RAEAJ50lvtCGbnQlI97VX6tJkos
+dPmdzeXaTWfv//A2wmSANbYnuychGMa1LN43Ew+H6FXMWJ3MB/exs6UBFCgGsw88
+qmcla2bosQN/aVLA7fqXT9ujqoNGaIVEmgdbK1MkSPFXBFyVW3hteod83D0UqFll
+twp4A3ageCYFVJTp50d3AAMFA/44YCQQbg9x9JvzHX3VH7CRX+raEDkDL3Pbz0PH
+as7bwI7gzZ+GFyNKaCvrHQOyuR8RIKIbjtQYnXr1675ConCTceIXhysY32sTn5V6
+UFUW2t0xaRfas8sZBbLDyIJkpt4fyD+6OaRoui9KZqXMNwt7i/XFIto/sWd/OK3S
+IgZkAf8DAwKVpe92I5n5JGAHRuEKSSvGU+0my6zTf17bLWPpFPnICNJdaMfyx24Y
+RZZa+nDpYrRznJ89vohGBBgRAgAGBQI6ONTeAAoJEK+CJE+c2f1V7iIAn0WsYyUV
+Huz4ZZ/WxxN57Ku2Eqs9AJ9Klz9imzvZoUjuE9/Ihr0y56tVng==
+=lKvj
+-----END PGP PRIVATE KEY BLOCK-----