mirror of
git://git.gnupg.org/gnupg.git
synced 2025-01-03 12:11:33 +01:00
New release
This commit is contained in:
parent
bae662923c
commit
c07a88da5d
10
ABOUT-NLS
10
ABOUT-NLS
@ -191,7 +191,7 @@ PO files have been submitted to translation coordination.
|
|||||||
gcal | [] [] [] [] [] | 5
|
gcal | [] [] [] [] [] | 5
|
||||||
gettext | [] [] [] [] [] [] [] [] [] [] [] | 12
|
gettext | [] [] [] [] [] [] [] [] [] [] [] | 12
|
||||||
grep | [] [] [] [] [] [] [] [] [] [] | 10
|
grep | [] [] [] [] [] [] [] [] [] [] | 10
|
||||||
hello | [] [] [] [] [] [] [] [] [] [] | 10
|
hello | [] [] [] [] [] [] [] [] [] [] [] | 11
|
||||||
id-utils | [] [] [] | 3
|
id-utils | [] [] [] | 3
|
||||||
indent | [] [] [] [] [] | 5
|
indent | [] [] [] [] [] | 5
|
||||||
libc | [] [] [] [] [] [] [] | 7
|
libc | [] [] [] [] [] [] [] | 7
|
||||||
@ -201,14 +201,14 @@ PO files have been submitted to translation coordination.
|
|||||||
ptx | [] [] [] [] [] [] [] [] | 8
|
ptx | [] [] [] [] [] [] [] [] | 8
|
||||||
recode | [] [] [] [] [] [] [] [] [] | 9
|
recode | [] [] [] [] [] [] [] [] [] | 9
|
||||||
sh-utils | [] [] [] [] [] [] [] [] | 8
|
sh-utils | [] [] [] [] [] [] [] [] | 8
|
||||||
sharutils | [] [] [] [] [] | 5
|
sharutils | [] [] [] [] [] [] | 6
|
||||||
tar | [] [] [] [] [] [] [] [] [] [] | 10
|
tar | [] [] [] [] [] [] [] [] [] [] [] | 11
|
||||||
texinfo | [] [] | 2
|
texinfo | [] [] [] | 3
|
||||||
textutils | [] [] [] [] [] [] [] [] [] | 9
|
textutils | [] [] [] [] [] [] [] [] [] | 9
|
||||||
wdiff | [] [] [] [] [] [] [] [] | 8
|
wdiff | [] [] [] [] [] [] [] [] | 8
|
||||||
`----------------------------------------------------'
|
`----------------------------------------------------'
|
||||||
17 languages cs da de en es fi fr it ja ko nl no pl pt ru sl sv
|
17 languages cs da de en es fi fr it ja ko nl no pl pt ru sl sv
|
||||||
27 packages 3 3 25 1 18 1 26 2 1 12 20 9 19 7 4 7 17 175
|
27 packages 6 4 25 1 18 1 26 2 1 12 20 9 19 7 4 7 17 179
|
||||||
|
|
||||||
Some counters in the preceding matrix are higher than the number of
|
Some counters in the preceding matrix are higher than the number of
|
||||||
visible blocks let us expect. This is because a few extra PO files are
|
visible blocks let us expect. This is because a few extra PO files are
|
||||||
|
14
AUTHORS
14
AUTHORS
@ -3,9 +3,6 @@ Authors of GNU Privacy Guard (gnupg).
|
|||||||
Werner Koch. Designed and implemented gnupg.
|
Werner Koch. Designed and implemented gnupg.
|
||||||
|
|
||||||
|
|
||||||
TRANSLATIONS Marco d'Itri 1997-02-22
|
|
||||||
Disclaim
|
|
||||||
|
|
||||||
GPG Matthew Skala 1998-08-10
|
GPG Matthew Skala 1998-08-10
|
||||||
Disclaims changes (Twofish code).
|
Disclaims changes (Twofish code).
|
||||||
mskala@ansuz.sooke.bc.ca
|
mskala@ansuz.sooke.bc.ca
|
||||||
@ -13,9 +10,16 @@ mskala@ansuz.sooke.bc.ca
|
|||||||
GPG Natural Resources Canada 1998-08-11
|
GPG Natural Resources Canada 1998-08-11
|
||||||
Disclaims changes by Matthew Skala.
|
Disclaims changes by Matthew Skala.
|
||||||
|
|
||||||
TRANSLATIONS Gaël Quéri ?????????????
|
GPG Niklas Hernaeus ??????????
|
||||||
|
(Weak key patches)
|
||||||
|
|
||||||
|
|
||||||
|
TRANSLATIONS Marco d'Itri 1997-02-22
|
||||||
|
Disclaim
|
||||||
|
|
||||||
|
TRANSLATIONS Gaël Quéri ??????????
|
||||||
fr.po
|
fr.po
|
||||||
|
|
||||||
TRANSLATIONS Walter Koch ???????????
|
TRANSLATIONS Walter Koch ??????????
|
||||||
de.po
|
de.po
|
||||||
|
|
||||||
|
8
INSTALL
8
INSTALL
@ -33,8 +33,12 @@ Configure options for GNUPG
|
|||||||
Problems
|
Problems
|
||||||
========
|
========
|
||||||
|
|
||||||
If you have compile problems, try the configure options "--with-included-zlib",
|
If you get unresolved externals "gettext" you should run configure again
|
||||||
"--disable-nls" (See ABOUT-NLS) or --disable-dynload.
|
with the option "--with-included-gettext".
|
||||||
|
|
||||||
|
If you have other compile problems, try the configure options
|
||||||
|
"--with-included-zlib" or "--disable-nls" (See ABOUT-NLS)
|
||||||
|
or --disable-dynload.
|
||||||
|
|
||||||
I can't check all assembler files, so if you have problems assembling them
|
I can't check all assembler files, so if you have problems assembling them
|
||||||
(or the program crashes), simply delete the files in the mpi/<cpu> directory.
|
(or the program crashes), simply delete the files in the mpi/<cpu> directory.
|
||||||
|
@ -4,10 +4,6 @@ SUBDIRS = intl po zlib util mpi cipher tools g10 doc checks
|
|||||||
EXTRA_DIST = VERSION
|
EXTRA_DIST = VERSION
|
||||||
|
|
||||||
|
|
||||||
tar: clean
|
|
||||||
cd ..; tar czvf ~/bkup/g10-`date +%d%m`.tar.gz src
|
|
||||||
|
|
||||||
|
|
||||||
dist-hook:
|
dist-hook:
|
||||||
@set -e; \
|
@set -e; \
|
||||||
for file in `find $(srcdir) -type f -name distfiles`; do \
|
for file in `find $(srcdir) -type f -name distfiles`; do \
|
||||||
@ -17,8 +13,5 @@ dist-hook:
|
|||||||
|| cp -p $(srcdir)/$$dir/$$i $(distdir)/$$dir/$$i; \
|
|| cp -p $(srcdir)/$$dir/$$i $(distdir)/$$dir/$$i; \
|
||||||
done ; \
|
done ; \
|
||||||
done
|
done
|
||||||
for file in po/cat-id-tbl.c po/gnupg.pot; do \
|
|
||||||
rm $(distdir)/$$file || true ; \
|
|
||||||
done
|
|
||||||
|
|
||||||
|
|
||||||
|
10
NEWS
10
NEWS
@ -10,6 +10,16 @@ Noteworthy changes in version 0.3.5
|
|||||||
|
|
||||||
* --delete-[secret-]key is now also availabe in gpgm.
|
* --delete-[secret-]key is now also availabe in gpgm.
|
||||||
|
|
||||||
|
* cleartext signatures are not anymore converted to LF only.
|
||||||
|
|
||||||
|
* Fixed a trustdb problem. Run "gpgm --check-trustdb" to fix old
|
||||||
|
trust dbs.
|
||||||
|
|
||||||
|
* Building in another directory should now work.
|
||||||
|
|
||||||
|
* Weak key detection mechanism (Niklas Hernaeus).
|
||||||
|
|
||||||
|
|
||||||
Noteworthy changes in version 0.3.4
|
Noteworthy changes in version 0.3.4
|
||||||
-----------------------------------
|
-----------------------------------
|
||||||
* New options --comment and --set-filename; see g10/OPTIONS
|
* New options --comment and --set-filename; see g10/OPTIONS
|
||||||
|
4
THANKS
4
THANKS
@ -9,6 +9,7 @@ Brian Warner warner@lothar.com
|
|||||||
Caskey L. Dickson caskey@technocage.com
|
Caskey L. Dickson caskey@technocage.com
|
||||||
Charles Levert charles@comm.polymtl.ca
|
Charles Levert charles@comm.polymtl.ca
|
||||||
Christian von Roques roques@pond.sub.org
|
Christian von Roques roques@pond.sub.org
|
||||||
|
Christopher Oliver oliver@fritz.traverse.net
|
||||||
Daniel Eisenbud eisenbud@cs.swarthmore.edu
|
Daniel Eisenbud eisenbud@cs.swarthmore.edu
|
||||||
Detlef Lannert lannert@lannert.rz.uni-duesseldorf.de
|
Detlef Lannert lannert@lannert.rz.uni-duesseldorf.de
|
||||||
Ed Boraas ecxjo@esperanto.org
|
Ed Boraas ecxjo@esperanto.org
|
||||||
@ -27,9 +28,12 @@ Martin Schulte schulte@thp.uni-koeln.de
|
|||||||
Matthew Skala mskala@ansuz.sooke.bc.ca
|
Matthew Skala mskala@ansuz.sooke.bc.ca
|
||||||
Max Valianskiy maxcom@maxcom.ml.org
|
Max Valianskiy maxcom@maxcom.ml.org
|
||||||
Nicolas Graner Nicolas.Graner@cri.u-psud.fr
|
Nicolas Graner Nicolas.Graner@cri.u-psud.fr
|
||||||
|
Niklas Hernaeus nh@sleipner.df.lth.se
|
||||||
Nimrod Zimerman zimerman@forfree.at
|
Nimrod Zimerman zimerman@forfree.at
|
||||||
Oskari Jääskeläinen f33003a@cc.hut.fi
|
Oskari Jääskeläinen f33003a@cc.hut.fi
|
||||||
|
Paul D. Smith psmith@baynetworks.com
|
||||||
Peter Gutmann pgut001@cs.auckland.ac.nz
|
Peter Gutmann pgut001@cs.auckland.ac.nz
|
||||||
|
QingLong qinglong@bolizm.ihep.su
|
||||||
Ralph Gillen gillen@theochem.uni-duesseldorf.de
|
Ralph Gillen gillen@theochem.uni-duesseldorf.de
|
||||||
Serge Munhoven munhoven@mema.ucl.ac.be
|
Serge Munhoven munhoven@mema.ucl.ac.be
|
||||||
Steffen Ullrich ccrlphr@xensei.com
|
Steffen Ullrich ccrlphr@xensei.com
|
||||||
|
18
TODO
18
TODO
@ -1,11 +1,6 @@
|
|||||||
|
|
||||||
* cleanup for SHM einbauen (non-linux)
|
* Should we use the ElGamal subkey if the DSA keyid is given?
|
||||||
|
What about an option --loose-keyid-match?
|
||||||
* shared memory access funktioniert nicht wenn seuid installiert.
|
|
||||||
|
|
||||||
* ElGamal key benutzen wenn die DSA keyid angegeben ist??
|
|
||||||
|
|
||||||
* Apply Paul D. Smith's sugestions for building in another direcory.
|
|
||||||
|
|
||||||
* salted and iterated S2Ks don't work (see passphrase.c).
|
* salted and iterated S2Ks don't work (see passphrase.c).
|
||||||
|
|
||||||
@ -15,14 +10,9 @@
|
|||||||
|
|
||||||
* fix the expire stuff for v4 packets.
|
* fix the expire stuff for v4 packets.
|
||||||
|
|
||||||
* Fix Oscaris problems with the trustdb.
|
|
||||||
* invalid packets (Marco) und Markus Gruber
|
|
||||||
|
|
||||||
* add some sanity checks to read_keyblock, so that we are sure that
|
* add some sanity checks to read_keyblock, so that we are sure that
|
||||||
the minimal requirements are met (?)
|
the minimal requirements are met (?)
|
||||||
|
|
||||||
* what about the CR,LF in cleartext singatures?
|
|
||||||
|
|
||||||
* decryption of message with multiple recipients does not work.
|
* decryption of message with multiple recipients does not work.
|
||||||
|
|
||||||
* preferences of hash algorithms are not yet used.
|
* preferences of hash algorithms are not yet used.
|
||||||
@ -49,10 +39,6 @@
|
|||||||
|
|
||||||
* Is it okay to use gettext for the help system???
|
* Is it okay to use gettext for the help system???
|
||||||
|
|
||||||
* configure checks two times for gcc
|
|
||||||
|
|
||||||
* update gettext
|
|
||||||
|
|
||||||
* Add some stuff for DU cc
|
* Add some stuff for DU cc
|
||||||
|
|
||||||
* check for "expect" before running test genkey1024
|
* check for "expect" before running test genkey1024
|
||||||
|
36
acinclude.m4
36
acinclude.m4
@ -155,12 +155,12 @@ define(WK_CHECK_IPC,
|
|||||||
|
|
||||||
|
|
||||||
######################################################################
|
######################################################################
|
||||||
# progtest.m4 from gettext 0.32
|
# progtest.m4 from gettext 0.35
|
||||||
######################################################################
|
######################################################################
|
||||||
# Search path for a program which passes the given test.
|
# Search path for a program which passes the given test.
|
||||||
# Ulrich Drepper <drepper@cygnus.com>, 1996.
|
# Ulrich Drepper <drepper@cygnus.com>, 1996.
|
||||||
#
|
#
|
||||||
# This file file be copied and used freely without restrictions. It can
|
# This file can be copied and used freely without restrictions. It can
|
||||||
# be used in projects which are not available under the GNU Public License
|
# be used in projects which are not available under the GNU Public License
|
||||||
# but which still want to provide support for the GNU gettext functionality.
|
# but which still want to provide support for the GNU gettext functionality.
|
||||||
# Please note that the actual code is *not* freely available.
|
# Please note that the actual code is *not* freely available.
|
||||||
@ -205,14 +205,13 @@ fi
|
|||||||
AC_SUBST($1)dnl
|
AC_SUBST($1)dnl
|
||||||
])
|
])
|
||||||
|
|
||||||
|
|
||||||
######################################################################
|
######################################################################
|
||||||
# lcmessage.m4 from gettext 0.32
|
# lcmessage.m4 from gettext 0.35
|
||||||
######################################################################
|
######################################################################
|
||||||
# Check whether LC_MESSAGES is available in <locale.h>.
|
# Check whether LC_MESSAGES is available in <locale.h>.
|
||||||
# Ulrich Drepper <drepper@cygnus.com>, 1995.
|
# Ulrich Drepper <drepper@cygnus.com>, 1995.
|
||||||
#
|
#
|
||||||
# This file file be copied and used freely without restrictions. It can
|
# This file can be copied and used freely without restrictions. It can
|
||||||
# be used in projects which are not available under the GNU Public License
|
# be used in projects which are not available under the GNU Public License
|
||||||
# but which still want to provide support for the GNU gettext functionality.
|
# but which still want to provide support for the GNU gettext functionality.
|
||||||
# Please note that the actual code is *not* freely available.
|
# Please note that the actual code is *not* freely available.
|
||||||
@ -229,20 +228,18 @@ AC_DEFUN(AM_LC_MESSAGES,
|
|||||||
fi
|
fi
|
||||||
fi])
|
fi])
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
######################################################################
|
######################################################################
|
||||||
# gettext.m4 from gettext 0.32
|
# gettext.m4 from gettext 0.35
|
||||||
######################################################################
|
######################################################################
|
||||||
# Macro to add for using GNU gettext.
|
# Macro to add for using GNU gettext.
|
||||||
# Ulrich Drepper <drepper@cygnus.com>, 1995.
|
# Ulrich Drepper <drepper@cygnus.com>, 1995.
|
||||||
#
|
#
|
||||||
# This file file be copied and used freely without restrictions. It can
|
# This file can be copied and used freely without restrictions. It can
|
||||||
# be used in projects which are not available under the GNU Public License
|
# be used in projects which are not available under the GNU Public License
|
||||||
# but which still want to provide support for the GNU gettext functionality.
|
# but which still want to provide support for the GNU gettext functionality.
|
||||||
# Please note that the actual code is *not* freely available.
|
# Please note that the actual code is *not* freely available.
|
||||||
|
|
||||||
# serial 3
|
# serial 5
|
||||||
|
|
||||||
AC_DEFUN(AM_WITH_NLS,
|
AC_DEFUN(AM_WITH_NLS,
|
||||||
[AC_MSG_CHECKING([whether NLS is requested])
|
[AC_MSG_CHECKING([whether NLS is requested])
|
||||||
@ -284,9 +281,10 @@ AC_DEFUN(AM_WITH_NLS,
|
|||||||
AC_CHECK_LIB(intl, bindtextdomain,
|
AC_CHECK_LIB(intl, bindtextdomain,
|
||||||
[AC_CACHE_CHECK([for gettext in libintl],
|
[AC_CACHE_CHECK([for gettext in libintl],
|
||||||
gt_cv_func_gettext_libintl,
|
gt_cv_func_gettext_libintl,
|
||||||
[AC_TRY_LINK([], [return (int) gettext ("")],
|
[AC_CHECK_LIB(intl, gettext,
|
||||||
gt_cv_func_gettext_libintl=yes,
|
gt_cv_func_gettext_libintl=yes,
|
||||||
gt_cv_func_gettext_libintl=no)])])
|
gt_cv_func_gettext_libintl=no)],
|
||||||
|
gt_cv_func_gettext_libintl=no)])
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if test "$gt_cv_func_gettext_libc" = "yes" \
|
if test "$gt_cv_func_gettext_libc" = "yes" \
|
||||||
@ -380,7 +378,7 @@ AC_DEFUN(AM_WITH_NLS,
|
|||||||
: ;
|
: ;
|
||||||
else
|
else
|
||||||
AC_MSG_RESULT(
|
AC_MSG_RESULT(
|
||||||
[found xgettext programs is not GNU xgettext; ignore it])
|
[found xgettext program is not GNU xgettext; ignore it])
|
||||||
XGETTEXT=":"
|
XGETTEXT=":"
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
@ -392,6 +390,12 @@ AC_DEFUN(AM_WITH_NLS,
|
|||||||
nls_cv_header_intl=intl/libintl.h
|
nls_cv_header_intl=intl/libintl.h
|
||||||
nls_cv_header_libgt=intl/libgettext.h
|
nls_cv_header_libgt=intl/libgettext.h
|
||||||
fi
|
fi
|
||||||
|
AC_LINK_FILES($nls_cv_header_libgt, $nls_cv_header_intl)
|
||||||
|
AC_OUTPUT_COMMANDS(
|
||||||
|
[case "$CONFIG_FILES" in *po/Makefile.in*)
|
||||||
|
sed -e "/POTFILES =/r po/POTFILES" po/Makefile.in > po/Makefile
|
||||||
|
esac])
|
||||||
|
|
||||||
|
|
||||||
# If this is used in GNU gettext we have to set USE_NLS to `yes'
|
# If this is used in GNU gettext we have to set USE_NLS to `yes'
|
||||||
# because some of the sources are only built for this goal.
|
# because some of the sources are only built for this goal.
|
||||||
@ -436,9 +440,9 @@ AC_DEFUN(AM_GNU_GETTEXT,
|
|||||||
AC_REQUIRE([AC_FUNC_MMAP])dnl
|
AC_REQUIRE([AC_FUNC_MMAP])dnl
|
||||||
|
|
||||||
AC_CHECK_HEADERS([argz.h limits.h locale.h nl_types.h malloc.h string.h \
|
AC_CHECK_HEADERS([argz.h limits.h locale.h nl_types.h malloc.h string.h \
|
||||||
unistd.h values.h sys/param.h])
|
unistd.h sys/param.h])
|
||||||
AC_CHECK_FUNCS([getcwd munmap putenv setenv setlocale strchr strcasecmp \
|
AC_CHECK_FUNCS([getcwd munmap putenv setenv setlocale strchr strcasecmp \
|
||||||
__argz_count __argz_stringify __argz_next])
|
strdup __argz_count __argz_stringify __argz_next])
|
||||||
|
|
||||||
if test "${ac_cv_func_stpcpy+set}" != "set"; then
|
if test "${ac_cv_func_stpcpy+set}" != "set"; then
|
||||||
AC_CHECK_FUNCS(stpcpy)
|
AC_CHECK_FUNCS(stpcpy)
|
||||||
@ -543,5 +547,3 @@ __argz_count __argz_stringify __argz_next])
|
|||||||
< $srcdir/po/POTFILES.in > po/POTFILES
|
< $srcdir/po/POTFILES.in > po/POTFILES
|
||||||
])
|
])
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -19,11 +19,16 @@ TEST_FILES = pubring.asc secring.asc plain-1o.asc plain-2o.asc plain-3o.asc \
|
|||||||
DATA_FILES = data-500 data-9000 data-32000 data-80000
|
DATA_FILES = data-500 data-9000 data-32000 data-80000
|
||||||
|
|
||||||
EXTRA_DIST = defs.inc run-gpg run-gpgm $(TESTS) $(TEST_FILES)
|
EXTRA_DIST = defs.inc run-gpg run-gpgm $(TESTS) $(TEST_FILES)
|
||||||
CLEANFILES = prepared.stamp x y z out err $(DATA_FILES)
|
CLEANFILES = prepared.stamp x y z out err $(DATA_FILES) \
|
||||||
|
plain-1 plain-2 plain-3
|
||||||
|
DISTCLEANFILES = pubring.gpg secring.gpg pubring.pkr secring.skr
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
check: prepared.stamp
|
check: prepared.stamp
|
||||||
|
|
||||||
|
testdata: prepared.stamp
|
||||||
|
|
||||||
prepared.stamp: ./pubring.gpg ./secring.gpg ./plain-1 ./plain-2 ./plain-3 \
|
prepared.stamp: ./pubring.gpg ./secring.gpg ./plain-1 ./plain-2 ./plain-3 \
|
||||||
./pubring.pkr ./secring.skr $(DATA_FILES)
|
./pubring.pkr ./secring.skr $(DATA_FILES)
|
||||||
echo timestamp >./prepared.stamp
|
echo timestamp >./prepared.stamp
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
#info Checking armored detached signatures
|
#info Checking armored detached signatures
|
||||||
for i in $plain_files $data_files ; do
|
for i in $plain_files $data_files ; do
|
||||||
echo "$usrpass1" | ./run-gpg --passphrase-fd 0 -sab -o x --yes $i
|
echo "$usrpass1" | $srcdir/run-gpg --passphrase-fd 0 -sab -o x --yes $i
|
||||||
./run-gpg -o /dev/null --yes x <$i || error "$i: bad signature"
|
$srcdir/run-gpg -o /dev/null --yes x <$i || error "$i: bad signature"
|
||||||
done
|
done
|
||||||
|
|
||||||
|
@ -4,6 +4,6 @@
|
|||||||
|
|
||||||
#info Checking armored detached signatures of multiple files
|
#info Checking armored detached signatures of multiple files
|
||||||
i="$plain_files $data_files"
|
i="$plain_files $data_files"
|
||||||
echo "$usrpass1" | ./run-gpg --passphrase-fd 0 -sab -o x --yes $i
|
echo "$usrpass1" | $srcdir/run-gpg --passphrase-fd 0 -sab -o x --yes $i
|
||||||
cat $i | ./run-gpg -o /dev/null --yes x || error "$i: bad signature"
|
cat $i | $srcdir/run-gpg -o /dev/null --yes x || error "$i: bad signature"
|
||||||
|
|
||||||
|
@ -4,8 +4,8 @@
|
|||||||
|
|
||||||
#info Checking armored encryption
|
#info Checking armored encryption
|
||||||
for i in $plain_files $data_files ; do
|
for i in $plain_files $data_files ; do
|
||||||
./run-gpg -ea -o x --yes -r "$usrname2" $i
|
$srcdir/run-gpg -ea -o x --yes -r "$usrname2" $i
|
||||||
./run-gpg -o y --yes x
|
$srcdir/run-gpg -o y --yes x
|
||||||
cmp $i y || error "$i: mismatch"
|
cmp $i y || error "$i: mismatch"
|
||||||
done
|
done
|
||||||
|
|
||||||
|
@ -4,9 +4,9 @@
|
|||||||
|
|
||||||
#info Checking armored encryption with a pipe
|
#info Checking armored encryption with a pipe
|
||||||
for i in $plain_files $data_files ; do
|
for i in $plain_files $data_files ; do
|
||||||
./run-gpg -ea --yes -r "$usrname2" < $i | tee x | ./run-gpg -o y --yes
|
$srcdir/run-gpg -ea --yes -r "$usrname2" < $i | tee x | $srcdir/run-gpg -o y --yes
|
||||||
cmp $i y || error "$i: mismatch"
|
cmp $i y || error "$i: mismatch"
|
||||||
./run-gpg --yes < x > y
|
$srcdir/run-gpg --yes < x > y
|
||||||
cmp $i y || error "$i: mismatch"
|
cmp $i y || error "$i: mismatch"
|
||||||
done
|
done
|
||||||
|
|
||||||
|
@ -6,8 +6,8 @@
|
|||||||
#info Checking armored signing and encryption
|
#info Checking armored signing and encryption
|
||||||
for i in $plain_files $data_files ; do
|
for i in $plain_files $data_files ; do
|
||||||
echo "$usrpass1" \
|
echo "$usrpass1" \
|
||||||
| ./run-gpg --passphrase-fd 0 -sae -o x --yes -r "$usrname2" $i
|
| $srcdir/run-gpg --passphrase-fd 0 -sae -o x --yes -r "$usrname2" $i
|
||||||
./run-gpg -o y --yes x
|
$srcdir/run-gpg -o y --yes x
|
||||||
cmp $i y || error "$i: mismatch"
|
cmp $i y || error "$i: mismatch"
|
||||||
done
|
done
|
||||||
|
|
||||||
|
@ -4,8 +4,8 @@
|
|||||||
|
|
||||||
#info Checking armored signatures
|
#info Checking armored signatures
|
||||||
for i in $plain_files $data_files ; do
|
for i in $plain_files $data_files ; do
|
||||||
echo "$usrpass1" | ./run-gpg --passphrase-fd 0 -sa -o x --yes $i
|
echo "$usrpass1" | $srcdir/run-gpg --passphrase-fd 0 -sa -o x --yes $i
|
||||||
./run-gpg -o y --yes x
|
$srcdir/run-gpg -o y --yes x
|
||||||
cmp $i y || error "$i: mismatch"
|
cmp $i y || error "$i: mismatch"
|
||||||
done
|
done
|
||||||
|
|
||||||
|
@ -6,13 +6,13 @@
|
|||||||
# but the output has always one. I do not thinkl this is a bug, because
|
# but the output has always one. I do not thinkl this is a bug, because
|
||||||
# it is clear text and not binary text.
|
# it is clear text and not binary text.
|
||||||
for i in $plain_files; do
|
for i in $plain_files; do
|
||||||
echo "$usrpass1" | ./run-gpg --passphrase-fd 0 -sat -o x --yes $i
|
echo "$usrpass1" | $srcdir/run-gpg --passphrase-fd 0 -sat -o x --yes $i
|
||||||
./run-gpg --verify x
|
$srcdir/run-gpg --verify x
|
||||||
done
|
done
|
||||||
# and once more to check rfc1991
|
# and once more to check rfc1991
|
||||||
for i in $plain_files; do
|
for i in $plain_files; do
|
||||||
echo "$usrpass1" | ./run-gpg --passphrase-fd 0 \
|
echo "$usrpass1" | $srcdir/run-gpg --passphrase-fd 0 \
|
||||||
--rfc1991 --digest-algo md5 -sat -o x --yes $i
|
--rfc1991 --digest-algo md5 -sat -o x --yes $i
|
||||||
./run-gpg --verify x
|
$srcdir/run-gpg --verify x
|
||||||
done
|
done
|
||||||
|
|
||||||
|
@ -4,14 +4,14 @@
|
|||||||
|
|
||||||
#info Checking conventional encryption
|
#info Checking conventional encryption
|
||||||
for i in plain-2 data-32000 ; do
|
for i in plain-2 data-32000 ; do
|
||||||
echo "Hier spricht HAL" | ./run-gpg --passphrase-fd 0 -c -o x --yes $i
|
echo "Hier spricht HAL" | $srcdir/run-gpg --passphrase-fd 0 -c -o x --yes $i
|
||||||
echo "Hier spricht HAL" | ./run-gpg --passphrase-fd 0 -o y --yes x
|
echo "Hier spricht HAL" | $srcdir/run-gpg --passphrase-fd 0 -o y --yes x
|
||||||
cmp $i y || error "$i: mismatch"
|
cmp $i y || error "$i: mismatch"
|
||||||
done
|
done
|
||||||
for i in plain-1 data-80000 ; do
|
for i in plain-1 data-80000 ; do
|
||||||
echo "Hier spricht HAL" | ./run-gpg --passphrase-fd 0 \
|
echo "Hier spricht HAL" | $srcdir/run-gpg --passphrase-fd 0 \
|
||||||
--cipher-algo cast5 -c -o x --yes $i
|
--cipher-algo cast5 -c -o x --yes $i
|
||||||
echo "Hier spricht HAL" | ./run-gpg --passphrase-fd 0 -o y --yes x
|
echo "Hier spricht HAL" | $srcdir/run-gpg --passphrase-fd 0 -o y --yes x
|
||||||
cmp $i y || error "$i: mismatch"
|
cmp $i y || error "$i: mismatch"
|
||||||
done
|
done
|
||||||
|
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
|
|
||||||
#info Checking decryption of supplied DSA encrypted file
|
#info Checking decryption of supplied DSA encrypted file
|
||||||
for i in "plain-1" ; do
|
for i in "plain-1" ; do
|
||||||
./run-gpg $dsa_keyrings -o y --yes $i-pgp.asc
|
$srcdir/run-gpg $dsa_keyrings -o y --yes $srcdir/$i-pgp.asc
|
||||||
cmp $i y || error "$i: mismatch"
|
cmp $i y || error "$i: mismatch"
|
||||||
done
|
done
|
||||||
|
|
||||||
|
@ -4,7 +4,8 @@
|
|||||||
|
|
||||||
#info Checking decryption of supplied files
|
#info Checking decryption of supplied files
|
||||||
for i in $plain_files ; do
|
for i in $plain_files ; do
|
||||||
echo "$usrpass1" | ./run-gpg --passphrase-fd 0 -o y --yes $i.asc
|
echo "$usrpass1" | $srcdir/run-gpg --passphrase-fd 0 \
|
||||||
|
-o y --yes $srcdir/$i.asc
|
||||||
cmp $i y || error "$i: mismatch"
|
cmp $i y || error "$i: mismatch"
|
||||||
done
|
done
|
||||||
|
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
|
|
||||||
#info Checking detached signatures
|
#info Checking detached signatures
|
||||||
for i in $plain_files $data_files ; do
|
for i in $plain_files $data_files ; do
|
||||||
echo "$usrpass1" | ./run-gpg --passphrase-fd 0 -sb -o x --yes $i
|
echo "$usrpass1" | $srcdir/run-gpg --passphrase-fd 0 -sb -o x --yes $i
|
||||||
./run-gpg -o /dev/null --yes x <$i || error "$i: bad signature"
|
$srcdir/run-gpg -o /dev/null --yes x <$i || error "$i: bad signature"
|
||||||
done
|
done
|
||||||
|
|
||||||
|
@ -4,6 +4,6 @@
|
|||||||
|
|
||||||
#info Checking detached signatures of multiple files
|
#info Checking detached signatures of multiple files
|
||||||
i="$plain_files $data_files"
|
i="$plain_files $data_files"
|
||||||
echo "$usrpass1" | ./run-gpg --passphrase-fd 0 -sb -o x --yes $i
|
echo "$usrpass1" | $srcdir/run-gpg --passphrase-fd 0 -sb -o x --yes $i
|
||||||
cat $i | ./run-gpg -o /dev/null --yes x || error "$i: bad signature"
|
cat $i | $srcdir/run-gpg -o /dev/null --yes x || error "$i: bad signature"
|
||||||
|
|
||||||
|
@ -4,16 +4,16 @@
|
|||||||
|
|
||||||
#info Checking encryption
|
#info Checking encryption
|
||||||
for i in $plain_files $data_files ; do
|
for i in $plain_files $data_files ; do
|
||||||
./run-gpg $dsa_keyrings -e -o x --yes -r "$dsa_usrname2" $i
|
$srcdir/run-gpg $dsa_keyrings -e -o x --yes -r "$dsa_usrname2" $i
|
||||||
./run-gpg $dsa_keyrings -o y --yes x
|
$srcdir/run-gpg $dsa_keyrings -o y --yes x
|
||||||
cmp $i y || error "$i: mismatch"
|
cmp $i y || error "$i: mismatch"
|
||||||
done
|
done
|
||||||
|
|
||||||
# and with cast
|
# and with cast
|
||||||
for i in $plain_files $data_files ; do
|
for i in $plain_files $data_files ; do
|
||||||
./run-gpg $dsa_keyrings --cipher-algo cast5 -e \
|
$srcdir/run-gpg $dsa_keyrings --cipher-algo cast5 -e \
|
||||||
-o x --yes -r "$dsa_usrname2" $i
|
-o x --yes -r "$dsa_usrname2" $i
|
||||||
./run-gpg $dsa_keyrings -o y --yes x
|
$srcdir/run-gpg $dsa_keyrings -o y --yes x
|
||||||
cmp $i y || error "$i: mismatch"
|
cmp $i y || error "$i: mismatch"
|
||||||
done
|
done
|
||||||
|
|
||||||
|
@ -4,13 +4,13 @@
|
|||||||
|
|
||||||
#info Checking encryption
|
#info Checking encryption
|
||||||
for i in $plain_files $data_files ; do
|
for i in $plain_files $data_files ; do
|
||||||
./run-gpg -e -o x --yes -r "$usrname2" $i
|
$srcdir/run-gpg -e -o x --yes -r "$usrname2" $i
|
||||||
./run-gpg -o y --yes x
|
$srcdir/run-gpg -o y --yes x
|
||||||
cmp $i y || error "$i: mismatch"
|
cmp $i y || error "$i: mismatch"
|
||||||
done
|
done
|
||||||
for i in $plain_files $data_files ; do
|
for i in $plain_files $data_files ; do
|
||||||
./run-gpg -e -o x --yes -r "$usrname2" --cipher-algo cast5 $i
|
$srcdir/run-gpg -e -o x --yes -r "$usrname2" --cipher-algo cast5 $i
|
||||||
./run-gpg -o y --yes x
|
$srcdir/run-gpg -o y --yes x
|
||||||
cmp $i y || error "$i: mismatch"
|
cmp $i y || error "$i: mismatch"
|
||||||
done
|
done
|
||||||
|
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
|
|
||||||
#info Checking encryption with a pipe
|
#info Checking encryption with a pipe
|
||||||
for i in $plain_files $data_files ; do
|
for i in $plain_files $data_files ; do
|
||||||
./run-gpg -e --yes -r "$usrname2" <$i | tee yy | ./run-gpg --yes > y
|
$srcdir/run-gpg -e --yes -r "$usrname2" <$i | tee yy | $srcdir/run-gpg --yes > y
|
||||||
cmp $i y || error "$i: mismatch"
|
cmp $i y || error "$i: mismatch"
|
||||||
done
|
done
|
||||||
|
|
||||||
|
@ -11,7 +11,7 @@ test_one () {
|
|||||||
failed=""
|
failed=""
|
||||||
|
|
||||||
#info Checking message digests
|
#info Checking message digests
|
||||||
echo -n "" | ./run-gpgm --print-mds >y
|
echo -n "" | $srcdir/run-gpgm --print-mds >y
|
||||||
test_one "MD5" "D41D8CD98F00B204E9800998ECF8427E"
|
test_one "MD5" "D41D8CD98F00B204E9800998ECF8427E"
|
||||||
test_one "SHA1" "DA39A3EE5E6B4B0D3255BFEF95601890AFD80709"
|
test_one "SHA1" "DA39A3EE5E6B4B0D3255BFEF95601890AFD80709"
|
||||||
test_one "RMD160" "9C1185A5C5E9FC54612808977EE8F548B2258D31"
|
test_one "RMD160" "9C1185A5C5E9FC54612808977EE8F548B2258D31"
|
||||||
@ -19,7 +19,7 @@ test_one "TIGER" "24F0130C63AC933216166E76B1BB925FF373DE2D49584E7A"
|
|||||||
|
|
||||||
[ "$failed" != "" ] && error "$failed failed for empty string"
|
[ "$failed" != "" ] && error "$failed failed for empty string"
|
||||||
|
|
||||||
echo -n "abcdefghijklmnopqrstuvwxyz" | ./run-gpgm --print-mds >y
|
echo -n "abcdefghijklmnopqrstuvwxyz" | $srcdir/run-gpgm --print-mds >y
|
||||||
test_one "MD5" "C3FCD3D76192E4007DFB496CCA67E13B"
|
test_one "MD5" "C3FCD3D76192E4007DFB496CCA67E13B"
|
||||||
test_one "SHA1" "32D10C7B8CF96570CA04CE37F2A19D84240D3A89"
|
test_one "SHA1" "32D10C7B8CF96570CA04CE37F2A19D84240D3A89"
|
||||||
test_one "RMD160" "F71C27109C692C1B56BBDCEB5B9D2865B3708DBC"
|
test_one "RMD160" "F71C27109C692C1B56BBDCEB5B9D2865B3708DBC"
|
||||||
|
@ -3,8 +3,8 @@
|
|||||||
. $srcdir/defs.inc || exit 3
|
. $srcdir/defs.inc || exit 3
|
||||||
|
|
||||||
for i in $plain_files ; do
|
for i in $plain_files ; do
|
||||||
echo "$usrpass1" | ./run-gpg --passphrase-fd 0 -seat -r two -o x --yes $i
|
echo "$usrpass1" | $srcdir/run-gpg --passphrase-fd 0 -seat -r two -o x --yes $i
|
||||||
./run-gpg -o y --yes x
|
$srcdir/run-gpg -o y --yes x
|
||||||
cmp $i y || error "$i: mismatch"
|
cmp $i y || error "$i: mismatch"
|
||||||
done
|
done
|
||||||
|
|
||||||
|
@ -4,17 +4,17 @@
|
|||||||
|
|
||||||
#info Checking signing and encryption for DSA
|
#info Checking signing and encryption for DSA
|
||||||
for i in $plain_files $data_files ; do
|
for i in $plain_files $data_files ; do
|
||||||
./run-gpg $dsa_keyrings -se -o x --yes \
|
$srcdir/run-gpg $dsa_keyrings -se -o x --yes \
|
||||||
-u "$dsa_usrname1" -r "$dsa_usrname2" $i
|
-u "$dsa_usrname1" -r "$dsa_usrname2" $i
|
||||||
./run-gpg $dsa_keyrings -o y --yes x
|
$srcdir/run-gpg $dsa_keyrings -o y --yes x
|
||||||
cmp $i y || error "$i: mismatch"
|
cmp $i y || error "$i: mismatch"
|
||||||
done
|
done
|
||||||
|
|
||||||
for da in ripemd160 sha1 md5; do
|
for da in ripemd160 sha1 md5; do
|
||||||
for i in $plain_files; do
|
for i in $plain_files; do
|
||||||
./run-gpg $dsa_keyrings -se -o x --yes --digest-algo $da \
|
$srcdir/run-gpg $dsa_keyrings -se -o x --yes --digest-algo $da \
|
||||||
-u "$dsa_usrname1" -r "$dsa_usrname2" $i
|
-u "$dsa_usrname1" -r "$dsa_usrname2" $i
|
||||||
./run-gpg $dsa_keyrings -o y --yes x
|
$srcdir/run-gpg $dsa_keyrings -o y --yes x
|
||||||
cmp $i y || error "$i: mismatch"
|
cmp $i y || error "$i: mismatch"
|
||||||
# process only the first one
|
# process only the first one
|
||||||
break
|
break
|
||||||
|
@ -6,8 +6,8 @@
|
|||||||
#info Checking signing and encryption
|
#info Checking signing and encryption
|
||||||
for i in $plain_files $data_files ; do
|
for i in $plain_files $data_files ; do
|
||||||
echo "$usrpass1" \
|
echo "$usrpass1" \
|
||||||
| ./run-gpg --passphrase-fd 0 -se -o x --yes -r "$usrname2" $i
|
| $srcdir/run-gpg --passphrase-fd 0 -se -o x --yes -r "$usrname2" $i
|
||||||
./run-gpg -o y --yes x
|
$srcdir/run-gpg -o y --yes x
|
||||||
cmp $i y || error "$i: mismatch"
|
cmp $i y || error "$i: mismatch"
|
||||||
done
|
done
|
||||||
|
|
||||||
|
@ -4,16 +4,16 @@
|
|||||||
|
|
||||||
#info Checking DSA signatures (default digest algo)
|
#info Checking DSA signatures (default digest algo)
|
||||||
for i in $plain_files $data_files; do
|
for i in $plain_files $data_files; do
|
||||||
./run-gpg $dsa_keyrings -s -o x --yes -u $dsa_usrname1 $i
|
$srcdir/run-gpg $dsa_keyrings -s -o x --yes -u $dsa_usrname1 $i
|
||||||
./run-gpg $dsa_keyrings -o y --yes x
|
$srcdir/run-gpg $dsa_keyrings -o y --yes x
|
||||||
cmp $i y || error "$i: mismatch"
|
cmp $i y || error "$i: mismatch"
|
||||||
done
|
done
|
||||||
|
|
||||||
for da in ripemd160 sha1 md5; do
|
for da in ripemd160 sha1 md5; do
|
||||||
for i in $plain_files; do
|
for i in $plain_files; do
|
||||||
./run-gpg $dsa_keyrings --digest-algo $da \
|
$srcdir/run-gpg $dsa_keyrings --digest-algo $da \
|
||||||
-s -o x --yes -u $dsa_usrname1 $i
|
-s -o x --yes -u $dsa_usrname1 $i
|
||||||
./run-gpg $dsa_keyrings -o y --yes x
|
$srcdir/run-gpg $dsa_keyrings -o y --yes x
|
||||||
cmp $i y || error "$i: mismatch"
|
cmp $i y || error "$i: mismatch"
|
||||||
# process only the first one
|
# process only the first one
|
||||||
break
|
break
|
||||||
|
@ -4,16 +4,16 @@
|
|||||||
|
|
||||||
#info Checking signatures
|
#info Checking signatures
|
||||||
for i in $plain_files $data_files; do
|
for i in $plain_files $data_files; do
|
||||||
echo "$usrpass1" | ./run-gpg --passphrase-fd 0 -s -o x --yes $i
|
echo "$usrpass1" | $srcdir/run-gpg --passphrase-fd 0 -s -o x --yes $i
|
||||||
./run-gpg -o y --yes x
|
$srcdir/run-gpg -o y --yes x
|
||||||
cmp $i y || error "$i: mismatch"
|
cmp $i y || error "$i: mismatch"
|
||||||
done
|
done
|
||||||
|
|
||||||
for da in ripemd160 sha1 md5 tiger; do
|
for da in ripemd160 sha1 md5 tiger; do
|
||||||
for i in $plain_files; do
|
for i in $plain_files; do
|
||||||
echo "$usrpass1" | ./run-gpg --passphrase-fd 0 --digest-algo $da \
|
echo "$usrpass1" | $srcdir/run-gpg --passphrase-fd 0 --digest-algo $da \
|
||||||
-s -o x --yes $i
|
-s -o x --yes $i
|
||||||
./run-gpg -o y --yes x
|
$srcdir/run-gpg -o y --yes x
|
||||||
cmp $i y || error "$i: mismatch"
|
cmp $i y || error "$i: mismatch"
|
||||||
# process only the first one
|
# process only the first one
|
||||||
break
|
break
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
. $srcdir/defs.inc || exit 3
|
. $srcdir/defs.inc || exit 3
|
||||||
|
|
||||||
# print the GPG version
|
# print the GPG version
|
||||||
./run-gpg --version
|
$srcdir/run-gpg --version
|
||||||
|
|
||||||
#fixme: check that the output is correct
|
#fixme: check that the output is correct
|
||||||
|
|
||||||
|
@ -1,3 +1,11 @@
|
|||||||
|
Mon Sep 14 11:10:55 1998 Werner Koch (wk@(none))
|
||||||
|
|
||||||
|
* blowfish.c (bf_setkey): Niklas Hernaeus patch to detect weak keys.
|
||||||
|
|
||||||
|
Mon Sep 14 09:19:25 1998 Werner Koch (wk@(none))
|
||||||
|
|
||||||
|
* dynload.c (RTLD_NOW): Now defined to 1 if it is undefined.
|
||||||
|
|
||||||
Mon Sep 7 17:04:33 1998 Werner Koch (wk@(none))
|
Mon Sep 7 17:04:33 1998 Werner Koch (wk@(none))
|
||||||
|
|
||||||
* Makefile.am: Fixes to allow a different build directory
|
* Makefile.am: Fixes to allow a different build directory
|
||||||
|
@ -46,7 +46,7 @@ EXTRA_twofish_SOURCES = twofish.c
|
|||||||
|
|
||||||
|
|
||||||
tiger: $(srcdir)/tiger.c
|
tiger: $(srcdir)/tiger.c
|
||||||
$(COMPILE) -shared -fPIC -o tiger $(srcdir)/tiger.c
|
$(COMPILE) -shared -fPIC -O1 -o tiger $(srcdir)/tiger.c
|
||||||
|
|
||||||
twofish: $(srcdir)/twofish.c
|
twofish: $(srcdir)/twofish.c
|
||||||
$(COMPILE) -shared -fPIC -o twofish $(srcdir)/twofish.c
|
$(COMPILE) -shared -fPIC -o twofish $(srcdir)/twofish.c
|
||||||
|
@ -41,7 +41,7 @@
|
|||||||
#define CIPHER_ALGO_BLOWFISH 4 /* blowfish 128 bit key */
|
#define CIPHER_ALGO_BLOWFISH 4 /* blowfish 128 bit key */
|
||||||
#define CIPHER_ALGO_BLOWFISH160 42 /* blowfish 160 bit key (not in OpenPGP)*/
|
#define CIPHER_ALGO_BLOWFISH160 42 /* blowfish 160 bit key (not in OpenPGP)*/
|
||||||
|
|
||||||
#define FNCCAST_SETKEY(f) (void(*)(void*, byte*, unsigned))(f)
|
#define FNCCAST_SETKEY(f) (int(*)(void*, byte*, unsigned))(f)
|
||||||
#define FNCCAST_CRYPT(f) (void(*)(void*, byte*, byte*))(f)
|
#define FNCCAST_CRYPT(f) (void(*)(void*, byte*, byte*))(f)
|
||||||
|
|
||||||
#define BLOWFISH_BLOCKSIZE 8
|
#define BLOWFISH_BLOCKSIZE 8
|
||||||
@ -55,7 +55,7 @@ typedef struct {
|
|||||||
u32 p[BLOWFISH_ROUNDS+2];
|
u32 p[BLOWFISH_ROUNDS+2];
|
||||||
} BLOWFISH_context;
|
} BLOWFISH_context;
|
||||||
|
|
||||||
static void bf_setkey( BLOWFISH_context *c, byte *key, unsigned keylen );
|
static int bf_setkey( BLOWFISH_context *c, byte *key, unsigned keylen );
|
||||||
static void encrypt_block( BLOWFISH_context *bc, byte *outbuf, byte *inbuf );
|
static void encrypt_block( BLOWFISH_context *bc, byte *outbuf, byte *inbuf );
|
||||||
static void decrypt_block( BLOWFISH_context *bc, byte *outbuf, byte *inbuf );
|
static void decrypt_block( BLOWFISH_context *bc, byte *outbuf, byte *inbuf );
|
||||||
|
|
||||||
@ -480,7 +480,7 @@ selftest()
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
static void
|
static int
|
||||||
bf_setkey( BLOWFISH_context *c, byte *key, unsigned keylen )
|
bf_setkey( BLOWFISH_context *c, byte *key, unsigned keylen )
|
||||||
{
|
{
|
||||||
int i, j;
|
int i, j;
|
||||||
@ -543,6 +543,19 @@ bf_setkey( BLOWFISH_context *c, byte *key, unsigned keylen )
|
|||||||
c->s3[i] = datal;
|
c->s3[i] = datal;
|
||||||
c->s3[i+1] = datar;
|
c->s3[i+1] = datar;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* Check for weak key. A weak key is a key in which a value in */
|
||||||
|
/* the P-array (here c) occurs more than once per table. */
|
||||||
|
for(i=0; i < 255; i++ ) {
|
||||||
|
for( j=i+1; j < 256; j++) {
|
||||||
|
if( (c->s0[i] == c->s0[j]) || (c->s1[i] == c->s1[j]) ||
|
||||||
|
(c->s2[i] == c->s2[j]) || (c->s3[i] == c->s3[j]) )
|
||||||
|
return G10ERR_WEAK_KEY;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -555,7 +568,7 @@ bf_setkey( BLOWFISH_context *c, byte *key, unsigned keylen )
|
|||||||
const char *
|
const char *
|
||||||
blowfish_get_info( int algo, size_t *keylen,
|
blowfish_get_info( int algo, size_t *keylen,
|
||||||
size_t *blocksize, size_t *contextsize,
|
size_t *blocksize, size_t *contextsize,
|
||||||
void (**r_setkey)( void *c, byte *key, unsigned keylen ),
|
int (**r_setkey)( void *c, byte *key, unsigned keylen ),
|
||||||
void (**r_encrypt)( void *c, byte *outbuf, byte *inbuf ),
|
void (**r_encrypt)( void *c, byte *outbuf, byte *inbuf ),
|
||||||
void (**r_decrypt)( void *c, byte *outbuf, byte *inbuf )
|
void (**r_decrypt)( void *c, byte *outbuf, byte *inbuf )
|
||||||
)
|
)
|
||||||
|
@ -26,7 +26,7 @@
|
|||||||
const char *
|
const char *
|
||||||
blowfish_get_info( int algo, size_t *keylen,
|
blowfish_get_info( int algo, size_t *keylen,
|
||||||
size_t *blocksize, size_t *contextsize,
|
size_t *blocksize, size_t *contextsize,
|
||||||
void (**setkey)( void *c, byte *key, unsigned keylen ),
|
int (**setkey)( void *c, byte *key, unsigned keylen ),
|
||||||
void (**encrypt)( void *c, byte *outbuf, byte *inbuf ),
|
void (**encrypt)( void *c, byte *outbuf, byte *inbuf ),
|
||||||
void (**decrypt)( void *c, byte *outbuf, byte *inbuf )
|
void (**decrypt)( void *c, byte *outbuf, byte *inbuf )
|
||||||
);
|
);
|
||||||
|
@ -47,7 +47,7 @@
|
|||||||
|
|
||||||
#define CIPHER_ALGO_CAST5 3
|
#define CIPHER_ALGO_CAST5 3
|
||||||
|
|
||||||
#define FNCCAST_SETKEY(f) (void(*)(void*, byte*, unsigned))(f)
|
#define FNCCAST_SETKEY(f) (int(*)(void*, byte*, unsigned))(f)
|
||||||
#define FNCCAST_CRYPT(f) (void(*)(void*, byte*, byte*))(f)
|
#define FNCCAST_CRYPT(f) (void(*)(void*, byte*, byte*))(f)
|
||||||
|
|
||||||
#define CAST5_BLOCKSIZE 8
|
#define CAST5_BLOCKSIZE 8
|
||||||
@ -57,7 +57,7 @@ typedef struct {
|
|||||||
byte Kr[16];
|
byte Kr[16];
|
||||||
} CAST5_context;
|
} CAST5_context;
|
||||||
|
|
||||||
static void cast_setkey( CAST5_context *c, byte *key, unsigned keylen );
|
static int cast_setkey( CAST5_context *c, byte *key, unsigned keylen );
|
||||||
static void encrypt_block( CAST5_context *bc, byte *outbuf, byte *inbuf );
|
static void encrypt_block( CAST5_context *bc, byte *outbuf, byte *inbuf );
|
||||||
static void decrypt_block( CAST5_context *bc, byte *outbuf, byte *inbuf );
|
static void decrypt_block( CAST5_context *bc, byte *outbuf, byte *inbuf );
|
||||||
|
|
||||||
@ -549,7 +549,7 @@ key_schedule( u32 *x, u32 *z, u32 *k )
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static void
|
static int
|
||||||
cast_setkey( CAST5_context *c, byte *key, unsigned keylen )
|
cast_setkey( CAST5_context *c, byte *key, unsigned keylen )
|
||||||
{
|
{
|
||||||
static int initialized;
|
static int initialized;
|
||||||
@ -582,6 +582,7 @@ cast_setkey( CAST5_context *c, byte *key, unsigned keylen )
|
|||||||
|
|
||||||
#undef xi
|
#undef xi
|
||||||
#undef zi
|
#undef zi
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -594,7 +595,7 @@ cast_setkey( CAST5_context *c, byte *key, unsigned keylen )
|
|||||||
const char *
|
const char *
|
||||||
cast5_get_info( int algo, size_t *keylen,
|
cast5_get_info( int algo, size_t *keylen,
|
||||||
size_t *blocksize, size_t *contextsize,
|
size_t *blocksize, size_t *contextsize,
|
||||||
void (**r_setkey)( void *c, byte *key, unsigned keylen ),
|
int (**r_setkey)( void *c, byte *key, unsigned keylen ),
|
||||||
void (**r_encrypt)( void *c, byte *outbuf, byte *inbuf ),
|
void (**r_encrypt)( void *c, byte *outbuf, byte *inbuf ),
|
||||||
void (**r_decrypt)( void *c, byte *outbuf, byte *inbuf )
|
void (**r_decrypt)( void *c, byte *outbuf, byte *inbuf )
|
||||||
)
|
)
|
||||||
|
@ -25,7 +25,7 @@
|
|||||||
const char *
|
const char *
|
||||||
cast5_get_info( int algo, size_t *keylen,
|
cast5_get_info( int algo, size_t *keylen,
|
||||||
size_t *blocksize, size_t *contextsize,
|
size_t *blocksize, size_t *contextsize,
|
||||||
void (**setkey)( void *c, byte *key, unsigned keylen ),
|
int (**setkey)( void *c, byte *key, unsigned keylen ),
|
||||||
void (**encrypt)( void *c, byte *outbuf, byte *inbuf ),
|
void (**encrypt)( void *c, byte *outbuf, byte *inbuf ),
|
||||||
void (**decrypt)( void *c, byte *outbuf, byte *inbuf )
|
void (**decrypt)( void *c, byte *outbuf, byte *inbuf )
|
||||||
);
|
);
|
||||||
|
@ -43,7 +43,7 @@ struct cipher_table_s {
|
|||||||
size_t blocksize;
|
size_t blocksize;
|
||||||
size_t keylen;
|
size_t keylen;
|
||||||
size_t contextsize; /* allocate this amount of context */
|
size_t contextsize; /* allocate this amount of context */
|
||||||
void (*setkey)( void *c, byte *key, unsigned keylen );
|
int (*setkey)( void *c, byte *key, unsigned keylen );
|
||||||
void (*encrypt)( void *c, byte *outbuf, byte *inbuf );
|
void (*encrypt)( void *c, byte *outbuf, byte *inbuf );
|
||||||
void (*decrypt)( void *c, byte *outbuf, byte *inbuf );
|
void (*decrypt)( void *c, byte *outbuf, byte *inbuf );
|
||||||
};
|
};
|
||||||
@ -58,15 +58,15 @@ struct cipher_handle_s {
|
|||||||
byte iv[MAX_BLOCKSIZE]; /* (this should be ulong aligned) */
|
byte iv[MAX_BLOCKSIZE]; /* (this should be ulong aligned) */
|
||||||
byte lastiv[MAX_BLOCKSIZE];
|
byte lastiv[MAX_BLOCKSIZE];
|
||||||
int unused; /* in IV */
|
int unused; /* in IV */
|
||||||
void (*setkey)( void *c, byte *key, unsigned keylen );
|
int (*setkey)( void *c, byte *key, unsigned keylen );
|
||||||
void (*encrypt)( void *c, byte *outbuf, byte *inbuf );
|
void (*encrypt)( void *c, byte *outbuf, byte *inbuf );
|
||||||
void (*decrypt)( void *c, byte *outbuf, byte *inbuf );
|
void (*decrypt)( void *c, byte *outbuf, byte *inbuf );
|
||||||
byte context[1];
|
byte context[1];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
static void
|
static int
|
||||||
dummy_setkey( void *c, byte *key, unsigned keylen ) { }
|
dummy_setkey( void *c, byte *key, unsigned keylen ) { return 0; }
|
||||||
static void
|
static void
|
||||||
dummy_encrypt_block( void *c, byte *outbuf, byte *inbuf ) { BUG(); }
|
dummy_encrypt_block( void *c, byte *outbuf, byte *inbuf ) { BUG(); }
|
||||||
static void
|
static void
|
||||||
@ -346,10 +346,10 @@ cipher_close( CIPHER_HANDLE c )
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void
|
int
|
||||||
cipher_setkey( CIPHER_HANDLE c, byte *key, unsigned keylen )
|
cipher_setkey( CIPHER_HANDLE c, byte *key, unsigned keylen )
|
||||||
{
|
{
|
||||||
(*c->setkey)( &c->context, key, keylen );
|
return (*c->setkey)( &c->context, key, keylen );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -30,6 +30,11 @@
|
|||||||
#include "cipher.h"
|
#include "cipher.h"
|
||||||
#include "dynload.h"
|
#include "dynload.h"
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef RTLD_NOW
|
||||||
|
#define RTLD_NOW 1
|
||||||
|
#endif
|
||||||
|
|
||||||
typedef struct ext_list {
|
typedef struct ext_list {
|
||||||
struct ext_list *next;
|
struct ext_list *next;
|
||||||
void *handle; /* handle from dlopen() */
|
void *handle; /* handle from dlopen() */
|
||||||
@ -234,7 +239,7 @@ enum_gnupgext_digests( void **enum_context,
|
|||||||
const char *
|
const char *
|
||||||
enum_gnupgext_ciphers( void **enum_context, int *algo,
|
enum_gnupgext_ciphers( void **enum_context, int *algo,
|
||||||
size_t *keylen, size_t *blocksize, size_t *contextsize,
|
size_t *keylen, size_t *blocksize, size_t *contextsize,
|
||||||
void (**setkey)( void *c, byte *key, unsigned keylen ),
|
int (**setkey)( void *c, byte *key, unsigned keylen ),
|
||||||
void (**encrypt)( void *c, byte *outbuf, byte *inbuf ),
|
void (**encrypt)( void *c, byte *outbuf, byte *inbuf ),
|
||||||
void (**decrypt)( void *c, byte *outbuf, byte *inbuf )
|
void (**decrypt)( void *c, byte *outbuf, byte *inbuf )
|
||||||
)
|
)
|
||||||
@ -242,7 +247,7 @@ enum_gnupgext_ciphers( void **enum_context, int *algo,
|
|||||||
EXTLIST r;
|
EXTLIST r;
|
||||||
ENUMCONTEXT *ctx;
|
ENUMCONTEXT *ctx;
|
||||||
const char * (*finfo)(int, size_t*, size_t*, size_t*,
|
const char * (*finfo)(int, size_t*, size_t*, size_t*,
|
||||||
void (**)( void *, byte *, unsigned),
|
int (**)( void *, byte *, unsigned),
|
||||||
void (**)( void *, byte *, byte *),
|
void (**)( void *, byte *, byte *),
|
||||||
void (**)( void *, byte *, byte *));
|
void (**)( void *, byte *, byte *));
|
||||||
|
|
||||||
|
@ -31,7 +31,7 @@ enum_gnupgext_digests( void **enum_context,
|
|||||||
const char *
|
const char *
|
||||||
enum_gnupgext_ciphers( void **enum_context, int *algo,
|
enum_gnupgext_ciphers( void **enum_context, int *algo,
|
||||||
size_t *keylen, size_t *blocksize, size_t *contextsize,
|
size_t *keylen, size_t *blocksize, size_t *contextsize,
|
||||||
void (**setkey)( void *c, byte *key, unsigned keylen ),
|
int (**setkey)( void *c, byte *key, unsigned keylen ),
|
||||||
void (**encrypt)( void *c, byte *outbuf, byte *inbuf ),
|
void (**encrypt)( void *c, byte *outbuf, byte *inbuf ),
|
||||||
void (**decrypt)( void *c, byte *outbuf, byte *inbuf )
|
void (**decrypt)( void *c, byte *outbuf, byte *inbuf )
|
||||||
);
|
);
|
||||||
|
@ -29,7 +29,7 @@
|
|||||||
static void selftest(void);
|
static void selftest(void);
|
||||||
|
|
||||||
/* Macros used by the info function. */
|
/* Macros used by the info function. */
|
||||||
#define FNCCAST_SETKEY(f) ((void(*)(void*, byte*, unsigned))(f))
|
#define FNCCAST_SETKEY(f) ((int(*)(void*, byte*, unsigned))(f))
|
||||||
#define FNCCAST_CRYPT(f) ((void(*)(void*, byte*, byte*))(f))
|
#define FNCCAST_CRYPT(f) ((void(*)(void*, byte*, byte*))(f))
|
||||||
|
|
||||||
/* Structure for an expanded Twofish key. s contains the key-dependent
|
/* Structure for an expanded Twofish key. s contains the key-dependent
|
||||||
@ -443,7 +443,7 @@ static const byte exp_to_poly[492] = {
|
|||||||
/* Perform the key setup. Note that this works *only* with 128-bit keys,
|
/* Perform the key setup. Note that this works *only* with 128-bit keys,
|
||||||
* despite the API that makes it look like it might support other sizes. */
|
* despite the API that makes it look like it might support other sizes. */
|
||||||
|
|
||||||
static void
|
static int
|
||||||
twofish_setkey (TWOFISH_context *ctx, const byte *key, const unsigned keylen)
|
twofish_setkey (TWOFISH_context *ctx, const byte *key, const unsigned keylen)
|
||||||
{
|
{
|
||||||
/* Temporaries for CALC_K. */
|
/* Temporaries for CALC_K. */
|
||||||
@ -577,6 +577,8 @@ twofish_setkey (TWOFISH_context *ctx, const byte *key, const unsigned keylen)
|
|||||||
CALC_K (k, 26, 0x8B, 0xAE, 0x30, 0x5B);
|
CALC_K (k, 26, 0x8B, 0xAE, 0x30, 0x5B);
|
||||||
CALC_K (k, 28, 0x84, 0x8A, 0x54, 0x00);
|
CALC_K (k, 28, 0x84, 0x8A, 0x54, 0x00);
|
||||||
CALC_K (k, 30, 0xDF, 0xBC, 0x23, 0x9D);
|
CALC_K (k, 30, 0xDF, 0xBC, 0x23, 0x9D);
|
||||||
|
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Macros to compute the g() function in the encryption and decryption
|
/* Macros to compute the g() function in the encryption and decryption
|
||||||
@ -825,7 +827,7 @@ main()
|
|||||||
static const char *
|
static const char *
|
||||||
twofish_get_info (int algo, size_t *keylen,
|
twofish_get_info (int algo, size_t *keylen,
|
||||||
size_t *blocksize, size_t *contextsize,
|
size_t *blocksize, size_t *contextsize,
|
||||||
void (**r_setkey) (void *c, byte *key, unsigned keylen),
|
int (**r_setkey) (void *c, byte *key, unsigned keylen),
|
||||||
void (**r_encrypt) (void *c, byte *outbuf, byte *inbuf),
|
void (**r_encrypt) (void *c, byte *outbuf, byte *inbuf),
|
||||||
void (**r_decrypt) (void *c, byte *outbuf, byte *inbuf)
|
void (**r_decrypt) (void *c, byte *outbuf, byte *inbuf)
|
||||||
)
|
)
|
||||||
|
@ -79,7 +79,11 @@ AM_MISSING_PROG(AUTOCONF, autoconf, $missing_dir)
|
|||||||
AM_MISSING_PROG(AUTOMAKE, automake, $missing_dir)
|
AM_MISSING_PROG(AUTOMAKE, automake, $missing_dir)
|
||||||
AM_MISSING_PROG(AUTOHEADER, autoheader, $missing_dir)
|
AM_MISSING_PROG(AUTOHEADER, autoheader, $missing_dir)
|
||||||
dnl AM_MISSING_PROG(MAKEINFO, makeinfo, $missing_dir)
|
dnl AM_MISSING_PROG(MAKEINFO, makeinfo, $missing_dir)
|
||||||
|
AC_PROG_CC
|
||||||
|
AC_PROG_CPP
|
||||||
AC_ISC_POSIX
|
AC_ISC_POSIX
|
||||||
|
AC_PROG_RANLIB
|
||||||
|
AC_PROG_INSTALL
|
||||||
|
|
||||||
case "${target}" in
|
case "${target}" in
|
||||||
i386--mingw32)
|
i386--mingw32)
|
||||||
@ -93,10 +97,6 @@ case "${target}" in
|
|||||||
GNUPG_LIBDIR="c:/lib/gnupg"
|
GNUPG_LIBDIR="c:/lib/gnupg"
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
AC_PROG_RANLIB
|
|
||||||
AC_PROG_INSTALL
|
|
||||||
AC_PROG_CC
|
|
||||||
AC_PROG_CPP
|
|
||||||
AC_DEFINE(USE_RAND_UNIX)
|
AC_DEFINE(USE_RAND_UNIX)
|
||||||
GNUPG_LIBDIR="$g10_prefix/lib/gnupg"
|
GNUPG_LIBDIR="$g10_prefix/lib/gnupg"
|
||||||
;;
|
;;
|
||||||
@ -182,6 +182,7 @@ dnl Checks for library functions.
|
|||||||
AC_FUNC_VPRINTF
|
AC_FUNC_VPRINTF
|
||||||
AC_CHECK_FUNCS(strerror stpcpy strlwr tcgetattr rand strtoul mlock mmap)
|
AC_CHECK_FUNCS(strerror stpcpy strlwr tcgetattr rand strtoul mlock mmap)
|
||||||
AC_CHECK_FUNCS(memmove gettimeofday getrusage gethrtime setrlimit)
|
AC_CHECK_FUNCS(memmove gettimeofday getrusage gethrtime setrlimit)
|
||||||
|
AC_CHECK_FUNCS(atexit raise getpagesize)
|
||||||
|
|
||||||
WK_CHECK_IPC
|
WK_CHECK_IPC
|
||||||
if test "$ac_cv_header_sys_shm_h" = "yes"; then
|
if test "$ac_cv_header_sys_shm_h" = "yes"; then
|
||||||
|
@ -1,3 +1,22 @@
|
|||||||
|
Mon Sep 14 11:40:52 1998 Werner Koch (wk@(none))
|
||||||
|
|
||||||
|
* seskey.c (make_session_key): Now detects weak keys.
|
||||||
|
|
||||||
|
* trustdb (clear_trust_checked_flag): New.
|
||||||
|
|
||||||
|
* plaintext.c (handle_plaintext): Does no anymore suppress CR from
|
||||||
|
cleartext signed messages.
|
||||||
|
|
||||||
|
Sun Sep 13 12:54:29 1998 Werner Koch (wk@(none))
|
||||||
|
|
||||||
|
* trustdb.c (insert_trust_record): Fixed a stupid bug in the free
|
||||||
|
liunked list loops.
|
||||||
|
|
||||||
|
Sat Sep 12 15:49:16 1998 Werner Koch (wk@(none))
|
||||||
|
|
||||||
|
* status.c (remove_shmid): New.
|
||||||
|
(init_shm_comprocess): Now sets permission to the real uid.
|
||||||
|
|
||||||
Wed Sep 9 11:15:03 1998 Werner Koch (wk@(none))
|
Wed Sep 9 11:15:03 1998 Werner Koch (wk@(none))
|
||||||
|
|
||||||
* packet.h (PKT_pubkey_enc): New flah throw_keyid, and add logic to
|
* packet.h (PKT_pubkey_enc): New flah throw_keyid, and add logic to
|
||||||
|
@ -29,6 +29,7 @@
|
|||||||
#include "mpi.h"
|
#include "mpi.h"
|
||||||
#include "cipher.h"
|
#include "cipher.h"
|
||||||
#include "options.h"
|
#include "options.h"
|
||||||
|
#include "i18n.h"
|
||||||
|
|
||||||
|
|
||||||
static int decode_filter( void *opaque, int control, IOBUF a,
|
static int decode_filter( void *opaque, int control, IOBUF a,
|
||||||
@ -68,7 +69,10 @@ decrypt_data( PKT_encrypted *ed, DEK *dek )
|
|||||||
log_bug("Nanu\n"); /* oops: found a bug */
|
log_bug("Nanu\n"); /* oops: found a bug */
|
||||||
|
|
||||||
dfx.cipher_hd = cipher_open( dek->algo, CIPHER_MODE_AUTO_CFB, 1 );
|
dfx.cipher_hd = cipher_open( dek->algo, CIPHER_MODE_AUTO_CFB, 1 );
|
||||||
cipher_setkey( dfx.cipher_hd, dek->key, dek->keylen );
|
if( cipher_setkey( dfx.cipher_hd, dek->key, dek->keylen ) )
|
||||||
|
log_info(_("Warning: Message was encrypted with "
|
||||||
|
"a weak key in the symmetric cipher.\n"));
|
||||||
|
|
||||||
cipher_setiv( dfx.cipher_hd, NULL );
|
cipher_setiv( dfx.cipher_hd, NULL );
|
||||||
|
|
||||||
if( ed->len ) {
|
if( ed->len ) {
|
||||||
|
@ -394,6 +394,8 @@ import_one( const char *fname, KBNODE keyblock )
|
|||||||
log_error("key %08lX: trustdb insert failed: %s\n",
|
log_error("key %08lX: trustdb insert failed: %s\n",
|
||||||
(ulong)keyid[1], g10_errstr(rc) );
|
(ulong)keyid[1], g10_errstr(rc) );
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
rc = clear_trust_checked_flag( new_key? pk : pk_orig );
|
||||||
}
|
}
|
||||||
|
|
||||||
leave:
|
leave:
|
||||||
|
@ -213,6 +213,7 @@ sign_uids( KBNODE keyblock, STRLIST locusr, int *ret_modified )
|
|||||||
KBNODE node, uidnode;
|
KBNODE node, uidnode;
|
||||||
PKT_public_key *primary_pk;
|
PKT_public_key *primary_pk;
|
||||||
int select_all = !count_selected_uids(keyblock);
|
int select_all = !count_selected_uids(keyblock);
|
||||||
|
int upd_trust = 0;
|
||||||
|
|
||||||
/* build a list of all signators */
|
/* build a list of all signators */
|
||||||
rc=build_sk_list( locusr, &sk_list, 0, 1 );
|
rc=build_sk_list( locusr, &sk_list, 0, 1 );
|
||||||
@ -292,6 +293,7 @@ sign_uids( KBNODE keyblock, STRLIST locusr, int *ret_modified )
|
|||||||
goto leave;
|
goto leave;
|
||||||
}
|
}
|
||||||
*ret_modified = 1; /* we changed the keyblock */
|
*ret_modified = 1; /* we changed the keyblock */
|
||||||
|
upd_trust = 1;
|
||||||
|
|
||||||
pkt = m_alloc_clear( sizeof *pkt );
|
pkt = m_alloc_clear( sizeof *pkt );
|
||||||
pkt->pkttype = PKT_SIGNATURE;
|
pkt->pkttype = PKT_SIGNATURE;
|
||||||
@ -301,6 +303,10 @@ sign_uids( KBNODE keyblock, STRLIST locusr, int *ret_modified )
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
} /* end loop over signators */
|
} /* end loop over signators */
|
||||||
|
if( upd_trust && primary_pk ) {
|
||||||
|
rc = clear_trust_checked_flag( primary_pk );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
leave:
|
leave:
|
||||||
release_sk_list( sk_list );
|
release_sk_list( sk_list );
|
||||||
|
@ -137,7 +137,7 @@ handle_plaintext( PKT_plaintext *pt, md_filter_context_t *mfx,
|
|||||||
else
|
else
|
||||||
md_putc(mfx->md, c );
|
md_putc(mfx->md, c );
|
||||||
}
|
}
|
||||||
if( convert && c == '\r' )
|
if( convert && !clearsig && c == '\r' )
|
||||||
continue; /* fixme: this hack might be too simple */
|
continue; /* fixme: this hack might be too simple */
|
||||||
if( fp ) {
|
if( fp ) {
|
||||||
if( putc( c, fp ) == EOF ) {
|
if( putc( c, fp ) == EOF ) {
|
||||||
@ -157,7 +157,7 @@ handle_plaintext( PKT_plaintext *pt, md_filter_context_t *mfx,
|
|||||||
else
|
else
|
||||||
md_putc(mfx->md, c );
|
md_putc(mfx->md, c );
|
||||||
}
|
}
|
||||||
if( convert && c == '\r' )
|
if( convert && !clearsig && c == '\r' )
|
||||||
continue; /* fixme: this hack might be too simple */
|
continue; /* fixme: this hack might be too simple */
|
||||||
if( fp ) {
|
if( fp ) {
|
||||||
if( putc( c, fp ) == EOF ) {
|
if( putc( c, fp ) == EOF ) {
|
||||||
|
@ -73,7 +73,6 @@ do_check( PKT_secret_key *sk )
|
|||||||
int ndata;
|
int ndata;
|
||||||
byte *p, *data;
|
byte *p, *data;
|
||||||
|
|
||||||
|
|
||||||
i = pubkey_get_npkey(sk->pubkey_algo);
|
i = pubkey_get_npkey(sk->pubkey_algo);
|
||||||
assert( mpi_is_opaque( sk->skey[i] ) );
|
assert( mpi_is_opaque( sk->skey[i] ) );
|
||||||
p = mpi_get_opaque( sk->skey[i], &ndata );
|
p = mpi_get_opaque( sk->skey[i], &ndata );
|
||||||
@ -212,7 +211,9 @@ protect_secret_key( PKT_secret_key *sk, DEK *dek )
|
|||||||
else {
|
else {
|
||||||
cipher_hd = cipher_open( sk->protect.algo,
|
cipher_hd = cipher_open( sk->protect.algo,
|
||||||
CIPHER_MODE_AUTO_CFB, 1 );
|
CIPHER_MODE_AUTO_CFB, 1 );
|
||||||
cipher_setkey( cipher_hd, dek->key, dek->keylen );
|
if( cipher_setkey( cipher_hd, dek->key, dek->keylen ) )
|
||||||
|
log_info(_("Warning: Weak key detected"
|
||||||
|
" - please change passphrase again.\n"));
|
||||||
cipher_setiv( cipher_hd, NULL );
|
cipher_setiv( cipher_hd, NULL );
|
||||||
cipher_encrypt( cipher_hd, sk->protect.iv, sk->protect.iv, 8 );
|
cipher_encrypt( cipher_hd, sk->protect.iv, sk->protect.iv, 8 );
|
||||||
if( sk->version >= 4 ) {
|
if( sk->version >= 4 ) {
|
||||||
|
18
g10/seskey.c
18
g10/seskey.c
@ -27,6 +27,7 @@
|
|||||||
#include "cipher.h"
|
#include "cipher.h"
|
||||||
#include "mpi.h"
|
#include "mpi.h"
|
||||||
#include "main.h"
|
#include "main.h"
|
||||||
|
#include "i18n.h"
|
||||||
|
|
||||||
|
|
||||||
/****************
|
/****************
|
||||||
@ -35,8 +36,25 @@
|
|||||||
void
|
void
|
||||||
make_session_key( DEK *dek )
|
make_session_key( DEK *dek )
|
||||||
{
|
{
|
||||||
|
CIPHER_HANDLE chd;
|
||||||
|
int i, rc;
|
||||||
|
|
||||||
dek->keylen = cipher_get_keylen( dek->algo ) / 8;
|
dek->keylen = cipher_get_keylen( dek->algo ) / 8;
|
||||||
|
|
||||||
|
chd = cipher_open( dek->algo, CIPHER_MODE_AUTO_CFB, 1 );
|
||||||
|
for(i=0; i < 16; i++ ) {
|
||||||
|
rc = cipher_setkey( chd, dek->key, dek->keylen );
|
||||||
|
if( !rc ) {
|
||||||
|
cipher_close( chd );
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
log_info(_("weak key created - retrying\n") );
|
||||||
|
/* Renew the session key until we get a non-weak key. */
|
||||||
randomize_buffer( dek->key, dek->keylen, 1 );
|
randomize_buffer( dek->key, dek->keylen, 1 );
|
||||||
|
}
|
||||||
|
log_fatal(_(
|
||||||
|
"cannot avoid weak key for symmetric cipher; tried %d times!\n"),
|
||||||
|
i);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
32
g10/status.c
32
g10/status.c
@ -105,11 +105,27 @@ write_status_text ( int no, const char *text)
|
|||||||
|
|
||||||
|
|
||||||
#ifdef USE_SHM_COPROCESSING
|
#ifdef USE_SHM_COPROCESSING
|
||||||
|
|
||||||
|
#ifndef IPC_RMID_DEFERRED_RELEASE
|
||||||
|
static void
|
||||||
|
remove_shmid( void )
|
||||||
|
{
|
||||||
|
if( shm_id != -1 ) {
|
||||||
|
shmctl ( shm_id, IPC_RMID, 0);
|
||||||
|
shm_id = -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
void
|
void
|
||||||
init_shm_coprocessing ( ulong requested_shm_size, int lock_mem )
|
init_shm_coprocessing ( ulong requested_shm_size, int lock_mem )
|
||||||
{
|
{
|
||||||
char buf[100];
|
char buf[100];
|
||||||
|
struct shmid_ds shmds;
|
||||||
|
|
||||||
|
#ifndef IPC_RMID_DEFERRED_RELEASE
|
||||||
|
atexit( remove_shmid );
|
||||||
|
#endif
|
||||||
requested_shm_size = (requested_shm_size + 4095) & ~4095;
|
requested_shm_size = (requested_shm_size + 4095) & ~4095;
|
||||||
if ( requested_shm_size > 2 * 4096 )
|
if ( requested_shm_size > 2 * 4096 )
|
||||||
log_fatal("too much shared memory requested; only 8k are allowed\n");
|
log_fatal("too much shared memory requested; only 8k are allowed\n");
|
||||||
@ -133,14 +149,24 @@ init_shm_coprocessing ( ulong requested_shm_size, int lock_mem )
|
|||||||
shm_is_locked = 1;
|
shm_is_locked = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#ifdef IPC_RMID_DEFERRED_RELEASE
|
#ifdef IPC_RMID_DEFERRED_RELEASE
|
||||||
if ( shmctl ( shm_id, IPC_RMID, 0) )
|
if( shmctl( shm_id, IPC_RMID, 0) )
|
||||||
log_fatal("shmctl IPC_RMDID of %d failed: %s\n",
|
log_fatal("shmctl IPC_RMDID of %d failed: %s\n",
|
||||||
shm_id, strerror(errno));
|
shm_id, strerror(errno));
|
||||||
#else
|
|
||||||
#error Must add a cleanup function
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
if( shmctl( shm_id, IPC_STAT, &shmds ) )
|
||||||
|
log_fatal("shmctl IPC_STAT of %d failed: %s\n",
|
||||||
|
shm_id, strerror(errno));
|
||||||
|
if( shmds.shm_perm.uid != getuid() ) {
|
||||||
|
shmds.shm_perm.uid = getuid();
|
||||||
|
if( shmctl( shm_id, IPC_SET, &shmds ) )
|
||||||
|
log_fatal("shmctl IPC_SET of %d failed: %s\n",
|
||||||
|
shm_id, strerror(errno));
|
||||||
|
}
|
||||||
|
|
||||||
/* write info; Protocol version, id, size, locked size */
|
/* write info; Protocol version, id, size, locked size */
|
||||||
sprintf( buf, "pv=1 pid=%d shmid=%d sz=%u lz=%u", (int)getpid(),
|
sprintf( buf, "pv=1 pid=%d shmid=%d sz=%u lz=%u", (int)getpid(),
|
||||||
shm_id, (unsigned)shm_size, shm_is_locked? (unsigned)shm_size:0 );
|
shm_id, (unsigned)shm_size, shm_is_locked? (unsigned)shm_size:0 );
|
||||||
|
@ -1704,9 +1704,28 @@ enum_trust_web( void **context, ulong *lid )
|
|||||||
if( !c ) { /* make a new context */
|
if( !c ) { /* make a new context */
|
||||||
c = m_alloc_clear( sizeof *c );
|
c = m_alloc_clear( sizeof *c );
|
||||||
*context = c;
|
*context = c;
|
||||||
if( *lid != last_trust_web_key && last_trust_web_key )
|
if( *lid == last_trust_web_key && last_trust_web_tslist )
|
||||||
log_bug("enum_trust_web: nyi\n"); /* <--- FIXME */
|
|
||||||
c->tsl = last_trust_web_tslist;
|
c->tsl = last_trust_web_tslist;
|
||||||
|
else {
|
||||||
|
TRUST_SEG_LIST tsl, tsl2, tslist;
|
||||||
|
int rc;
|
||||||
|
|
||||||
|
rc = make_tsl( *lid, &tslist );
|
||||||
|
if( rc ) {
|
||||||
|
log_error("failed to build the TSL\n");
|
||||||
|
return rc;
|
||||||
|
}
|
||||||
|
/* cache the tslist, so that we do not need to free it */
|
||||||
|
if( last_trust_web_key ) {
|
||||||
|
for( tsl = last_trust_web_tslist; tsl; tsl = tsl2 ) {
|
||||||
|
tsl2 = tsl->next;
|
||||||
|
m_free(tsl);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
last_trust_web_key = *lid;
|
||||||
|
last_trust_web_tslist = tslist;
|
||||||
|
c->tsl = last_trust_web_tslist;
|
||||||
|
}
|
||||||
c->index = 1;
|
c->index = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1880,6 +1899,38 @@ query_trust_record( PKT_public_key *pk )
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int
|
||||||
|
clear_trust_checked_flag( PKT_public_key *pk )
|
||||||
|
{
|
||||||
|
TRUSTREC rec;
|
||||||
|
int rc;
|
||||||
|
|
||||||
|
if( !pk->local_id ) {
|
||||||
|
query_trust_record( pk );
|
||||||
|
if( !pk->local_id )
|
||||||
|
log_bug("clear_trust_checked_flag: Still no LID\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
if( (rc=tdbio_read_record( pk->local_id, &rec, RECTYPE_DIR ))) {
|
||||||
|
log_error("clear_trust_checked_flag: read record failed: %s\n",
|
||||||
|
g10_errstr(rc));
|
||||||
|
return rc;
|
||||||
|
}
|
||||||
|
|
||||||
|
if( !(rec.r.dir.dirflags & DIRF_CHECKED) )
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
/* reset the flag */
|
||||||
|
rec.r.dir.dirflags &= ~DIRF_CHECKED;
|
||||||
|
rc = tdbio_write_record( &rec );
|
||||||
|
if( rc ) {
|
||||||
|
log_error("clear_trust_checked_flag: write dir record failed: %s\n",
|
||||||
|
g10_errstr(rc));
|
||||||
|
return rc;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/****************
|
/****************
|
||||||
* helper function for insert_trust_record()
|
* helper function for insert_trust_record()
|
||||||
@ -2138,11 +2189,11 @@ insert_trust_record( PKT_public_key *orig_pk )
|
|||||||
|
|
||||||
|
|
||||||
leave:
|
leave:
|
||||||
for(rec=uidlist_head; rec; rec = rec->next ) {
|
for(rec=uidlist_head; rec; rec = rec2 ) {
|
||||||
rec2 = rec->next;
|
rec2 = rec->next;
|
||||||
rel_mem_uidnode(NULL, 0, rec );
|
rel_mem_uidnode(NULL, 0, rec );
|
||||||
}
|
}
|
||||||
for(rec=keylist_head; rec; rec = rec->next ) {
|
for(rec=keylist_head; rec; rec = rec2 ) {
|
||||||
rec2 = rec->next;
|
rec2 = rec->next;
|
||||||
m_free(rec);
|
m_free(rec);
|
||||||
}
|
}
|
||||||
|
@ -56,6 +56,7 @@ byte *get_pref_data( ulong lid, const byte *namehash, size_t *ret_n );
|
|||||||
int is_algo_in_prefs( ulong lid, int preftype, int algo );
|
int is_algo_in_prefs( ulong lid, int preftype, int algo );
|
||||||
int keyid_from_lid( ulong lid, u32 *keyid );
|
int keyid_from_lid( ulong lid, u32 *keyid );
|
||||||
int query_trust_record( PKT_public_key *pk );
|
int query_trust_record( PKT_public_key *pk );
|
||||||
|
int clear_trust_checked_flag( PKT_public_key *pk );
|
||||||
int insert_trust_record( PKT_public_key *pk );
|
int insert_trust_record( PKT_public_key *pk );
|
||||||
int update_ownertrust( ulong lid, unsigned new_trust );
|
int update_ownertrust( ulong lid, unsigned new_trust );
|
||||||
|
|
||||||
|
@ -1,3 +1,8 @@
|
|||||||
|
Mon Sep 14 09:17:22 1998 Werner Koch (wk@(none))
|
||||||
|
|
||||||
|
* util.h (HAVE_ATEXIT): New.
|
||||||
|
(HAVE_RAISE): New.
|
||||||
|
|
||||||
Mon Jul 6 10:41:55 1998 Werner Koch (wk@isil.d.shuttle.de)
|
Mon Jul 6 10:41:55 1998 Werner Koch (wk@isil.d.shuttle.de)
|
||||||
|
|
||||||
* cipher.h (PUBKEY_USAGE_): New.
|
* cipher.h (PUBKEY_USAGE_): New.
|
||||||
|
@ -134,7 +134,7 @@ unsigned cipher_get_keylen( int algo );
|
|||||||
unsigned cipher_get_blocksize( int algo );
|
unsigned cipher_get_blocksize( int algo );
|
||||||
CIPHER_HANDLE cipher_open( int algo, int mode, int secure );
|
CIPHER_HANDLE cipher_open( int algo, int mode, int secure );
|
||||||
void cipher_close( CIPHER_HANDLE c );
|
void cipher_close( CIPHER_HANDLE c );
|
||||||
void cipher_setkey( CIPHER_HANDLE c, byte *key, unsigned keylen );
|
int cipher_setkey( CIPHER_HANDLE c, byte *key, unsigned keylen );
|
||||||
void cipher_setiv( CIPHER_HANDLE c, const byte *iv );
|
void cipher_setiv( CIPHER_HANDLE c, const byte *iv );
|
||||||
void cipher_encrypt( CIPHER_HANDLE c, byte *out, byte *in, unsigned nbytes );
|
void cipher_encrypt( CIPHER_HANDLE c, byte *out, byte *in, unsigned nbytes );
|
||||||
void cipher_decrypt( CIPHER_HANDLE c, byte *out, byte *in, unsigned nbytes );
|
void cipher_decrypt( CIPHER_HANDLE c, byte *out, byte *in, unsigned nbytes );
|
||||||
|
@ -62,6 +62,7 @@
|
|||||||
#define G10ERR_TIME_CONFLICT 40
|
#define G10ERR_TIME_CONFLICT 40
|
||||||
#define G10ERR_WR_PUBKEY_ALGO 41 /* unusabe pubkey algo */
|
#define G10ERR_WR_PUBKEY_ALGO 41 /* unusabe pubkey algo */
|
||||||
#define G10ERR_FILE_EXISTS 42
|
#define G10ERR_FILE_EXISTS 42
|
||||||
|
#define G10ERR_WEAK_KEY 43
|
||||||
|
|
||||||
|
|
||||||
#ifndef HAVE_STRERROR
|
#ifndef HAVE_STRERROR
|
||||||
|
@ -166,6 +166,15 @@ char *strlwr(char *a);
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
/**** other missing stuff ****/
|
||||||
|
#ifndef HAVE_ATEXIT /* For SunOS */
|
||||||
|
#define atexit(a) (on_exit((a),0))
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef HAVE_RAISE
|
||||||
|
#define raise(a) kill(getpid(), (a))
|
||||||
|
#endif
|
||||||
|
|
||||||
/******** some macros ************/
|
/******** some macros ************/
|
||||||
#ifndef STR
|
#ifndef STR
|
||||||
#define STR(v) #v
|
#define STR(v) #v
|
||||||
|
@ -1,3 +1,7 @@
|
|||||||
|
Mon Sep 14 09:38:18 1998 Werner Koch (wk@(none))
|
||||||
|
|
||||||
|
* secmem.c (init_pool): Now mmaps /dev/zero if we do not have MAP_ANON.
|
||||||
|
|
||||||
Wed Sep 9 13:52:28 1998 Werner Koch (wk@(none))
|
Wed Sep 9 13:52:28 1998 Werner Koch (wk@(none))
|
||||||
|
|
||||||
* ttyio.c (do_get): Ctrl-D is now a valid but special character
|
* ttyio.c (do_get): Ctrl-D is now a valid but special character
|
||||||
|
@ -92,6 +92,7 @@ g10_errstr( int err )
|
|||||||
X(TIME_CONFLICT ,"Timestamp conflict")
|
X(TIME_CONFLICT ,"Timestamp conflict")
|
||||||
X(WR_PUBKEY_ALGO ,"Unusable pubkey algorithm")
|
X(WR_PUBKEY_ALGO ,"Unusable pubkey algorithm")
|
||||||
X(FILE_EXISTS ,"File exists")
|
X(FILE_EXISTS ,"File exists")
|
||||||
|
X(WEAK_KEY ,"Weak key")
|
||||||
default: p = buf; sprintf(buf, "g10err=%d", err); break;
|
default: p = buf; sprintf(buf, "g10err=%d", err); break;
|
||||||
}
|
}
|
||||||
#undef X
|
#undef X
|
||||||
|
@ -28,6 +28,7 @@
|
|||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <sys/mman.h>
|
#include <sys/mman.h>
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
|
#include <fcntl.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "types.h"
|
#include "types.h"
|
||||||
@ -103,15 +104,38 @@ lock_pool( void *p, size_t n )
|
|||||||
static void
|
static void
|
||||||
init_pool( size_t n)
|
init_pool( size_t n)
|
||||||
{
|
{
|
||||||
|
size_t pgsize;
|
||||||
|
|
||||||
poolsize = n;
|
poolsize = n;
|
||||||
|
|
||||||
if( disable_secmem )
|
if( disable_secmem )
|
||||||
log_bug("secure memory is disabled");
|
log_bug("secure memory is disabled");
|
||||||
|
|
||||||
#if HAVE_MMAP && defined(MAP_ANON)
|
#ifdef HAVE_GETPAGESIZE
|
||||||
poolsize = (poolsize + 4095) & ~4095;
|
pgsize = getpagesize();
|
||||||
|
#else
|
||||||
|
pgsize = 4096;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if HAVE_MMAP
|
||||||
|
poolsize = (poolsize + pgsize -1 ) & ~(pgsize-1);
|
||||||
|
#ifdef MAP_ANONYMOUS
|
||||||
pool = mmap( 0, poolsize, PROT_READ|PROT_WRITE,
|
pool = mmap( 0, poolsize, PROT_READ|PROT_WRITE,
|
||||||
MAP_PRIVATE|MAP_ANON, -1, 0);
|
MAP_PRIVATE|MAP_ANONYMOUS, -1, 0);
|
||||||
|
#else /* map /dev/zero instead */
|
||||||
|
{ int fd;
|
||||||
|
|
||||||
|
fd = open("/dev/zero", O_RDWR);
|
||||||
|
if( fd == -1 ) {
|
||||||
|
log_error("can't open /dev/zero: %s\n", strerror(errno) );
|
||||||
|
pool = (void*)-1;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
pool = mmap( 0, poolsize, PROT_READ|PROT_WRITE,
|
||||||
|
MAP_PRIVATE, fd, 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
if( pool == (void*)-1 )
|
if( pool == (void*)-1 )
|
||||||
log_error("can't mmap pool of %u bytes: %s - using malloc\n",
|
log_error("can't mmap pool of %u bytes: %s - using malloc\n",
|
||||||
(unsigned)poolsize, strerror(errno));
|
(unsigned)poolsize, strerror(errno));
|
||||||
|
@ -66,13 +66,13 @@ host_alias = i586-pc-linux-gnu
|
|||||||
host_triplet = i586-pc-linux-gnu
|
host_triplet = i586-pc-linux-gnu
|
||||||
target_alias = i586-pc-linux-gnu
|
target_alias = i586-pc-linux-gnu
|
||||||
target_triplet = i586-pc-linux-gnu
|
target_triplet = i586-pc-linux-gnu
|
||||||
CATALOGS = en.gmo de.gmo it.gmo fr.gmo
|
CATALOGS = en.mo de.mo it.mo fr.mo
|
||||||
CATOBJEXT = .gmo
|
CATOBJEXT = .mo
|
||||||
CC = gcc
|
CC = gcc
|
||||||
CPP = gcc -E
|
CPP = gcc -E
|
||||||
DATADIRNAME = share
|
DATADIRNAME = lib
|
||||||
DYNLINK_LDFLAGS = -rdynamic
|
DYNLINK_LDFLAGS = -rdynamic
|
||||||
G10_LOCALEDIR = /usr/local/share/locale
|
G10_LOCALEDIR = /usr/local/lib/locale
|
||||||
GENCAT =
|
GENCAT =
|
||||||
GMOFILES = en.gmo de.gmo it.gmo fr.gmo
|
GMOFILES = en.gmo de.gmo it.gmo fr.gmo
|
||||||
GMSGFMT = /usr/local/bin/msgfmt
|
GMSGFMT = /usr/local/bin/msgfmt
|
||||||
@ -80,9 +80,9 @@ GT_NO =
|
|||||||
GT_YES = #YES#
|
GT_YES = #YES#
|
||||||
INCLUDE_LOCALE_H = #include <locale.h>
|
INCLUDE_LOCALE_H = #include <locale.h>
|
||||||
INSTOBJEXT = .mo
|
INSTOBJEXT = .mo
|
||||||
INTLDEPS = $(top_builddir)/intl/libintl.a
|
INTLDEPS =
|
||||||
INTLLIBS = $(top_builddir)/intl/libintl.a
|
INTLLIBS =
|
||||||
INTLOBJS = $(GETTOBJS)
|
INTLOBJS =
|
||||||
MKINSTALLDIRS = scripts/mkinstalldirs
|
MKINSTALLDIRS = scripts/mkinstalldirs
|
||||||
MPI_EXTRA_ASM_OBJS =
|
MPI_EXTRA_ASM_OBJS =
|
||||||
MSGFMT = /usr/local/bin/msgfmt
|
MSGFMT = /usr/local/bin/msgfmt
|
||||||
@ -90,9 +90,9 @@ PACKAGE = gnupg
|
|||||||
POFILES = en.po de.po it.po fr.po
|
POFILES = en.po de.po it.po fr.po
|
||||||
POSUB = po
|
POSUB = po
|
||||||
RANLIB = ranlib
|
RANLIB = ranlib
|
||||||
USE_INCLUDED_LIBINTL = yes
|
USE_INCLUDED_LIBINTL = no
|
||||||
USE_NLS = yes
|
USE_NLS = yes
|
||||||
VERSION = 0.3.4a
|
VERSION = 0.3.5
|
||||||
ZLIBS =
|
ZLIBS =
|
||||||
l =
|
l =
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user