See ChangeLog: Thu Dec 10 20:15:36 CET 1998 Werner Koch

This commit is contained in:
Werner Koch 1998-12-10 19:20:47 +00:00
parent a45f824150
commit af6e96e4f9
40 changed files with 1848 additions and 1444 deletions

View File

@ -55,6 +55,11 @@ pt_BR.po
Other notes:
============
This program uses the zlib compression library written by
Jean-loup Gailly and Mark Adler.
Most of the stuff in mpi has been taken from the GMP library.
The file cipher/rndunix.c is heavily based on Peter Gutmann's
rndunix.c from cryptlib. - He promised to add the GPL as an alternative
license to this and some other files. We don't have a dissclaimer for

View File

@ -1,3 +1,8 @@
Thu Dec 10 20:15:36 CET 1998 Werner Koch <wk@isil.d.shuttle.de>
* acinclude.m (GNUPG_CHECK_PIC): New
* configure.in, acinclude.m4: Renamed all WK_ to GNUPG_
Tue Dec 8 15:09:29 CET 1998 Werner Koch <wk@isil.d.shuttle.de>
* VERSION: Set to 0.4.5

9
NEWS
View File

@ -1,3 +1,12 @@
* --export does now only exports rfc2440 compatible keys; the
old behavious is available with --export-all.
Generation of v3 ElGamal (sign and encrypt) keys is not longer
supported.
* Fixed the uncompress bug.
Noteworthy changes in version 0.4.5
-----------------------------------

1
THANKS
View File

