]> git.tuebingen.mpg.de Git - paraslash.git/blobdiff - gcrypt.c
compress: Overhaul the meaning of --aggressiveness.
[paraslash.git] / gcrypt.c
index 5c05ba20badce165aa1f1369136ab90e5d9b41d9..694c0adb8454b73dc0e5b67876fc7a03617b61d0 100644 (file)
--- a/gcrypt.c
+++ b/gcrypt.c
@@ -66,10 +66,29 @@ void crypt_init(void)
                        req_ver, gcry_check_version(NULL));
                exit(EXIT_FAILURE);
        }
+
+       /*
+        * Allocate a pool of secure memory. This also drops privileges where
+        * needed.
+        */
+       gcry_control(GCRYCTL_INIT_SECMEM, 65536, 0);
+
+       /* Tell Libgcrypt that initialization has completed. */
+       gcry_control(GCRYCTL_INITIALIZATION_FINISHED, 0);
+
        get_random_bytes_or_die((unsigned char *)&seed, sizeof(seed));
        srandom(seed);
 }
 
+void crypt_shutdown(void)
+{
+       /*
+        * WK does not see a way to apply a patch for the sake of Valgrind, so
+        * as of 2018 libgrypt has no deinitialization routine to free the
+        * resources on exit.
+        */
+}
+
 /** S-expression for the public part of an RSA key. */
 #define RSA_PUBKEY_SEXP "(public-key (rsa (n %m) (e %m)))"
 /** S-expression for a private RSA key. */
@@ -218,7 +237,7 @@ static int read_bignum(unsigned char *start, unsigned char *end, gcry_mpi_t *bn,
        PARA_DEBUG_LOG("bn_size %d (0x%x)\n", bn_size, (unsigned)bn_size);
        gret = gcry_mpi_scan(bn, GCRYMPI_FMT_STD, cp, bn_size, NULL);
        if (gret) {
-               PARA_ERROR_LOG("%s while scanning n\n",
+               PARA_ERROR_LOG("gcry_mpi_scan: %s\n",
                        gcry_strerror(gcry_err_code(gret)));
                return-E_MPI_SCAN;
        }