1
0
mirror of git://git.gnupg.org/gnupg.git synced 2024-06-07 23:27:48 +02:00

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: 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 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 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 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> Tue Dec 8 15:09:29 CET 1998 Werner Koch <wk@isil.d.shuttle.de>
* VERSION: Set to 0.4.5 * 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 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 Nicolas Graner Nicolas.Graner@cri.u-psud.fr
Niklas Hernaeus [Please don't spam him] Niklas Hernaeus [Please don't spam him]
Nimrod Zimerman zimerman@forfree.at Nimrod Zimerman zimerman@forfree.at
N J Doye nic@niss.ac.uk
Oskari Jääskeläinen f33003a@cc.hut.fi Oskari Jääskeläinen f33003a@cc.hut.fi
Paul D. Smith psmith@baynetworks.com Paul D. Smith psmith@baynetworks.com
Peter Gutmann pgut001@cs.auckland.ac.nz 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 a next pointer ro more records - check wehther the reuse code really
works. Maybe this is the reason for the "Hmmm public key lost" 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 * clearsig: keep lineendings as they are. Remember that trailings
blanks are not hashed. blanks are not hashed.
* OpenBSD: dynamic loading with dlopen works on OpenBSD, but: * 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? * 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 * 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. * Replace the SIGUSR1 stuff by semaphores to avoid loss of a signal.
* add test cases for invalid data (scrambled armor or other random data) * add test cases for invalid data (scrambled armor or other random data)
@ -66,3 +55,9 @@
* Use "user ID", "trustdb", "NOTE" and "WARNING". * 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 macros to configure g10
dnl WK_MSG_PRINT(STRING) dnl GNUPG_MSG_PRINT(STRING)
dnl print a message dnl print a message
dnl dnl
define(WK_MSG_PRINT, define(GNUPG_MSG_PRINT,
[ echo $ac_n "$1"" $ac_c" 1>&AC_FD_MSG [ 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 Check whether a typedef exists and create a #define $2 if it exists
dnl dnl
AC_DEFUN(WK_CHECK_TYPEDEF, AC_DEFUN(GNUPG_CHECK_TYPEDEF,
[ AC_MSG_CHECKING(for $1 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> [AC_TRY_COMPILE([#include <stdlib.h>
#include <sys/types.h>], [ #include <sys/types.h>], [
#undef $1 #undef $1
int a = sizeof($1); int a = sizeof($1);
], wk_cv_typedef_$1=yes, wk_cv_typedef_$1=no )]) ], gnupg_cv_typedef_$1=yes, gnupg_cv_typedef_$1=no )])
AC_MSG_RESULT($wk_cv_typedef_$1) AC_MSG_RESULT($gnupg_cv_typedef_$1)
if test "$wk_cv_typedef_$1" = yes; then if test "$gnupg_cv_typedef_$1" = yes; then
AC_DEFINE($2) AC_DEFINE($2)
fi 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 same as AC_LINK_FILES, but collect the files to link in
dnl some special variables and do the link 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 This is a workaround for AC_LINK_FILES, because it does not work
dnl correct when using a caching scheme dnl correct when using a caching scheme
dnl dnl
define(WK_LINK_FILES, define(GNUPG_LINK_FILES,
[ if test "x$wk_link_files_src" = "x"; then [ if test "x$wk_link_files_src" = "x"; then
wk_link_files_src="$1" wk_link_files_src="$1"
wk_link_files_dst="$2" wk_link_files_dst="$2"
@ -44,21 +44,21 @@ define(WK_LINK_FILES,
wk_link_files_dst="$wk_link_files_dst $2" wk_link_files_dst="$wk_link_files_dst $2"
fi fi
]) ])
define(WK_DO_LINK_FILES, define(GNUPG_DO_LINK_FILES,
[ AC_LINK_FILES( $wk_link_files_src, $wk_link_files_dst ) [ 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 either LITTLE_ENDIAN_HOST or BIG_ENDIAN_HOST
dnl dnl
define(WK_CHECK_ENDIAN, define(GNUPG_CHECK_ENDIAN,
[ if test "$cross_compiling" = yes; then [ if test "$cross_compiling" = yes; then
AC_MSG_WARN(cross compiling; assuming little endianess) AC_MSG_WARN(cross compiling; assuming little endianess)
fi fi
AC_MSG_CHECKING(endianess) AC_MSG_CHECKING(endianess)
AC_CACHE_VAL(wk_cv_c_endian, AC_CACHE_VAL(gnupg_cv_c_endian,
[ wk_cv_c_endian=unknown [ gnupg_cv_c_endian=unknown
# See if sys/param.h defines the BYTE_ORDER macro. # See if sys/param.h defines the BYTE_ORDER macro.
AC_TRY_COMPILE([#include <sys/types.h> AC_TRY_COMPILE([#include <sys/types.h>
#include <sys/param.h>], [ #include <sys/param.h>], [
@ -69,8 +69,8 @@ define(WK_CHECK_ENDIAN,
#include <sys/param.h>], [ #include <sys/param.h>], [
#if BYTE_ORDER != BIG_ENDIAN #if BYTE_ORDER != BIG_ENDIAN
not big endian not big endian
#endif], wk_cv_c_endian=big, wk_cv_c_endian=little)]) #endif], gnupg_cv_c_endian=big, gnupg_cv_c_endian=little)])
if test "$wk_cv_c_endian" = unknown; then if test "$gnupg_cv_c_endian" = unknown; then
AC_TRY_RUN([main () { AC_TRY_RUN([main () {
/* Are we little or big endian? From Harbison&Steele. */ /* Are we little or big endian? From Harbison&Steele. */
union union
@ -81,27 +81,27 @@ define(WK_CHECK_ENDIAN,
u.l = 1; u.l = 1;
exit (u.c[sizeof (long) - 1] == 1); exit (u.c[sizeof (long) - 1] == 1);
}], }],
wk_cv_c_endian=little, gnupg_cv_c_endian=little,
wk_cv_c_endian=big, gnupg_cv_c_endian=big,
wk_cv_c_endian=little gnupg_cv_c_endian=little
) )
fi fi
]) ])
AC_MSG_RESULT([$wk_cv_c_endian]) AC_MSG_RESULT([$gnupg_cv_c_endian])
if test "$wk_cv_c_endian" = little; then if test "$gnupg_cv_c_endian" = little; then
AC_DEFINE(LITTLE_ENDIAN_HOST) AC_DEFINE(LITTLE_ENDIAN_HOST)
else else
AC_DEFINE(BIG_ENDIAN_HOST) AC_DEFINE(BIG_ENDIAN_HOST)
fi fi
]) ])
dnl WK_CHECK_CACHE dnl GNUPG_CHECK_CACHE
dnl dnl
define(WK_CHECK_CACHE, define(GNUPG_CHECK_CACHE,
[ AC_MSG_CHECKING(cached information) [ AC_MSG_CHECKING(cached information)
wk_hostcheck="$target" gnupg_hostcheck="$target"
AC_CACHE_VAL(wk_cv_hostcheck, [ wk_cv_hostcheck="$wk_hostcheck" ]) AC_CACHE_VAL(gnupg_cv_hostcheck, [ gnupg_cv_hostcheck="$gnupg_hostcheck" ])
if test "$wk_cv_hostcheck" != "$wk_hostcheck"; then if test "$gnupg_cv_hostcheck" != "$gnupg_hostcheck"; then
AC_MSG_RESULT(changed) AC_MSG_RESULT(changed)
AC_MSG_WARN(config.cache exists!) AC_MSG_WARN(config.cache exists!)
AC_MSG_ERROR(you must do 'make distclean' first to compile for 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) # Check for -fPIC etc (taken from libtool)
# And see whether we have a SHM_LOCK (FreeBSD does not have it). # 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 dnl
define(WK_CHECK_IPC, define(GNUPG_CHECK_PIC,
[ AC_CHECK_HEADERS(sys/ipc.h sys/shm.h) [ AC_MSG_CHECKING(for option to create PIC)
if test "$ac_cv_header_sys_shm_h" = "yes"; then CFLAGS_PIC=
AC_MSG_CHECKING(whether shmctl IPC_RMID allowes subsequent attaches) NO_PIC=no
AC_TRY_RUN([ if test "$cross_compiling" = yes; then
#include <sys/types.h> AC_MSG_RESULT(assume none)
#include <sys/ipc.h> else
#include <sys/shm.h> if test "$GCC" = yes; then
int main() CFLAGS_PIC="-fPIC"
{ else
int id; case "$host_os" in
char *shmaddr; aix3* | aix4*)
id = shmget (IPC_PRIVATE, 4, IPC_CREAT | 0777); # All rs/6000 code is PIC
if (id == -1) # but is there any non-rs/6000 AIX platform?
exit (2); ;;
shmaddr = shmat (id, 0, 0);
shmctl (id, IPC_RMID, 0); hpux9* | hpux10*)
if ((char*) shmat (id, 0, 0) == (char*) -1) CFLAGS_PIC="+Z"
{ ;;
shmdt (shmaddr);
exit (1); irix5* | irix6*)
} # PIC (with -KPIC) is the default.
shmdt (shmaddr); ;;
shmdt (shmaddr);
exit (0); osf3* | osf4*)
} # FIXME - pic_flag is probably required for
], # hppa*-osf* and i860-osf*
AC_DEFINE(IPC_RMID_DEFERRED_RELEASE) ;;
AC_MSG_RESULT(yes),
AC_MSG_RESULT(no), sco3.2v5*)
AC_MSG_RESULT(assuming no)) CFLAGS_PIC='-Kpic'
AC_MSG_CHECKING(whether SHM_LOCK is available) ;;
AC_TRY_COMPILE([#include <sys/types.h>
#include <sys/ipc.h> solaris2* | solaris7* )
#include <sys/shm.h>],[ CFLAGS_PIC='-KPIC'
int foo( int shm_id ) { shmctl(shm_id, SHM_LOCK, 0); } ;;
],
AC_DEFINE(IPC_HAVE_SHM_LOCK) sunos4*)
AC_MSG_RESULT(yes), CFLAGS_PIC='-PIC'
AC_MSG_RESULT(no)) ;;
*)
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 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 # 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) # is not called from uid 0 (not tested whether uid 0 works)
###################################################################### ######################################################################
dnl WK_CHECK_MLOCK dnl GNUPG_CHECK_MLOCK
dnl dnl
define(WK_CHECK_MLOCK, define(GNUPG_CHECK_MLOCK,
[ AC_CHECK_FUNCS(mlock) [ AC_CHECK_FUNCS(mlock)
if test "$ac_cv_func_mlock" = "yes"; then if test "$ac_cv_func_mlock" = "yes"; then
AC_MSG_CHECKING(whether mlock is broken) AC_MSG_CHECKING(whether mlock is broken)
@ -533,3 +606,4 @@ strdup __argz_count __argz_stringify __argz_next])
< $srcdir/po/POTFILES.in > po/POTFILES < $srcdir/po/POTFILES.in > po/POTFILES
]) ])
dnl *-*wedit:notab*-* Please keep this as the last line.

View File

@ -13,7 +13,6 @@ fi
LANG= LANG=
LANGUAGE= LANGUAGE=
expect - <<EOF expect - <<EOF
#set timeout -1 #set timeout -1
set timeout 8 set timeout 8
@ -22,9 +21,8 @@ spawn ../g10/gpg --no-batch --quick-random --homedir . --gen-key
expect { expect {
-exact "Please select what kind of key you want:\r -exact "Please select what kind of key you want:\r
(1) DSA and ElGamal (default)\r (1) DSA and ElGamal (default)\r
(2) ElGamal (sign and encrypt)\r (2) DSA (sign only)\r
(4) DSA (sign only)\r (4) ElGamal (sign and encrypt)\r
(5) ElGamal in a v3 packet\r
Your selection? " { send -- "1\r" } Your selection? " { send -- "1\r" }
timeout { exit 1 } } timeout { exit 1 } }
expect { expect {
@ -105,3 +103,4 @@ expect {
exit 1 exit 1
EOF 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) Wed Nov 25 12:33:41 1998 Werner Koch (wk@isil.d.shuttle.de)
* rand-*.c: Removed. * rand-*.c: Removed.

View File

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

View File

@ -32,6 +32,18 @@
#include <assert.h> #include <assert.h>
#include <errno.h> #include <errno.h>
#include <string.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 "util.h"
#include "rmd.h" #include "rmd.h"
#include "ttyio.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 add_randomness( const void *buffer, size_t length, int source );
static void random_poll(void); static void random_poll(void);
static void read_random_source( byte *buffer, size_t length, int level ); 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 ); static int gather_faked( byte *buffer, size_t *r_length, int level );
#endif
static void static void
@ -329,11 +339,39 @@ fast_random_poll()
initialize(); initialize();
initialized = 1; initialized = 1;
fnc = dynload_getfnc_fast_random_poll(); fnc = dynload_getfnc_fast_random_poll();
if( !fnc )
log_info("Ooops: No fast random poll function\n");
} }
if( fnc ) if( fnc ) {
(*fnc)( add_randomness ); (*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(); fnc = dynload_getfnc_gather_random();
if( !fnc ) { if( !fnc ) {
faked_rng = 1; faked_rng = 1;
#ifndef HAVE_DEV_RANDOM
fnc = gather_faked; fnc = gather_faked;
#else
BUG();
#endif
} }
} }
while( length ) { while( length ) {
@ -368,7 +402,6 @@ read_random_source( byte *buffer, size_t length, int level )
} }
#ifndef HAVE_DEV_RANDOM
static int static int
gather_faked( byte *buffer, size_t *r_length, int level ) 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 ) { if( !initialized ) {
log_info(_("WARNING: using insecure random number generator!!\n")); log_info(_("WARNING: using insecure random number generator!!\n"));
tty_printf(_("The random number generator is only a kludge to let\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")); "DON'T USE ANY DATA GENERATED BY THIS PROGRAM!!\n\n"));
initialized=1; initialized=1;
#ifdef HAVE_RAND #ifdef HAVE_RAND
@ -398,5 +431,3 @@ gather_faked( byte *buffer, size_t *r_length, int level )
return 100; /* We really fake it ;-) */ return 100; /* We really fake it ;-) */
} }
#endif /* ! HAVE_DEV_RANDOM */

View File

@ -27,15 +27,9 @@
#include <sys/time.h> #include <sys/time.h>
#include <sys/types.h> #include <sys/types.h>
#include <sys/stat.h> #include <sys/stat.h>
#ifdef HAVE_GETHRTIME
#include <sys/times.h>
#endif
#ifdef HAVE_GETTIMEOFDAY #ifdef HAVE_GETTIMEOFDAY
#include <sys/times.h> #include <sys/times.h>
#endif #endif
#ifdef HAVE_GETRUSAGE
#include <sys/resource.h>
#endif
#include <string.h> #include <string.h>
#include <unistd.h> #include <unistd.h>
#include <fcntl.h> #include <fcntl.h>
@ -61,38 +55,6 @@ static void tty_printf(const char *fmt, ... )
#endif #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 * Used to open the Linux and xBSD /dev/random devices
@ -192,7 +154,6 @@ static struct {
void *func; void *func;
} func_table[] = { } func_table[] = {
{ 40, 1, gather_random }, { 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 static int
gather_random( byte *buffer, size_t *r_length, int level ) gather_random( byte *buffer, size_t *r_length, int level )
@ -698,7 +666,6 @@ static struct {
void *func; void *func;
} func_table[] = { } func_table[] = {
{ 40, 1, gather_random }, { 40, 1, gather_random },
{ 41, 1, fast_poll },
}; };
/**************** /****************

View File

@ -55,9 +55,13 @@ else
fi fi
if test "$use_m_guard" = yes ; then if test "$use_m_guard" = yes ; then
AC_DEFINE(M_GUARD) AC_DEFINE(M_GUARD)
CFLAGS="$CFLAGS -g -Wall" CFLAGS="$CFLAGS -g"
else else
CFLAGS="$CFLAGS -O2 -Wall" CFLAGS="$CFLAGS -O2"
fi
if test "$GCC" = yes; then
CFLAGS="$CFLAGS -Wall"
fi fi
@ -87,7 +91,6 @@ AC_PROG_INSTALL
AM_CYGWIN32 AM_CYGWIN32
case "${target}" in case "${target}" in
i386--mingw32) i386--mingw32)
# special stuff for Windoze NT # special stuff for Windoze NT
@ -108,6 +111,13 @@ case "${target}" in
;; ;;
esac esac
GNUPG_CHECK_PIC
if test "$NO_PIC" = yes; then
try_dynload=no
fi
case "${target}" in case "${target}" in
i386--mingw32) i386--mingw32)
PRINTABLE_OS_NAME="MingW32" PRINTABLE_OS_NAME="MingW32"
@ -131,7 +141,7 @@ case "${target}" in
*) *)
NAME_OF_DEV_RANDOM="/dev/random" NAME_OF_DEV_RANDOM="/dev/random"
NAME_OF_DEV_URANDOM="/dev/urandom" NAME_OF_DEV_URANDOM="/dev/urandom"
DYNLINK_MOD_CFLAGS="-shared -fPIC -lc" DYNLINK_MOD_CFLAGS="-shared $CFLAGS_PIC -lc"
;; ;;
esac esac
AC_DEFINE_UNQUOTED(NAME_OF_DEV_RANDOM, "$NAME_OF_DEV_RANDOM") AC_DEFINE_UNQUOTED(NAME_OF_DEV_RANDOM, "$NAME_OF_DEV_RANDOM")
@ -144,19 +154,20 @@ AM_GNU_GETTEXT
AC_CHECK_LIB(gdbm,gdbm_firstkey) AC_CHECK_LIB(gdbm,gdbm_firstkey)
if test "$try_dynload" = yes ; then if test "$try_dynload" = yes ; then
AC_CHECK_LIB(dl,dlopen) AC_CHECK_LIB(dl,dlopen)
if test "$ac_cv_lib_dl_dlopen" = "yes"; then if test "$ac_cv_lib_dl_dlopen" = "yes"; then
AC_DEFINE(USE_DYNAMIC_LINKING) AC_DEFINE(USE_DYNAMIC_LINKING)
AC_DEFINE(HAVE_DL_DLOPEN) AC_DEFINE(HAVE_DL_DLOPEN)
DYNLINK_LDFLAGS=-rdynamic DYNLINK_LDFLAGS="-Wl,-export-dynamic"
use_gnupg_extensions=yes use_gnupg_extensions=yes
else else
AC_CHECK_LIB(dld,dld_link) AC_CHECK_LIB(dld,dld_link)
if test "$ac_cv_lib_dld_dld_link" = "yes"; then if test "$ac_cv_lib_dld_dld_link" = "yes"; then
AC_DEFINE(USE_DYNAMIC_LINKING) AC_DEFINE(USE_DYNAMIC_LINKING)
AC_DEFINE(HAVE_DLD_DLD_LINK) AC_DEFINE(HAVE_DLD_DLD_LINK)
DYNLINK_LDFLAGS=-rdynamic DYNLINK_LDFLAGS="-Wl,-export-dynamic"
use_gnupg_extensions=yes use_gnupg_extensions=yes
fi fi
fi fi
@ -185,14 +196,14 @@ AC_TYPE_SIZE_T
AC_TYPE_SIGNAL AC_TYPE_SIGNAL
AC_DECL_SYS_SIGLIST AC_DECL_SYS_SIGLIST
WK_CHECK_ENDIAN GNUPG_CHECK_ENDIAN
WK_CHECK_TYPEDEF(byte, HAVE_BYTE_TYPEDEF) GNUPG_CHECK_TYPEDEF(byte, HAVE_BYTE_TYPEDEF)
WK_CHECK_TYPEDEF(ushort, HAVE_USHORT_TYPEDEF) GNUPG_CHECK_TYPEDEF(ushort, HAVE_USHORT_TYPEDEF)
WK_CHECK_TYPEDEF(ulong, HAVE_ULONG_TYPEDEF) GNUPG_CHECK_TYPEDEF(ulong, HAVE_ULONG_TYPEDEF)
WK_CHECK_TYPEDEF(u16, HAVE_U16_TYPEDEF) GNUPG_CHECK_TYPEDEF(u16, HAVE_U16_TYPEDEF)
WK_CHECK_TYPEDEF(u32, HAVE_U32_TYPEDEF) GNUPG_CHECK_TYPEDEF(u32, HAVE_U32_TYPEDEF)
AC_CHECK_SIZEOF(unsigned short, 2) AC_CHECK_SIZEOF(unsigned short, 2)
AC_CHECK_SIZEOF(unsigned int, 4) 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(memmove gettimeofday getrusage gethrtime setrlimit)
AC_CHECK_FUNCS(memicmp atexit raise getpagesize strftime) 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 if test "$ac_cv_header_sys_shm_h" = "yes"; then
AC_DEFINE(USE_SHM_COPROCESSING) AC_DEFINE(USE_SHM_COPROCESSING)
fi fi
@ -239,7 +250,7 @@ dnl setup assembler stuff
AC_MSG_CHECKING(for mpi assembler functions) AC_MSG_CHECKING(for mpi assembler functions)
if test -f $srcdir/mpi/config.links ; then if test -f $srcdir/mpi/config.links ; then
. $srcdir/mpi/config.links . $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_extra_asm_modules="$mpi_extra_modules"
ac_cv_mpi_sflags="$mpi_sflags" ac_cv_mpi_sflags="$mpi_sflags"
ac_cv_mpi_config_done="yes" ac_cv_mpi_config_done="yes"
@ -250,9 +261,9 @@ else
fi fi
MPI_EXTRA_ASM_OBJS="" MPI_EXTRA_ASM_OBJS=""
if test "$ac_cv_mpi_extra_asm_modules" != ""; then 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 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" MPI_EXTRA_ASM_OBJS="$MPI_EXTRA_ASM_OBJS $i.o"
done done
AC_MSG_RESULT() 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 if test "$g10_force_zlib" = "yes"; then
ZLIBS="../zlib/libzlib.a" ZLIBS="../zlib/libzlib.a"
AM_CONDITIONAL(ENABLE_LOCAL_ZLIB, true) AM_CONDITIONAL(ENABLE_LOCAL_ZLIB, true)
WK_LINK_FILES(zlib/zlib.h, zlib.h ) GNUPG_LINK_FILES(zlib/zlib.h, zlib.h )
WK_LINK_FILES(zlib/zconf.h, zconf.h ) GNUPG_LINK_FILES(zlib/zconf.h, zconf.h )
else else
AC_CHECK_HEADERS(zlib.h) AC_CHECK_HEADERS(zlib.h)
if test "$ac_cv_header_zlib_h" = yes ; then if test "$ac_cv_header_zlib_h" = yes ; then
@ -277,13 +288,13 @@ if test "$ac_cv_header_zlib_h" = yes ; then
else else
ZLIBS="../zlib/libzlib.a" ZLIBS="../zlib/libzlib.a"
AM_CONDITIONAL(ENABLE_LOCAL_ZLIB, true) AM_CONDITIONAL(ENABLE_LOCAL_ZLIB, true)
WK_LINK_FILES(zlib/zlib.h, zlib.h ) GNUPG_LINK_FILES(zlib/zlib.h, zlib.h )
WK_LINK_FILES(zlib/zconf.h, zconf.h ) GNUPG_LINK_FILES(zlib/zconf.h, zconf.h )
fi fi
fi fi
AC_SUBST(ZLIBS) AC_SUBST(ZLIBS)
WK_DO_LINK_FILES GNUPG_DO_LINK_FILES
AC_OUTPUT([ 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> 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. * 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 ); randomize_buffer( temp, blocksize, 1 );
temp[blocksize] = temp[blocksize-2]; temp[blocksize] = temp[blocksize-2];
temp[blocksize+1] = temp[blocksize-1]; 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 ); 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_setkey( cfx->cipher_hd, cfx->dek->key, cfx->dek->keylen );
cipher_setiv( cfx->cipher_hd, NULL ); 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; MPI frame;
pk = pk_list->pk; 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 = m_alloc_clear( sizeof *enc );
enc->pubkey_algo = pk->pubkey_algo; enc->pubkey_algo = pk->pubkey_algo;
keyid_from_pk( pk, enc->keyid ); keyid_from_pk( pk, enc->keyid );
@ -394,8 +394,9 @@ write_pubkey_enc_from_list( PK_LIST pk_list, DEK *dek, IOBUF out )
else { else {
if( opt.verbose ) { if( opt.verbose ) {
char *ustr = get_user_id_string( enc->keyid ); char *ustr = get_user_id_string( enc->keyid );
log_info(_("%s encrypted for: %s\n"), log_info(_("%s/%s encrypted for: %s\n"),
pubkey_algo_to_string(enc->pubkey_algo), ustr ); pubkey_algo_to_string(enc->pubkey_algo),
cipher_algo_to_string(dek->algo), ustr );
m_free(ustr); m_free(ustr);
} }
/* and write it */ /* and write it */

View File

@ -34,27 +34,28 @@
#include "main.h" #include "main.h"
#include "i18n.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). * Export the public keys (to standard out or --output).
* Depending on opt.armor the output is armored. * 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. * If USERS is NULL, the complete ring will be exported.
*/ */
int int
export_pubkeys( STRLIST users ) export_pubkeys( STRLIST users, int onlyrfc )
{ {
return do_export( users, 0 ); return do_export( users, 0, onlyrfc );
} }
int int
export_seckeys( STRLIST users ) export_seckeys( STRLIST users )
{ {
return do_export( users, 1 ); return do_export( users, 1, 0 );
} }
static int static int
do_export( STRLIST users, int secret ) do_export( STRLIST users, int secret, int onlyrfc )
{ {
int rc = 0; int rc = 0;
armor_filter_context_t afx; armor_filter_context_t afx;
@ -110,7 +111,7 @@ do_export( STRLIST users, int secret )
rc = secret? find_secret_keyblock_byname( &kbpos, sl->d ) rc = secret? find_secret_keyblock_byname( &kbpos, sl->d )
: find_keyblock_byname( &kbpos, sl->d ); : find_keyblock_byname( &kbpos, sl->d );
if( rc ) { 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; rc = 0;
continue; continue;
} }
@ -119,10 +120,21 @@ do_export( STRLIST users, int secret )
} }
if( rc ) { if( rc ) {
log_error("certificate read problem: %s\n", g10_errstr(rc)); log_error(_("certificate read problem: %s\n"), g10_errstr(rc));
goto leave; 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 */ /* and write it */
for( kbctx=NULL; (node = walk_kbnode( keyblock, &kbctx, 0 )); ) { for( kbctx=NULL; (node = walk_kbnode( keyblock, &kbctx, 0 )); ) {
/* don't export any comment packets but those in the /* don't export any comment packets but those in the

View File

@ -84,6 +84,7 @@ enum cmd_and_opt_values { aNull = 0,
aListSigs, aListSigs,
aListSecretKeys, aListSecretKeys,
aExport, aExport,
aExportAll,
aExportSecret, aExportSecret,
aCheckKeys, aCheckKeys,
aGenRevoke, aGenRevoke,
@ -180,7 +181,8 @@ static ARGPARSE_OPTS opts[] = {
{ aEditKey, "edit-key" ,256, N_("sign or edit a key")}, { aEditKey, "edit-key" ,256, N_("sign or edit a key")},
{ aGenRevoke, "gen-revoke",256, N_("generate a revocation certificate")}, { aGenRevoke, "gen-revoke",256, N_("generate a revocation certificate")},
#endif #endif
{ aExport, "export" , 256, N_("export keys") }, { aExport, "export" , 256, N_("export keys") },
{ aExportAll, "export-all" , 256, "@" },
{ aExportSecret, "export-secret-keys" , 256, "@" }, { aExportSecret, "export-secret-keys" , 256, "@" },
{ aImport, "import", 256 , N_("import/merge keys")}, { aImport, "import", 256 , N_("import/merge keys")},
{ aFastImport, "fast-import", 256 , "@"}, { aFastImport, "fast-import", 256 , "@"},
@ -634,6 +636,7 @@ main( int argc, char **argv )
case aImport: set_cmd( &cmd, aImport); break; case aImport: set_cmd( &cmd, aImport); break;
case aFastImport: set_cmd( &cmd, aFastImport); break; case aFastImport: set_cmd( &cmd, aFastImport); break;
case aExport: set_cmd( &cmd, aExport); break; case aExport: set_cmd( &cmd, aExport); break;
case aExportAll: set_cmd( &cmd, aExportAll); break;
case aListKeys: set_cmd( &cmd, aListKeys); break; case aListKeys: set_cmd( &cmd, aListKeys); break;
case aListSigs: set_cmd( &cmd, aListSigs); break; case aListSigs: set_cmd( &cmd, aListSigs); break;
case aExportSecret: set_cmd( &cmd, aExportSecret); break; case aExportSecret: set_cmd( &cmd, aExportSecret); break;
@ -1084,10 +1087,11 @@ main( int argc, char **argv )
break; break;
case aExport: case aExport:
case aExportAll:
sl = NULL; sl = NULL;
for( ; argc; argc--, argv++ ) for( ; argc; argc--, argv++ )
add_to_strlist( &sl, *argv ); add_to_strlist( &sl, *argv );
export_pubkeys( sl ); export_pubkeys( sl, (cmd == aExport) );
free_strlist(sl); free_strlist(sl);
break; 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 #ifdef IS_G10MAINT

View File

@ -1413,6 +1413,27 @@ get_user_id_string( u32 *keyid )
return p; 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* char*
get_user_id( u32 *keyid, size_t *rn ) get_user_id( u32 *keyid, size_t *rn )
{ {

View File

@ -258,18 +258,6 @@ g10_exit( int rc )
exit(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 static void
become_daemon() 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" "does this but other OpenPGP implemenations are not required to understand\n"
"the signature+encryption flavor.\n" "the signature+encryption flavor.\n"
"The first (primary) key must always be a key which is capable of signing;\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" "this is the reason why the ecrytion only ElGamal key is disabled in this."
"You should not select the \"ElGamal in a v3 packet\", because that key is\n"
"not compatible to other OpenPGP implementations."
}, },
{ 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"), { N_("keygen.size"),
"Enter the size of the key" "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 ); int enum_secret_keys( void **context, PKT_secret_key *sk, int with_subkeys );
void merge_keys_and_selfsig( KBNODE keyblock ); void merge_keys_and_selfsig( KBNODE keyblock );
char*get_user_id_string( u32 *keyid ); char*get_user_id_string( u32 *keyid );
char*get_long_user_id_string( u32 *keyid );
char*get_user_id( u32 *keyid, size_t *rn ); char*get_user_id( u32 *keyid, size_t *rn );
/*-- keyid.c --*/ /*-- 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")); tty_printf(_("Please select what kind of key you want:\n"));
if( !addmode ) if( !addmode )
tty_printf(_(" (%d) DSA and ElGamal (default)\n"), 1 ); 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 ) if( addmode )
tty_printf( _(" (%d) ElGamal (encrypt only)\n"), 3 ); 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 ); tty_printf( _(" (%d) ElGamal in a v3 packet\n"), 5 );
#endif
*ret_v4 = 1; *ret_v4 = 1;
for(;;) { for(;;) {
@ -404,23 +406,28 @@ ask_algo( int *ret_v4, int addmode )
algo = 0; /* create both keys */ algo = 0; /* create both keys */
break; break;
} }
else if( algo == 2 ) { else if( algo == 4 ) {
algo = PUBKEY_ALGO_ELGAMAL; if( cpr_get_answer_is_yes("keygen.algo.elg_se",_(
break; "Do you really want to create a sign and encrypt key? "))) {
algo = PUBKEY_ALGO_ELGAMAL;
break;
}
} }
else if( algo == 3 && addmode ) { else if( algo == 3 && addmode ) {
algo = PUBKEY_ALGO_ELGAMAL_E; algo = PUBKEY_ALGO_ELGAMAL_E;
break; break;
} }
else if( algo == 4 ) { else if( algo == 2 ) {
algo = PUBKEY_ALGO_DSA; algo = PUBKEY_ALGO_DSA;
break; break;
} }
#if 0
else if( algo == 5 ) { else if( algo == 5 ) {
algo = PUBKEY_ALGO_ELGAMAL_E; algo = PUBKEY_ALGO_ELGAMAL_E;
*ret_v4 = 0; *ret_v4 = 0;
break; break;
} }
#endif
else else
tty_printf(_("Invalid selection.\n")); tty_printf(_("Invalid selection.\n"));
} }

View File

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

View File

@ -841,7 +841,7 @@ check_sig_and_print( CTX c, KBNODE node )
rc = do_check_sig(c, node, NULL ); rc = do_check_sig(c, node, NULL );
if( !rc || rc == G10ERR_BAD_SIGN ) { 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 ); write_status_text( rc? STATUS_BADSIG : STATUS_GOODSIG, us );
m_free(us); m_free(us);
log_info(rc? _("BAD signature from \"") log_info(rc? _("BAD signature from \"")

View File

@ -187,3 +187,61 @@ buffer_to_u32( const byte *buffer )
return a; 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: case TRUST_ULTIMATE:
if( opt.verbose ) 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 */ return 1; /* yes */
default: BUG(); default: BUG();

View File

@ -249,7 +249,7 @@ add_keyblock_resource( const char *url, int force, int secret )
goto leave; goto leave;
case rt_RING: case rt_RING:
iobuf = iobuf_fopen( filename, "rb" ); iobuf = iobuf_open( filename );
if( !iobuf && !force ) { if( !iobuf && !force ) {
rc = G10ERR_OPEN_FILE; rc = G10ERR_OPEN_FILE;
goto leave; goto leave;
@ -689,7 +689,7 @@ enum_keyblocks( int mode, KBPOS *kbpos, KBNODE *ret_root )
kbpos->rt = resource_table[i].rt; kbpos->rt = resource_table[i].rt;
switch( kbpos->rt ) { switch( kbpos->rt ) {
case rt_RING: case rt_RING:
kbpos->fp = iobuf_fopen( rentry->fname, "rb" ); kbpos->fp = iobuf_open( rentry->fname );
if( !kbpos->fp ) { if( !kbpos->fp ) {
log_error("can't open '%s'\n", rentry->fname ); log_error("can't open '%s'\n", rentry->fname );
return G10ERR_OPEN_FILE; return G10ERR_OPEN_FILE;
@ -1083,7 +1083,7 @@ keyring_read( KBPOS *kbpos, KBNODE *ret_root )
if( !(rentry=check_pos(kbpos)) ) if( !(rentry=check_pos(kbpos)) )
return G10ERR_GENERAL; return G10ERR_GENERAL;
a = iobuf_fopen( rentry->fname, "rb" ); a = iobuf_open( rentry->fname );
if( !a ) { if( !a ) {
log_error("can't open '%s'\n", rentry->fname ); log_error("can't open '%s'\n", rentry->fname );
return G10ERR_OPEN_FILE; 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 ); log_fatal("can't lock '%s'\n", rentry->fname );
/* open the source file */ /* open the source file */
fp = iobuf_fopen( rentry->fname, "rb" ); fp = iobuf_open( rentry->fname );
if( mode == 1 && !fp && errno == ENOENT ) { /* no file yet */ if( mode == 1 && !fp && errno == ENOENT ) { /* no file yet */
KBNODE kbctx, node; KBNODE kbctx, node;
@ -1526,6 +1526,9 @@ do_gdbm_store( KBPOS *kbpos, KBNODE root, int update )
content.dsize = iobuf_get_temp_length( fp ); content.dsize = iobuf_get_temp_length( fp );
rc = gdbm_store( rentry->dbf, key, content, rc = gdbm_store( rentry->dbf, key, content,
update? GDBM_REPLACE : GDBM_INSERT ); update? GDBM_REPLACE : GDBM_INSERT );
if( rc == 1 && !update )
rc = gdbm_store( rentry->dbf, key, content, GDBM_REPLACE );
if( rc ) { if( rc ) {
log_error("%s: gdbm_store failed: %s\n", rentry->fname, log_error("%s: gdbm_store failed: %s\n", rentry->fname,
rc == 1 ? "already stored" 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 ) else if( cipher_get_blocksize( sk->protect.algo ) != 8 )
rc = G10ERR_CIPHER_ALGO; /* unsupport protection algorithm */ rc = G10ERR_CIPHER_ALGO; /* unsupport protection algorithm */
else { else {
print_cipher_algo_note( sk->protect.algo );
cipher_hd = cipher_open( sk->protect.algo, cipher_hd = cipher_open( sk->protect.algo,
CIPHER_MODE_AUTO_CFB, 1 ); CIPHER_MODE_AUTO_CFB, 1 );
if( cipher_setkey( cipher_hd, dek->key, dek->keylen ) ) 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; byte *dp;
int rc; int rc;
if( is_RSA(sk->pubkey_algo) ) print_pubkey_algo_note(sk->pubkey_algo);
do_not_use_RSA();
if( !digest_algo ) if( !digest_algo )
digest_algo = md_get_algo(md); digest_algo = md_get_algo(md);
print_digest_algo_note( digest_algo );
dp = md_read( md, digest_algo ); dp = md_read( md, digest_algo );
sig->digest_algo = digest_algo; sig->digest_algo = digest_algo;
sig->digest_start[0] = dp[0]; sig->digest_start[0] = dp[0];

View File

@ -152,7 +152,8 @@ init_shm_coprocessing ( ulong requested_shm_size, int lock_mem )
else else
shm_is_locked = 1; shm_is_locked = 1;
#elif defined(HAVE_MLOCK) && !defined(HAVE_BROKEN_MLOCK) #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", log_info("locking shared memory %d failed: %s\n",
shm_id, strerror(errno)); shm_id, strerror(errno));
else else
@ -307,7 +308,8 @@ cpr_kill_prompt(void)
if( opt.shm_coprocess ) if( opt.shm_coprocess )
return; return;
#endif #endif
return tty_kill_prompt(); tty_kill_prompt();
return;
} }
int 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> Tue Dec 8 15:09:29 CET 1998 Werner Koch <wk@isil.d.shuttle.de>
* pt_BR.po: Add translation by Thiago Jung Bauermann. * 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) Mon May 18 15:39:22 1998 Werner Koch (wk@isil.d.shuttle.de)
* mk-tdata.c: New. * mk-tdata.c: New.

View File

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