@ -50,6 +50,7 @@ Michael Sobolev mss@despair.transas.com
Nicolas Graner Nicolas.Graner@cri.u-psud.fr
Niklas Hernaeus [Please don't spam him]
Nimrod Zimerman zimerman@forfree.at
N J Doye nic@niss.ac.uk
Oskari Jääskeläinen f33003a@cc.hut.fi
Paul D. Smith psmith@baynetworks.com
Peter Gutmann pgut001@cs.auckland.ac.nz

19
TODO
View File

@ -11,20 +11,11 @@
a next pointer ro more records - check wehther the reuse code really
works. Maybe this is the reason for the "Hmmm public key lost"
* use zlib 1.1.13 to avoid a bug with 13 bit windows
but there are more problems with large files
* FreeBSD:
#define USE_DYNAMIC_LINKING
#define HAVE_DL_DLOPEN
and the ld option -export-dynamic.
Why does autoconf not figure that out?
* clearsig: keep lineendings as they are. Remember that trailings
blanks are not hashed.
* OpenBSD: dynamic loading with dlopen works on OpenBSD, but:
OpenBSD binaries are a.out, so every symbol begins with "_"
OpenBSD binaries are a.out, so every symbol begins with "_"
* should we flush the getkey.c caches while doing an import?
@ -40,8 +31,6 @@
* new menu to delete signatures and list signature in menu
* -rdynamic auf Solaris Problem
* Replace the SIGUSR1 stuff by semaphores to avoid loss of a signal.
* add test cases for invalid data (scrambled armor or other random data)
@ -66,3 +55,9 @@
* Use "user ID", "trustdb", "NOTE" and "WARNING".
* Replace Blowfish by Twofish
* Print a warning when a experimental algorithm is used.
* Remove ElGamal signatures.

View File

@ -1,41 +1,41 @@
dnl macros to configure g10
dnl WK_MSG_PRINT(STRING)
dnl GNUPG_MSG_PRINT(STRING)
dnl print a message
dnl
define(WK_MSG_PRINT,
define(GNUPG_MSG_PRINT,
[ echo $ac_n "$1"" $ac_c" 1>&AC_FD_MSG
])
dnl WK_CHECK_TYPEDEF(TYPE, HAVE_NAME)
dnl GNUPG_CHECK_TYPEDEF(TYPE, HAVE_NAME)
dnl Check whether a typedef exists and create a #define $2 if it exists
dnl
AC_DEFUN(WK_CHECK_TYPEDEF,
AC_DEFUN(GNUPG_CHECK_TYPEDEF,
[ AC_MSG_CHECKING(for $1 typedef)
AC_CACHE_VAL(wk_cv_typedef_$1,
AC_CACHE_VAL(gnupg_cv_typedef_$1,
[AC_TRY_COMPILE([#include <stdlib.h>
#include <sys/types.h>], [
#undef $1
int a = sizeof($1);
], wk_cv_typedef_$1=yes, wk_cv_typedef_$1=no )])
AC_MSG_RESULT($wk_cv_typedef_$1)
if test "$wk_cv_typedef_$1" = yes; then
], gnupg_cv_typedef_$1=yes, gnupg_cv_typedef_$1=no )])
AC_MSG_RESULT($gnupg_cv_typedef_$1)
if test "$gnupg_cv_typedef_$1" = yes; then
AC_DEFINE($2)
fi
])
dnl WK_LINK_FILES( SRC, DEST )
dnl GNUPG_LINK_FILES( SRC, DEST )
dnl same as AC_LINK_FILES, but collect the files to link in
dnl some special variables and do the link
dnl when WK_DO_LINK_FILES is called
dnl when GNUPG_DO_LINK_FILES is called
dnl This is a workaround for AC_LINK_FILES, because it does not work
dnl correct when using a caching scheme
dnl
define(WK_LINK_FILES,
define(GNUPG_LINK_FILES,
[ if test "x$wk_link_files_src" = "x"; then
wk_link_files_src="$1"
wk_link_files_dst="$2"
@ -44,21 +44,21 @@ define(WK_LINK_FILES,
wk_link_files_dst="$wk_link_files_dst $2"
fi
])
define(WK_DO_LINK_FILES,
define(GNUPG_DO_LINK_FILES,
[ AC_LINK_FILES( $wk_link_files_src, $wk_link_files_dst )
])
dnl WK_CHECK_ENDIAN
dnl GNUPG_CHECK_ENDIAN
dnl define either LITTLE_ENDIAN_HOST or BIG_ENDIAN_HOST
dnl
define(WK_CHECK_ENDIAN,
define(GNUPG_CHECK_ENDIAN,
[ if test "$cross_compiling" = yes; then
AC_MSG_WARN(cross compiling; assuming little endianess)
fi
AC_MSG_CHECKING(endianess)
AC_CACHE_VAL(wk_cv_c_endian,
[ wk_cv_c_endian=unknown
AC_CACHE_VAL(gnupg_cv_c_endian,
[ gnupg_cv_c_endian=unknown
# See if sys/param.h defines the BYTE_ORDER macro.
AC_TRY_COMPILE([#include <sys/types.h>
#include <sys/param.h>], [
@ -69,8 +69,8 @@ define(WK_CHECK_ENDIAN,
#include <sys/param.h>], [
#if BYTE_ORDER != BIG_ENDIAN
not big endian
#endif], wk_cv_c_endian=big, wk_cv_c_endian=little)])
if test "$wk_cv_c_endian" = unknown; then
#endif], gnupg_cv_c_endian=big, gnupg_cv_c_endian=little)])
if test "$gnupg_cv_c_endian" = unknown; then
AC_TRY_RUN([main () {
/* Are we little or big endian? From Harbison&Steele. */
union
@ -81,27 +81,27 @@ define(WK_CHECK_ENDIAN,
u.l = 1;
exit (u.c[sizeof (long) - 1] == 1);
}],
wk_cv_c_endian=little,
wk_cv_c_endian=big,
wk_cv_c_endian=little
gnupg_cv_c_endian=little,
gnupg_cv_c_endian=big,
gnupg_cv_c_endian=little
)
fi
])
AC_MSG_RESULT([$wk_cv_c_endian])
if test "$wk_cv_c_endian" = little; then
AC_MSG_RESULT([$gnupg_cv_c_endian])
if test "$gnupg_cv_c_endian" = little; then
AC_DEFINE(LITTLE_ENDIAN_HOST)
else
AC_DEFINE(BIG_ENDIAN_HOST)
fi
])
dnl WK_CHECK_CACHE
dnl GNUPG_CHECK_CACHE
dnl
define(WK_CHECK_CACHE,
define(GNUPG_CHECK_CACHE,
[ AC_MSG_CHECKING(cached information)
wk_hostcheck="$target"
AC_CACHE_VAL(wk_cv_hostcheck, [ wk_cv_hostcheck="$wk_hostcheck" ])
if test "$wk_cv_hostcheck" != "$wk_hostcheck"; then
gnupg_hostcheck="$target"
AC_CACHE_VAL(gnupg_cv_hostcheck, [ gnupg_cv_hostcheck="$gnupg_hostcheck" ])
if test "$gnupg_cv_hostcheck" != "$gnupg_hostcheck"; then
AC_MSG_RESULT(changed)
AC_MSG_WARN(config.cache exists!)
AC_MSG_ERROR(you must do 'make distclean' first to compile for
@ -112,65 +112,138 @@ define(WK_CHECK_CACHE,
])
######################################################################
# Check for SysV IPC (from GIMP)
# And see whether we have a SHM_LOCK (FreeBSD does not have it).
# Check for -fPIC etc (taken from libtool)
# This sets CFLAGS_PIC to the required flags
# NO_PIC to yes if it is not possible to
# generate PIC
######################################################################
dnl WK_CHECK_IPC
dnl GNUPG_CHECK_PIC
dnl
define(WK_CHECK_IPC,
[ AC_CHECK_HEADERS(sys/ipc.h sys/shm.h)
if test "$ac_cv_header_sys_shm_h" = "yes"; then
AC_MSG_CHECKING(whether shmctl IPC_RMID allowes subsequent attaches)
AC_TRY_RUN([
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/shm.h>
int main()
{
int id;
char *shmaddr;
id = shmget (IPC_PRIVATE, 4, IPC_CREAT | 0777);
if (id == -1)
exit (2);
shmaddr = shmat (id, 0, 0);
shmctl (id, IPC_RMID, 0);
if ((char*) shmat (id, 0, 0) == (char*) -1)
{
shmdt (shmaddr);
exit (1);
}
shmdt (shmaddr);
shmdt (shmaddr);
exit (0);
}
],
AC_DEFINE(IPC_RMID_DEFERRED_RELEASE)
AC_MSG_RESULT(yes),
AC_MSG_RESULT(no),
AC_MSG_RESULT(assuming no))
AC_MSG_CHECKING(whether SHM_LOCK is available)
AC_TRY_COMPILE([#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/shm.h>],[
int foo( int shm_id ) { shmctl(shm_id, SHM_LOCK, 0); }
],
AC_DEFINE(IPC_HAVE_SHM_LOCK)
AC_MSG_RESULT(yes),
AC_MSG_RESULT(no))
define(GNUPG_CHECK_PIC,
[ AC_MSG_CHECKING(for option to create PIC)
CFLAGS_PIC=
NO_PIC=no
if test "$cross_compiling" = yes; then
AC_MSG_RESULT(assume none)
else
if test "$GCC" = yes; then
CFLAGS_PIC="-fPIC"
else
case "$host_os" in
aix3* | aix4*)
# All rs/6000 code is PIC
# but is there any non-rs/6000 AIX platform?
;;
hpux9* | hpux10*)
CFLAGS_PIC="+Z"
;;
irix5* | irix6*)
# PIC (with -KPIC) is the default.
;;
osf3* | osf4*)
# FIXME - pic_flag is probably required for
# hppa*-osf* and i860-osf*
;;
sco3.2v5*)
CFLAGS_PIC='-Kpic'
;;
solaris2* | solaris7* )
CFLAGS_PIC='-KPIC'
;;
sunos4*)
CFLAGS_PIC='-PIC'
;;
*)
NO_PIC=yes
;;
esac
fi
case "$host_cpu" in
rs6000 | powerpc | powerpcle)
# Yippee! All RS/6000 and PowerPC code is position-independent.
CFLAGS_PIC=""
;;
esac
if test "$NO_PIC" = yes; then
AC_MSG_RESULT(not possible)
else
if test -z "$CFLAGS_PIC"; then
AC_MSG_RESULT(none)
else
AC_MSG_RESULT($CFLAGS_PIC)
fi
fi
fi
])
#####################################################################
# Check for SysV IPC (from GIMP)
# And see whether we have a SHM_LOCK (FreeBSD does not have it).
#####################################################################
dnl GNUPG_CHECK_IPC
dnl
define(GNUPG_CHECK_IPC,
[ AC_CHECK_HEADERS(sys/ipc.h sys/shm.h)
if test "$ac_cv_header_sys_shm_h" = "yes"; then
AC_MSG_CHECKING(whether shmctl IPC_RMID allowes subsequent attaches)
AC_TRY_RUN([
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/shm.h>
int main()
{
int id;
char *shmaddr;
id = shmget (IPC_PRIVATE, 4, IPC_CREAT | 0777);
if (id == -1)
exit (2);
shmaddr = shmat (id, 0, 0);
shmctl (id, IPC_RMID, 0);
if ((char*) shmat (id, 0, 0) == (char*) -1)
{
shmdt (shmaddr);
exit (1);
}
shmdt (shmaddr);
shmdt (shmaddr);
exit (0);
}
],
AC_DEFINE(IPC_RMID_DEFERRED_RELEASE)
AC_MSG_RESULT(yes),
AC_MSG_RESULT(no),
AC_MSG_RESULT(assuming no))
AC_MSG_CHECKING(whether SHM_LOCK is available)
AC_TRY_COMPILE([#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/shm.h>],[
int foo( int shm_id ) { shmctl(shm_id, SHM_LOCK, 0); }
],
AC_DEFINE(IPC_HAVE_SHM_LOCK)
AC_MSG_RESULT(yes),
AC_MSG_RESULT(no))
fi
])
######################################################################
# Check whether mlock is broken (hpux 10.20 raises a SIGBUS if mlock
# is not called from uid 0 (not tested whether uid 0 works)
######################################################################
dnl WK_CHECK_MLOCK
dnl GNUPG_CHECK_MLOCK
dnl
define(WK_CHECK_MLOCK,
define(GNUPG_CHECK_MLOCK,
[ AC_CHECK_FUNCS(mlock)
if test "$ac_cv_func_mlock" = "yes"; then
AC_MSG_CHECKING(whether mlock is broken)
@ -533,3 +606,4 @@ strdup __argz_count __argz_stringify __argz_next])
< $srcdir/po/POTFILES.in > po/POTFILES
])
dnl *-*wedit:notab*-* Please keep this as the last line.

View File

@ -13,18 +13,16 @@ fi
LANG=
LANGUAGE=
expect - <<EOF
#set timeout -1
set timeout 8
match_max 100000
spawn ../g10/gpg --no-batch --quick-random --homedir . --gen-key
expect {
expect {
-exact "Please select what kind of key you want:\r
(1) DSA and ElGamal (default)\r
(2) ElGamal (sign and encrypt)\r
(4) DSA (sign only)\r
(5) ElGamal in a v3 packet\r
(2) DSA (sign only)\r
(4) ElGamal (sign and encrypt)\r
Your selection? " { send -- "1\r" }
timeout { exit 1 } }
expect {
@ -51,7 +49,7 @@ expect {
-exact "1\r
\r \rKey expires at " { }
timeout { exit 1 } }
expect {
expect {
-re "(.*)\r
" {}
timeout { exit 1 } }
@ -91,7 +89,7 @@ Enter passphrase: " { sleep 1; send -- "abc\r" }
expect {
-ex "\r \rRepeat passphrase: " { sleep 1; send -- "abc\r" }
timeout { exit 1 } }
expect {
expect {
-ex "\r \rWe need to generate a lot of random bytes. It is a good idea to perform\r
some other action (work in another window, move the mouse, utilize the\r
network and the disks) during the prime generation; this gives the random\r
@ -105,3 +103,4 @@ expect {
exit 1
EOF
#*-*wedit:notab*-*

View File

@ -1,3 +1,15 @@
Thu Dec 10 20:15:36 CET 1998 Werner Koch <wk@isil.d.shuttle.de>
* dynload.c (load_extension): increased needed verbosity level.
* random.c (fast_random_poll): Fallback to a default fast random
poll function.
(read_random_source): Always use the faked entroy gatherer if no
gather module is available.
* rndlinux.c (fast_poll): Removed.
* rndunix.c (fast_poll): Removed.
Wed Nov 25 12:33:41 1998 Werner Koch (wk@isil.d.shuttle.de)
* rand-*.c: Removed.

View File

@ -231,7 +231,7 @@ load_extension( EXTLIST el )
name = (char**)addr;
#endif
if( g10_opt_verbose )
if( g10_opt_verbose > 1 )
log_info("%s: %s%s%s%s\n", el->name, *name,
el->hintstr? " (":"",
el->hintstr? el->hintstr:"",
@ -262,7 +262,7 @@ load_extension( EXTLIST el )
#endif
#ifdef HAVE_DL_DLOPEN
if( g10_opt_verbose > 1 ) {
if( g10_opt_verbose > 2 ) {
/* list the contents of the module */
while( (sym = (*el->enumfunc)(0, &seq, &class, &vers)) ) {
if( vers != 1 ) {

View File

@ -32,6 +32,18 @@
#include <assert.h>
#include <errno.h>
#include <string.h>
#include <sys/time.h>
#include <sys/types.h>
#include <sys/stat.h>
#ifdef HAVE_GETHRTIME
#include <sys/times.h>
#endif
#ifdef HAVE_GETTIMEOFDAY
#include <sys/times.h>
#endif
#ifdef HAVE_GETRUSAGE
#include <sys/resource.h>
#endif
#include "util.h"
#include "rmd.h"
#include "ttyio.h"
@ -83,9 +95,7 @@ static void read_pool( byte *buffer, size_t length, int level );
static void add_randomness( const void *buffer, size_t length, int source );
static void random_poll(void);
static void read_random_source( byte *buffer, size_t length, int level );
#ifndef HAVE_DEV_RANDOM
static int gather_faked( byte *buffer, size_t *r_length, int level );
#endif
static void
@ -329,11 +339,39 @@ fast_random_poll()
initialize();
initialized = 1;
fnc = dynload_getfnc_fast_random_poll();
if( !fnc )
log_info("Ooops: No fast random poll function\n");
}
if( fnc )
if( fnc ) {
(*fnc)( add_randomness );
return;
}
/* fall back to the generic function */
#if HAVE_GETHRTIME
{ hrtime_t tv;
tv = gethrtime();
add_randomness( &tv, sizeof(tv), 1 );
}
#elif HAVE_GETTIMEOFDAY
{ struct timeval tv;
if( gettimeofday( &tv, NULL ) )
BUG();
add_randomness( &tv.tv_sec, sizeof(tv.tv_sec), 1 );
add_randomness( &tv.tv_usec, sizeof(tv.tv_usec), 1 );
}
#else /* use times */
{ struct tms buf;
times( &buf );
add_randomness( &buf, sizeof buf, 1 );
}
#endif
#ifdef HAVE_GETRUSAGE
{ struct rusage buf;
if( getrusage( RUSAGE_SELF, &buf ) )
BUG();
add_randomness( &buf, sizeof buf, 1 );
memset( &buf, 0, sizeof buf );
}
#endif
}
@ -351,11 +389,7 @@ read_random_source( byte *buffer, size_t length, int level )
fnc = dynload_getfnc_gather_random();
if( !fnc ) {
faked_rng = 1;
#ifndef HAVE_DEV_RANDOM
fnc = gather_faked;
#else
BUG();
#endif
}
}
while( length ) {
@ -368,7 +402,6 @@ read_random_source( byte *buffer, size_t length, int level )
}
#ifndef HAVE_DEV_RANDOM
static int
gather_faked( byte *buffer, size_t *r_length, int level )
{
@ -378,7 +411,7 @@ gather_faked( byte *buffer, size_t *r_length, int level )
if( !initialized ) {
log_info(_("WARNING: using insecure random number generator!!\n"));
tty_printf(_("The random number generator is only a kludge to let\n"
"it compile - it is in no way a strong RNG!\n\n"
"it run - it is in no way a strong RNG!\n\n"
"DON'T USE ANY DATA GENERATED BY THIS PROGRAM!!\n\n"));
initialized=1;
#ifdef HAVE_RAND
@ -398,5 +431,3 @@ gather_faked( byte *buffer, size_t *r_length, int level )
return 100; /* We really fake it ;-) */
}
#endif /* ! HAVE_DEV_RANDOM */

View File

@ -27,15 +27,9 @@
#include <sys/time.h>
#include <sys/types.h>
#include <sys/stat.h>
#ifdef HAVE_GETHRTIME
#include <sys/times.h>
#endif
#ifdef HAVE_GETTIMEOFDAY
#include <sys/times.h>
#endif
#ifdef HAVE_GETRUSAGE
#include <sys/resource.h>
#endif
#include <string.h>
#include <unistd.h>
#include <fcntl.h>
@ -61,38 +55,6 @@ static void tty_printf(const char *fmt, ... )
#endif
static void
fast_poll( void (*add)(const void*, size_t, int) )
{
#if HAVE_GETHRTIME
{ hrtime_t tv;
tv = gethrtime();
(*add)( &tv, sizeof(tv), 1 );
}
#elif HAVE_GETTIMEOFDAY
{ struct timeval tv;
if( gettimeofday( &tv, NULL ) )
BUG();
(*add)( &tv.tv_sec, sizeof(tv.tv_sec), 1 );
(*add)( &tv.tv_usec, sizeof(tv.tv_usec), 1 );
}
#else /* use times */
{ struct tms buf;
times( &buf );
(*add)( &buf, sizeof buf, 1 );
}
#endif
#ifdef HAVE_GETRUSAGE
{ struct rusage buf;
if( getrusage( RUSAGE_SELF, &buf ) )
BUG();
(*add)( &buf, sizeof buf, 1 );
memset( &buf, 0, sizeof buf );
}
#endif
}
/****************
* Used to open the Linux and xBSD /dev/random devices
@ -192,7 +154,6 @@ static struct {
void *func;
} func_table[] = {
{ 40, 1, gather_random },
{ 41, 1, fast_poll },
};

View File

@ -617,38 +617,6 @@ slowPoll(void)
}
static void
fast_poll( void (*add)(const void*, size_t, int) )
{
#if HAVE_GETHRTIME
{ hrtime_t tv;
tv = gethrtime();
(*add)( &tv, sizeof(tv), 1 );
}
#elif HAVE_GETTIMEOFDAY
{ struct timeval tv;
if( gettimeofday( &tv, NULL ) )
BUG();
(*add)( &tv.tv_sec, sizeof(tv.tv_sec), 1 );
(*add)( &tv.tv_usec, sizeof(tv.tv_usec), 1 );
}
#else /* use times */
{ struct tms buf;
times( &buf );
(*add)( &buf, sizeof buf, 1 );
}
#endif
#ifdef HAVE_GETRUSAGE
{ struct rusage buf;
if( getrusage( RUSAGE_SELF, &buf ) )
BUG();
(*add)( &buf, sizeof buf, 1 );
memset( &buf, 0, sizeof buf );
}
#endif
}
static int
gather_random( byte *buffer, size_t *r_length, int level )
@ -698,7 +666,6 @@ static struct {
void *func;
} func_table[] = {
{ 40, 1, gather_random },
{ 41, 1, fast_poll },
};
/****************

View File

@ -55,9 +55,13 @@ else
fi
if test "$use_m_guard" = yes ; then
AC_DEFINE(M_GUARD)
CFLAGS="$CFLAGS -g -Wall"
CFLAGS="$CFLAGS -g"
else
CFLAGS="$CFLAGS -O2 -Wall"
CFLAGS="$CFLAGS -O2"
fi
if test "$GCC" = yes; then
CFLAGS="$CFLAGS -Wall"
fi
@ -87,7 +91,6 @@ AC_PROG_INSTALL
AM_CYGWIN32
case "${target}" in
i386--mingw32)
# special stuff for Windoze NT
@ -108,6 +111,13 @@ case "${target}" in
;;
esac
GNUPG_CHECK_PIC
if test "$NO_PIC" = yes; then
try_dynload=no
fi
case "${target}" in
i386--mingw32)
PRINTABLE_OS_NAME="MingW32"
@ -131,7 +141,7 @@ case "${target}" in
*)
NAME_OF_DEV_RANDOM="/dev/random"
NAME_OF_DEV_URANDOM="/dev/urandom"
DYNLINK_MOD_CFLAGS="-shared -fPIC -lc"
DYNLINK_MOD_CFLAGS="-shared $CFLAGS_PIC -lc"
;;
esac
AC_DEFINE_UNQUOTED(NAME_OF_DEV_RANDOM, "$NAME_OF_DEV_RANDOM")
@ -144,19 +154,20 @@ AM_GNU_GETTEXT
AC_CHECK_LIB(gdbm,gdbm_firstkey)
if test "$try_dynload" = yes ; then
AC_CHECK_LIB(dl,dlopen)
if test "$ac_cv_lib_dl_dlopen" = "yes"; then
AC_DEFINE(USE_DYNAMIC_LINKING)
AC_DEFINE(HAVE_DL_DLOPEN)
DYNLINK_LDFLAGS=-rdynamic
DYNLINK_LDFLAGS="-Wl,-export-dynamic"
use_gnupg_extensions=yes
else
AC_CHECK_LIB(dld,dld_link)
if test "$ac_cv_lib_dld_dld_link" = "yes"; then
AC_DEFINE(USE_DYNAMIC_LINKING)
AC_DEFINE(HAVE_DLD_DLD_LINK)
DYNLINK_LDFLAGS=-rdynamic
DYNLINK_LDFLAGS="-Wl,-export-dynamic"
use_gnupg_extensions=yes
fi
fi
@ -185,14 +196,14 @@ AC_TYPE_SIZE_T
AC_TYPE_SIGNAL
AC_DECL_SYS_SIGLIST
WK_CHECK_ENDIAN
GNUPG_CHECK_ENDIAN
WK_CHECK_TYPEDEF(byte, HAVE_BYTE_TYPEDEF)
WK_CHECK_TYPEDEF(ushort, HAVE_USHORT_TYPEDEF)
WK_CHECK_TYPEDEF(ulong, HAVE_ULONG_TYPEDEF)
WK_CHECK_TYPEDEF(u16, HAVE_U16_TYPEDEF)
WK_CHECK_TYPEDEF(u32, HAVE_U32_TYPEDEF)
GNUPG_CHECK_TYPEDEF(byte, HAVE_BYTE_TYPEDEF)
GNUPG_CHECK_TYPEDEF(ushort, HAVE_USHORT_TYPEDEF)
GNUPG_CHECK_TYPEDEF(ulong, HAVE_ULONG_TYPEDEF)
GNUPG_CHECK_TYPEDEF(u16, HAVE_U16_TYPEDEF)
GNUPG_CHECK_TYPEDEF(u32, HAVE_U32_TYPEDEF)
AC_CHECK_SIZEOF(unsigned short, 2)
AC_CHECK_SIZEOF(unsigned int, 4)
@ -212,9 +223,9 @@ AC_CHECK_FUNCS(strerror stpcpy strlwr tcgetattr rand strtoul mmap)
AC_CHECK_FUNCS(memmove gettimeofday getrusage gethrtime setrlimit)
AC_CHECK_FUNCS(memicmp atexit raise getpagesize strftime)
WK_CHECK_MLOCK
GNUPG_CHECK_MLOCK
WK_CHECK_IPC
GNUPG_CHECK_IPC
if test "$ac_cv_header_sys_shm_h" = "yes"; then
AC_DEFINE(USE_SHM_COPROCESSING)
fi
@ -239,7 +250,7 @@ dnl setup assembler stuff
AC_MSG_CHECKING(for mpi assembler functions)
if test -f $srcdir/mpi/config.links ; then
. $srcdir/mpi/config.links
WK_LINK_FILES($mpi_ln_src, $mpi_ln_dst)
GNUPG_LINK_FILES($mpi_ln_src, $mpi_ln_dst)
ac_cv_mpi_extra_asm_modules="$mpi_extra_modules"
ac_cv_mpi_sflags="$mpi_sflags"
ac_cv_mpi_config_done="yes"
@ -250,9 +261,9 @@ else
fi
MPI_EXTRA_ASM_OBJS=""
if test "$ac_cv_mpi_extra_asm_modules" != ""; then
WK_MSG_PRINT([mpi extra asm functions:])
GNUPG_MSG_PRINT([mpi extra asm functions:])
for i in $ac_cv_mpi_extra_asm_modules; do
WK_MSG_PRINT([$i])
GNUPG_MSG_PRINT([$i])
MPI_EXTRA_ASM_OBJS="$MPI_EXTRA_ASM_OBJS $i.o"
done
AC_MSG_RESULT()
@ -266,8 +277,8 @@ dnl when compiling a conftest (due to the "-lz" from LIBS).
if test "$g10_force_zlib" = "yes"; then
ZLIBS="../zlib/libzlib.a"
AM_CONDITIONAL(ENABLE_LOCAL_ZLIB, true)
WK_LINK_FILES(zlib/zlib.h, zlib.h )
WK_LINK_FILES(zlib/zconf.h, zconf.h )
GNUPG_LINK_FILES(zlib/zlib.h, zlib.h )
GNUPG_LINK_FILES(zlib/zconf.h, zconf.h )
else
AC_CHECK_HEADERS(zlib.h)
if test "$ac_cv_header_zlib_h" = yes ; then
@ -277,13 +288,13 @@ if test "$ac_cv_header_zlib_h" = yes ; then
else
ZLIBS="../zlib/libzlib.a"
AM_CONDITIONAL(ENABLE_LOCAL_ZLIB, true)
WK_LINK_FILES(zlib/zlib.h, zlib.h )
WK_LINK_FILES(zlib/zconf.h, zconf.h )
GNUPG_LINK_FILES(zlib/zlib.h, zlib.h )
GNUPG_LINK_FILES(zlib/zconf.h, zconf.h )
fi
fi
AC_SUBST(ZLIBS)
WK_DO_LINK_FILES
GNUPG_DO_LINK_FILES
AC_OUTPUT([

View File

@ -1,3 +1,35 @@
Thu Dec 10 20:15:36 CET 1998 Werner Koch <wk@isil.d.shuttle.de>
* ringedit.c (gdbm_store): Fix for inserts
* g10.c (main): New option --export-all
* export.c (export_pubkeys): New arg.
(do_export): Now may skip old keys.
* status.c: Minor patches for Sun's cc
* keygen.c (ask_algo): Disabled v3 ElGamal choice, rearranged
the numbers. Add a warning question when a sign+encrypt key
is selected.
* g10.c (do_not_use_RSA): Removed.
* misc.c (print_pubkey_algo_note): New as replacement for the
do_not_use_RSA() and chnaged all callers.
(print_cipher_algo_note): New.
(print_hash_algo_note): New.
* cipher.c (write_header): Add a call to print_cipher_algo_note.
* seckey-cert.c (protect_secret_key): Ditto
* sign.c (do_sign): Add a call to print_digest_algo_note.
* getkey.c (get_long_user_id_string): New.
* mainproc.c (check_sig_and_print): Changed the format of the
status output.
* encrypt.c (write_pubkey_enc_from_list): print used symmetric cipher.
* pkclist.c (do_we_trust): Changed a message.
Wed Dec 9 13:41:06 CET 1998 Werner Koch <wk@isil.d.shuttle.de>
* misc.c (trap_unaligned) [ALPHA]: Only if UAC_SIGBUS is defined.

View File

@ -59,6 +59,7 @@ write_header( cipher_filter_context_t *cfx, IOBUF a )
randomize_buffer( temp, blocksize, 1 );
temp[blocksize] = temp[blocksize-2];
temp[blocksize+1] = temp[blocksize-1];
print_cipher_algo_note( cfx->dek->algo );
cfx->cipher_hd = cipher_open( cfx->dek->algo, CIPHER_MODE_AUTO_CFB, 1 );
cipher_setkey( cfx->cipher_hd, cfx->dek->key, cfx->dek->keylen );
cipher_setiv( cfx->cipher_hd, NULL );

View File

@ -379,8 +379,8 @@ write_pubkey_enc_from_list( PK_LIST pk_list, DEK *dek, IOBUF out )
MPI frame;
pk = pk_list->pk;
if( is_RSA(pk->pubkey_algo) )
do_not_use_RSA();
print_pubkey_algo_note( pk->pubkey_algo );
enc = m_alloc_clear( sizeof *enc );
enc->pubkey_algo = pk->pubkey_algo;
keyid_from_pk( pk, enc->keyid );
@ -394,8 +394,9 @@ write_pubkey_enc_from_list( PK_LIST pk_list, DEK *dek, IOBUF out )
else {
if( opt.verbose ) {
char *ustr = get_user_id_string( enc->keyid );
log_info(_("%s encrypted for: %s\n"),
pubkey_algo_to_string(enc->pubkey_algo), ustr );
log_info(_("%s/%s encrypted for: %s\n"),
pubkey_algo_to_string(enc->pubkey_algo),
cipher_algo_to_string(dek->algo), ustr );
m_free(ustr);
}
/* and write it */

View File

@ -34,27 +34,28 @@
#include "main.h"
#include "i18n.h"
static int do_export( STRLIST users, int secret );
static int do_export( STRLIST users, int secret, int onlyrfc );
/****************
* Export the public keys (to standard out or --output).
* Depending on opt.armor the output is armored.
* If onlyrfc is True only RFC24404 compatible keys are exported.
* If USERS is NULL, the complete ring will be exported.
*/
int
export_pubkeys( STRLIST users )
export_pubkeys( STRLIST users, int onlyrfc )
{
return do_export( users, 0 );
return do_export( users, 0, onlyrfc );
}
int
export_seckeys( STRLIST users )
{
return do_export( users, 1 );
return do_export( users, 1, 0 );
}
static int
do_export( STRLIST users, int secret )
do_export( STRLIST users, int secret, int onlyrfc )
{
int rc = 0;
armor_filter_context_t afx;
@ -110,7 +111,7 @@ do_export( STRLIST users, int secret )
rc = secret? find_secret_keyblock_byname( &kbpos, sl->d )
: find_keyblock_byname( &kbpos, sl->d );
if( rc ) {
log_error("%s: user not found: %s\n", sl->d, g10_errstr(rc) );
log_error(_("%s: user not found: %s\n"), sl->d, g10_errstr(rc));
rc = 0;
continue;
}
@ -119,10 +120,21 @@ do_export( STRLIST users, int secret )
}
if( rc ) {
log_error("certificate read problem: %s\n", g10_errstr(rc));
log_error(_("certificate read problem: %s\n"), g10_errstr(rc));
goto leave;
}
/* do not export keys which are incompatible with rfc2440 */
if( onlyrfc && (node = find_kbnode( keyblock, PKT_PUBLIC_KEY )) ) {
PKT_public_key *pk = node->pkt->pkt.public_key;
if( pk->version == 3 && pk->pubkey_algo > 3 ) {
log_info(_("key %08lX: not a rfc2440 key - skipped\n"),
(ulong)keyid_from_pk( pk, NULL) );
continue;
}
}
/* and write it */
for( kbctx=NULL; (node = walk_kbnode( keyblock, &kbctx, 0 )); ) {
/* don't export any comment packets but those in the

View File

@ -84,6 +84,7 @@ enum cmd_and_opt_values { aNull = 0,
aListSigs,
aListSecretKeys,
aExport,
aExportAll,
aExportSecret,
aCheckKeys,
aGenRevoke,
@ -180,7 +181,8 @@ static ARGPARSE_OPTS opts[] = {
{ aEditKey, "edit-key" ,256, N_("sign or edit a key")},
{ aGenRevoke, "gen-revoke",256, N_("generate a revocation certificate")},
#endif
{ aExport, "export" , 256, N_("export keys") },
{ aExport, "export" , 256, N_("export keys") },
{ aExportAll, "export-all" , 256, "@" },
{ aExportSecret, "export-secret-keys" , 256, "@" },
{ aImport, "import", 256 , N_("import/merge keys")},
{ aFastImport, "fast-import", 256 , "@"},
@ -634,6 +636,7 @@ main( int argc, char **argv )
case aImport: set_cmd( &cmd, aImport); break;
case aFastImport: set_cmd( &cmd, aFastImport); break;
case aExport: set_cmd( &cmd, aExport); break;
case aExportAll: set_cmd( &cmd, aExportAll); break;
case aListKeys: set_cmd( &cmd, aListKeys); break;
case aListSigs: set_cmd( &cmd, aListSigs); break;
case aExportSecret: set_cmd( &cmd, aExportSecret); break;
@ -1084,10 +1087,11 @@ main( int argc, char **argv )
break;
case aExport:
case aExportAll:
sl = NULL;
for( ; argc; argc--, argv++ )
add_to_strlist( &sl, *argv );
export_pubkeys( sl );
export_pubkeys( sl, (cmd == aExport) );
free_strlist(sl);
break;
@ -1315,17 +1319,6 @@ g10_exit( int rc )
}
void
do_not_use_RSA()
{
static int did_rsa_note = 0;
if( !did_rsa_note ) {
did_rsa_note = 1;
log_info(_("RSA keys are deprecated; please consider "
"creating a new key and use this key in the future\n"));
}
}
#ifdef IS_G10MAINT

View File

@ -1413,6 +1413,27 @@ get_user_id_string( u32 *keyid )
return p;
}
char*
get_long_user_id_string( u32 *keyid )
{
user_id_db_t r;
char *p;
int pass=0;
/* try it two times; second pass reads from key resources */
do {
for(r=user_id_db; r; r = r->next )
if( r->keyid[0] == keyid[0] && r->keyid[1] == keyid[1] ) {
p = m_alloc( r->len + 20 );
sprintf(p, "%08lX%08lX %.*s",
(ulong)keyid[0], (ulong)keyid[1], r->len, r->name );
return p;
}
} while( ++pass < 2 && !get_pubkey( NULL, keyid ) );
p = m_alloc( 25 );
sprintf(p, "%08lX%08lX [?]", (ulong)keyid[0], (ulong)keyid[1] );
return p;
}
char*
get_user_id( u32 *keyid, size_t *rn )
{

View File

@ -258,18 +258,6 @@ g10_exit( int rc )
exit(rc );
}
void
do_not_use_RSA()
{
static int did_rsa_note = 0;
if( !did_rsa_note ) {
did_rsa_note = 1;
log_info("RSA keys are depreciated; please consider "
"creating a new key and use this key in the future\n");
}
}
static void
become_daemon()

View File

@ -72,11 +72,17 @@ static struct helptexts { const char *key; const char *help; } helptexts[] = {
"does this but other OpenPGP implemenations are not required to understand\n"
"the signature+encryption flavor.\n"
"The first (primary) key must always be a key which is capable of signing;\n"
"this is the reason why the ecrytion only ElGamal key is disabled in this.\n"
"You should not select the \"ElGamal in a v3 packet\", because that key is\n"
"not compatible to other OpenPGP implementations."
"this is the reason why the ecrytion only ElGamal key is disabled in this."
},
{ N_("keygen.algo.elg_se"),
"Although these keys are defined in RFC2440 they are not suggested\n"
"because they are not supported by all programs and signatures created\n"
"with them are quite large and very slow to verify."
},
{ N_("keygen.size"),
"Enter the size of the key"
},

View File

@ -145,6 +145,7 @@ int get_seckey_byname( PKT_secret_key *sk, const char *name, int unlock );
int enum_secret_keys( void **context, PKT_secret_key *sk, int with_subkeys );
void merge_keys_and_selfsig( KBNODE keyblock );
char*get_user_id_string( u32 *keyid );
char*get_long_user_id_string( u32 *keyid );
char*get_user_id( u32 *keyid, size_t *rn );
/*-- keyid.c --*/

View File

@ -388,11 +388,13 @@ ask_algo( int *ret_v4, int addmode )
tty_printf(_("Please select what kind of key you want:\n"));
if( !addmode )
tty_printf(_(" (%d) DSA and ElGamal (default)\n"), 1 );
tty_printf( _(" (%d) ElGamal (sign and encrypt)\n"), 2 );
tty_printf( _(" (%d) DSA (sign only)\n"), 2 );
if( addmode )
tty_printf( _(" (%d) ElGamal (encrypt only)\n"), 3 );
tty_printf( _(" (%d) DSA (sign only)\n"), 4 );
tty_printf( _(" (%d) ElGamal (sign and encrypt)\n"), 4 );
#if 0
tty_printf( _(" (%d) ElGamal in a v3 packet\n"), 5 );
#endif
*ret_v4 = 1;
for(;;) {
@ -404,23 +406,28 @@ ask_algo( int *ret_v4, int addmode )
algo = 0; /* create both keys */
break;
}
else if( algo == 2 ) {
algo = PUBKEY_ALGO_ELGAMAL;
break;
else if( algo == 4 ) {
if( cpr_get_answer_is_yes("keygen.algo.elg_se",_(
"Do you really want to create a sign and encrypt key? "))) {
algo = PUBKEY_ALGO_ELGAMAL;
break;
}
}
else if( algo == 3 && addmode ) {
algo = PUBKEY_ALGO_ELGAMAL_E;
break;
}
else if( algo == 4 ) {
else if( algo == 2 ) {
algo = PUBKEY_ALGO_DSA;
break;
}
#if 0
else if( algo == 5 ) {
algo = PUBKEY_ALGO_ELGAMAL_E;
*ret_v4 = 0;
break;
}
#endif
else
tty_printf(_("Invalid selection.\n"));
}

View File

@ -45,7 +45,9 @@ extern int g10_errors_seen;
#else
void g10_exit(int rc);
#endif
void do_not_use_RSA(void);
void print_pubkey_algo_note( int algo );
void print_cipher_algo_note( int algo );
void print_digest_algo_note( int algo );
/*-- misc.c --*/
void trap_unaligned(void);
@ -108,7 +110,7 @@ KBNODE make_mpi_comment_node( const char *s, MPI a );
/*-- import.c --*/
int import_keys( const char *filename, int fast );
/*-- export.c --*/
int export_pubkeys( STRLIST users );
int export_pubkeys( STRLIST users, int onlyrfc );
int export_seckeys( STRLIST users );
/* dearmor.c --*/

View File

@ -841,7 +841,7 @@ check_sig_and_print( CTX c, KBNODE node )
rc = do_check_sig(c, node, NULL );
if( !rc || rc == G10ERR_BAD_SIGN ) {
char *us = get_user_id_string( sig->keyid );
char *us = get_long_user_id_string( sig->keyid );
write_status_text( rc? STATUS_BADSIG : STATUS_GOODSIG, us );
m_free(us);
log_info(rc? _("BAD signature from \"")

View File

@ -187,3 +187,61 @@ buffer_to_u32( const byte *buffer )
return a;
}
static void
no_exp_algo(void)
{
static int did_note = 0;
if( !did_note ) {
did_note = 1;
log_info(_("Experimental algorithms should not be used!\n"));
}
}
void
print_pubkey_algo_note( int algo )
{
if( algo >= 100 && algo <= 110 )
no_exp_algo();
else if( is_RSA( algo ) ) {
static int did_note = 0;
if( !did_note ) {
did_note = 1;
log_info(_("RSA keys are deprecated; please consider "
"creating a new key and use this key in the future\n"));
}
}
}
void
print_cipher_algo_note( int algo )
{
if( algo >= 100 && algo <= 110 )
no_exp_algo();
else if( algo == CIPHER_ALGO_3DES
|| algo == CIPHER_ALGO_CAST5
|| algo == CIPHER_ALGO_BLOWFISH
)
;
else {
static int did_note = 0;
if( !did_note ) {
did_note = 1;
log_info(_("This cipher algorithm is depreciated; "
"please use a more standard one!\n"));
}
}
}
void
print_digest_algo_note( int algo )
{
if( algo >= 100 && algo <= 110 )
no_exp_algo();
}

View File

@ -302,7 +302,7 @@ do_we_trust( PKT_public_key *pk, int trustlevel )
case TRUST_ULTIMATE:
if( opt.verbose )
log_info(_("This key belongs to us (we have the secret key)\n"));
log_info(_("This key belongs to us\n"));
return 1; /* yes */
default: BUG();

View File

@ -249,7 +249,7 @@ add_keyblock_resource( const char *url, int force, int secret )
goto leave;
case rt_RING:
iobuf = iobuf_fopen( filename, "rb" );
iobuf = iobuf_open( filename );
if( !iobuf && !force ) {
rc = G10ERR_OPEN_FILE;
goto leave;
@ -689,7 +689,7 @@ enum_keyblocks( int mode, KBPOS *kbpos, KBNODE *ret_root )
kbpos->rt = resource_table[i].rt;
switch( kbpos->rt ) {
case rt_RING:
kbpos->fp = iobuf_fopen( rentry->fname, "rb" );
kbpos->fp = iobuf_open( rentry->fname );
if( !kbpos->fp ) {
log_error("can't open '%s'\n", rentry->fname );
return G10ERR_OPEN_FILE;
@ -1083,7 +1083,7 @@ keyring_read( KBPOS *kbpos, KBNODE *ret_root )
if( !(rentry=check_pos(kbpos)) )
return G10ERR_GENERAL;
a = iobuf_fopen( rentry->fname, "rb" );
a = iobuf_open( rentry->fname );
if( !a ) {
log_error("can't open '%s'\n", rentry->fname );
return G10ERR_OPEN_FILE;
@ -1246,7 +1246,7 @@ keyring_copy( KBPOS *kbpos, int mode, KBNODE root )
log_fatal("can't lock '%s'\n", rentry->fname );
/* open the source file */
fp = iobuf_fopen( rentry->fname, "rb" );
fp = iobuf_open( rentry->fname );
if( mode == 1 && !fp && errno == ENOENT ) { /* no file yet */
KBNODE kbctx, node;
@ -1526,6 +1526,9 @@ do_gdbm_store( KBPOS *kbpos, KBNODE root, int update )
content.dsize = iobuf_get_temp_length( fp );
rc = gdbm_store( rentry->dbf, key, content,
update? GDBM_REPLACE : GDBM_INSERT );
if( rc == 1 && !update )
rc = gdbm_store( rentry->dbf, key, content, GDBM_REPLACE );
if( rc ) {
log_error("%s: gdbm_store failed: %s\n", rentry->fname,
rc == 1 ? "already stored"

View File

@ -209,6 +209,7 @@ protect_secret_key( PKT_secret_key *sk, DEK *dek )
else if( cipher_get_blocksize( sk->protect.algo ) != 8 )
rc = G10ERR_CIPHER_ALGO; /* unsupport protection algorithm */
else {
print_cipher_algo_note( sk->protect.algo );
cipher_hd = cipher_open( sk->protect.algo,
CIPHER_MODE_AUTO_CFB, 1 );
if( cipher_setkey( cipher_hd, dek->key, dek->keylen ) )

View File

@ -47,12 +47,12 @@ do_sign( PKT_secret_key *sk, PKT_signature *sig,
byte *dp;
int rc;
if( is_RSA(sk->pubkey_algo) )
do_not_use_RSA();
print_pubkey_algo_note(sk->pubkey_algo);
if( !digest_algo )
digest_algo = md_get_algo(md);
print_digest_algo_note( digest_algo );
dp = md_read( md, digest_algo );
sig->digest_algo = digest_algo;
sig->digest_start[0] = dp[0];

View File

@ -152,7 +152,8 @@ init_shm_coprocessing ( ulong requested_shm_size, int lock_mem )
else
shm_is_locked = 1;
#elif defined(HAVE_MLOCK) && !defined(HAVE_BROKEN_MLOCK)
if ( mlock (shm_area, shm_size) )
/* (need the cast for Solaris with Sun's workshop compilers) */
if ( mlock ( (char*)shm_area, shm_size) )
log_info("locking shared memory %d failed: %s\n",
shm_id, strerror(errno));
else
@ -307,7 +308,8 @@ cpr_kill_prompt(void)
if( opt.shm_coprocess )
return;
#endif
return tty_kill_prompt();
tty_kill_prompt();
return;
}
int

View File

@ -1,3 +1,7 @@
Thu Dec 10 20:15:36 CET 1998 Werner Koch <wk@isil.d.shuttle.de>
* *.po: Changed some english strings.
Tue Dec 8 15:09:29 CET 1998 Werner Koch <wk@isil.d.shuttle.de>
* pt_BR.po: Add translation by Thiago Jung Bauermann.

428
po/de.po

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

427
po/fr.po

File diff suppressed because it is too large Load Diff

427
po/it.po

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

426
po/ru.po

File diff suppressed because it is too large Load Diff

View File

@ -1,3 +1,7 @@
Thu Dec 10 20:15:36 CET 1998 Werner Koch <wk@isil.d.shuttle.de>
* mpicalc.c (main): Moved initialization out of definition.
Mon May 18 15:39:22 1998 Werner Koch (wk@isil.d.shuttle.de)
* mk-tdata.c: New.

View File

@ -211,12 +211,16 @@ main(int argc, char **argv)
{
static ARGPARSE_OPTS opts[] = {
{0} };
ARGPARSE_ARGS pargs = { &argc, &argv, 0 };
ARGPARSE_ARGS pargs;
int i, c;
int state = 0;
char strbuf[1000];
int stridx=0;
pargs.argc = &argc;
pargs.argv = &argv;
pargs.flags = 0;
i18n_init();
while( arg_parse( &pargs, opts) ) {
switch( pargs.r_opt ) {