summaryrefslogtreecommitdiff
path: root/src/mpicalc.c
diff options
context:
space:
mode:
authorWerner Koch <wk@gnupg.org>2013-12-12 20:26:56 +0100
committerWerner Koch <wk@gnupg.org>2013-12-12 20:26:56 +0100
commit5e1239b1e2948211ff2675f45cce2b28c3379cfb (patch)
treef9648298cf4f9ee8b5582b87d79b67f12b716860 /src/mpicalc.c
parent4ae77322b681a13da62d01274bcab25be2af12d0 (diff)
downloadlibgcrypt-5e1239b1e2948211ff2675f45cce2b28c3379cfb.tar.gz
Add a configuration file to disable hardware features.
* src/hwfeatures.c: Inclyde syslog.h and ctype.h. (HWF_DENY_FILE): New. (my_isascii): New. (parse_hwf_deny_file): New. (_gcry_detect_hw_features): Call it. * src/mpicalc.c (main): Correctly initialize Libgcrypt. Add options "--print-config" and "--disable-hwf". Signed-off-by: Werner Koch <wk@gnupg.org>
Diffstat (limited to 'src/mpicalc.c')
-rw-r--r--src/mpicalc.c36
1 files changed, 35 insertions, 1 deletions
diff --git a/src/mpicalc.c b/src/mpicalc.c
index 335b7c39..b2b43351 100644
--- a/src/mpicalc.c
+++ b/src/mpicalc.c
@@ -40,6 +40,7 @@
#define MPICALC_VERSION "2.0"
+#define NEED_LIBGCRYPT_VERSION "1.6.0"
#define STACKSIZE 500
static gcry_mpi_t stack[STACKSIZE];
@@ -309,6 +310,7 @@ main (int argc, char **argv)
{
const char *pgm;
int last_argc = -1;
+ int print_config = 0;
int i, c;
int state = 0;
char strbuf[1000];
@@ -350,10 +352,28 @@ main (int argc, char **argv)
"Simple interactive big integer RPN calculator\n"
"\n"
"Options:\n"
- " --version print version information\n",
+ " --version print version information\n"
+ " --print-config print the Libgcrypt config\n"
+ " --disable-hwf NAME disable feature NAME\n",
pgm, gcry_check_version (NULL));
exit (0);
}
+ else if (!strcmp (*argv, "--print-config"))
+ {
+ argc--; argv++;
+ print_config = 1;
+ }
+ else if (!strcmp (*argv, "--disable-hwf"))
+ {
+ argc--; argv++;
+ if (argc)
+ {
+ if (gcry_control (GCRYCTL_DISABLE_HWF, *argv, NULL))
+ fprintf (stderr, "%s: unknown hardware feature `%s'"
+ " - option ignored\n", pgm, *argv);
+ argc--; argv++;
+ }
+ }
}
if (argc)
@@ -362,6 +382,20 @@ main (int argc, char **argv)
exit (1);
}
+ if (!gcry_check_version (NEED_LIBGCRYPT_VERSION))
+ {
+ fprintf (stderr, "%s: Libgcrypt is too old (need %s, have %s)\n",
+ pgm, NEED_LIBGCRYPT_VERSION, gcry_check_version (NULL) );
+ exit (1);
+ }
+ gcry_control (GCRYCTL_DISABLE_SECMEM, 0);
+ gcry_control (GCRYCTL_INITIALIZATION_FINISHED, 0);
+ if (print_config)
+ {
+ gcry_control (GCRYCTL_PRINT_CONFIG, stdout);
+ exit (0);
+ }
+
for (i = 0; i < STACKSIZE; i++)
stack[i] = NULL;
stackidx = 0;