added more stuff
authorWerner Koch <wk@gnupg.org>
Fri, 2 Jan 1998 20:40:01 +0000 (20:40 +0000)
committerWerner Koch <wk@gnupg.org>
Fri, 2 Jan 1998 20:40:01 +0000 (20:40 +0000)
README
cipher/random.c

diff --git a/README b/README
index f166cb7..fa8596b 100644 (file)
--- a/README
+++ b/README
@@ -51,7 +51,6 @@
 
     Key Generation
     --------------
-    Create a key pair with this command:
 
        g10 --gen-key
 
@@ -59,7 +58,7 @@
     good random numbers for prime number generation, it uses a /dev/random
     which will emit only bytes if the kernel can gather enough entropy.
     If you see no progress, you should start some other activities such
-    as mouse moves or a "find /".  Because we have no hardware device
+    as mouse moves or a "find /".  Because we have no hardware device
     to generate random we have to use this method.
 
     Key generation shows progress by printing different characters to
     9) Find a generator for that prime.
 
 
-    Signatures
-    ----------
-    To create a signature, use this:
+    You can sign a key with this command:
+
+       g10 --sign-key Donald
+
+    To sign the key of of "Donald" with your default userid
+
+       g10 --sign-key -u Karl -u Joe Donald
+
+    To sign the key of of "Donald" with the userids of "Karl" and "Joe".
+    All existing signatures are checked, if some are invalid, a menu is
+    offered to delete some of them, and the you are asked for every user
+    wether you want to sign this key.
+
+    You may remove a signature at any time by usiing the option "--edit-sig",
+    which also asks for the sigs to remove.
+
+
+    Sign
+    ----
 
        g10 -s file
 
 
     Creates a signature of file, but writes the output to the file "out".
 
-    Encryption
-    ----------
-    To encrypt data use this:
+
+    Encrypt
+    -------
 
        g10 -e -r heine file
 
     Ditto, but encrypts "hallo\n" and mails it as ascii armored message.
 
 
+    Sign and Encrypt
+    ----------------
+
+       g10 -se -r heine file
+
+    This encrypts files with the public key of "heine" and writes it
+    to "file.g10" after signing it with the default user id.
+
+
+       g10 -se -r heine -u Suttner file
+
+    Ditto, but sign the file with the user id "Suttner"
+
+
+
+    Examine a data or key file
+    --------------------------
+
+       g10 --list-packets datafile
+
+    Use this to list the contents of a data file. If the file is encrypted
+    you are asked for the passphrase, so that G10 is able to look at the
+    inner structure of a encrypted packet.
+
+
+    Batch mode
+    ----------
+    If you use the option "--batch", G10 runs in non-interactive mode and
+    never prompts for input data.  This even does not allow to enter
+    passphrase; until we have a better solution (something like ssh-agent),
+    you can use the option "--passhrase-fd n", which works like PGPs
+    PGPPASSFD.
+
+    Batch mode also causes PGP to terminate as soon as a BAD signature is
+    detected.
+
+
+    Exit status
+    -----------
+    G10 returns with an exit status of 1 if in batch mode and a bad signature
+    has been detected or 2 or higher for all other errors.  You should parse
+    stderr to get detailed informations about the errors.
+
+
+
     Debug Flags
     -----------
     Use the option "--debug n" to output debug informations. This option
     I will run "indent" over the source when making a real distribution,
     but for now I stick to my own formatting rules.
 
-    Compression does not work always; this is the reason that "-z 0"
-    is the default.
-
-    This will be cleaned up of course.
-
     The primary FTP site is "ftp://ftp.guug.de/pub/gcrypt/"
     The primary WWW page is "http://www.d.shuttle.de/isil/g10.html"
 
     Please direct bug reports to <g10-bugs@isil.d.shuttle.de> or better
     post them to the mailing list <g10@net.lut.ac.uk>.
 
-    Have fun
-
-       Werner
 
index 83efc4b..f865693 100644 (file)
 #include <config.h>
 #include <stdio.h>
 #include <stdlib.h>
+#include <assert.h>
 #include <errno.h>
+#include <sys/time.h>
 #include <sys/types.h>
 #include <sys/stat.h>
+#include <unistd.h>
 #include <fcntl.h>
 #include "util.h"
 #include "cipher.h"
@@ -98,6 +101,7 @@ fill_buffer( byte *buffer, size_t length, int level )
     static int fd_random = -1;
     int fd;
     int n;
+    int warn=0;
 
     if( level == 2 ) {
        if( fd_random == -1 )
@@ -112,11 +116,34 @@ fill_buffer( byte *buffer, size_t length, int level )
 
 
     do {
+       fd_set rfds;
+       struct timeval tv;
+       int rc;
+
+       FD_ZERO(&rfds);
+       FD_SET(fd, &rfds);
+       tv.tv_sec = 3;
+       tv.tv_usec = 0;
+       if( !(rc=select(fd+1, &rfds, NULL, NULL, &tv)) ) {
+           if( !warn )
+               tty_printf(
+"\nNot enough random bytes available.  Please do some other work to give
+the OS a chance to collect more entropy! (Need %d more bytes)\n", length );
+           warn = 1;
+           continue;
+       }
+       else if( rc == -1 ) {
+           tty_printf("select() error: %s\n", strerror(errno));
+           continue;
+       }
+
+       assert( length < 200 );
        do {
            n = read(fd, buffer, length );
        } while( n == -1 && errno == EINTR );
        if( n == -1 )
            log_fatal("read error on random device: %s\n", strerror(errno) );
+       assert( n <= length );
        buffer += n;
        length -= n;
     } while( length );