aboutsummaryrefslogtreecommitdiffstats
path: root/tools
diff options
context:
space:
mode:
Diffstat (limited to 'tools')
-rw-r--r--tools/Makefile.am12
-rw-r--r--tools/Makefile.in252
-rw-r--r--tools/bftest.c85
-rw-r--r--tools/mpicalc.c341
-rw-r--r--tools/primes.scm31
5 files changed, 721 insertions, 0 deletions
diff --git a/tools/Makefile.am b/tools/Makefile.am
new file mode 100644
index 000000000..a23b8d349
--- /dev/null
+++ b/tools/Makefile.am
@@ -0,0 +1,12 @@
+## Process this file with automake to produce Makefile.in
+
+INCLUDES = -I$(top_srcdir)/include
+
+bin_PROGRAMS = mpicalc
+
+mpicalc_SOURCES = mpicalc.c
+
+
+LDADD = -L ../cipher -L ../mpi -L ../util -lcipher -lmpi -lutil
+
+
diff --git a/tools/Makefile.in b/tools/Makefile.in
new file mode 100644
index 000000000..b9f55a889
--- /dev/null
+++ b/tools/Makefile.in
@@ -0,0 +1,252 @@
+# Makefile.in generated automatically by automake 1.0 from Makefile.am
+
+# Copyright (C) 1994, 1995, 1996 Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy, distribute and modify it.
+
+
+SHELL = /bin/sh
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+prefix = @prefix@
+exec_prefix = @exec_prefix@
+
+bindir = @bindir@
+sbindir = @sbindir@
+libexecdir = @libexecdir@
+datadir = @datadir@
+sysconfdir = @sysconfdir@
+sharedstatedir = @sharedstatedir@
+localstatedir = @localstatedir@
+libdir = @libdir@
+infodir = @infodir@
+mandir = @mandir@
+includedir = @includedir@
+oldincludedir = /usr/include
+
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+
+top_builddir = ..
+
+INSTALL = @INSTALL@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+transform = @program_transform_name@
+
+INCLUDES = -I$(top_srcdir)/include
+
+bin_PROGRAMS = mpicalc
+
+mpicalc_SOURCES = mpicalc.c
+
+LDADD = -L ../cipher -L ../mpi -L ../util -lcipher -lmpi -lutil
+mkinstalldirs = $(top_srcdir)/scripts/mkinstalldirs
+CONFIG_HEADER = ../config.h
+PROGRAMS = $(bin_PROGRAMS)
+
+
+CC = @CC@
+LEX = @LEX@
+YACC = @YACC@
+
+DEFS = @DEFS@ -I. -I$(srcdir) -I..
+CPPFLAGS = @CPPFLAGS@
+CFLAGS = @CFLAGS@
+LDFLAGS = @LDFLAGS@
+LIBS = @LIBS@
+
+COMPILE = $(CC) -c $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS)
+LINK = $(CC) $(LDFLAGS) -o $@
+mpicalc_OBJECTS = mpicalc.o
+EXTRA_mpicalc_SOURCES =
+mpicalc_LDADD = $(LDADD)
+DIST_COMMON = Makefile.am Makefile.in
+
+
+PACKAGE = @PACKAGE@
+VERSION = @VERSION@
+
+DISTFILES = $(DIST_COMMON) $(SOURCES) $(BUILT_SOURCES) $(HEADERS) \
+ $(TEXINFOS) $(INFOS) $(MANS) $(EXTRA_DIST) $(DATA)
+DEP_DISTFILES = $(DIST_COMMON) $(SOURCES) $(BUILT_SOURCES) $(HEADERS) \
+ $(TEXINFOS) $(INFO_DEPS) $(MANS) $(EXTRA_DIST) $(DATA)
+
+TAR = tar
+DEP_FILES = $(srcdir)/.deps/mpicalc.P
+SOURCES = $(mpicalc_SOURCES)
+OBJECTS = $(mpicalc_OBJECTS)
+
+default: all
+
+
+$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in
+ cd $(top_srcdir) && automake $(subdir)/Makefile
+
+Makefile: $(top_builddir)/config.status Makefile.in
+ cd $(top_builddir) && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= ./config.status
+
+mostlyclean-binPROGRAMS:
+
+clean-binPROGRAMS:
+ rm -f $(bin_PROGRAMS)
+
+distclean-binPROGRAMS:
+
+maintainer-clean-binPROGRAMS:
+
+install-binPROGRAMS: $(bin_PROGRAMS)
+ $(mkinstalldirs) $(bindir)
+ list="$(bin_PROGRAMS)"; for p in $$list; do \
+ if test -f $$p; then \
+ $(INSTALL_PROGRAM) $$p $(bindir)/`echo $$p|sed '$(transform)'`; \
+ else :; fi; \
+ done
+
+uninstall-binPROGRAMS:
+ list="$(bin_PROGRAMS)"; for p in $$list; do \
+ rm -f $(bindir)/`echo $$p|sed '$(transform)'`; \
+ done
+
+.c.o:
+ $(COMPILE) $<
+
+mostlyclean-compile:
+ rm -f *.o core
+
+clean-compile:
+
+distclean-compile:
+ rm -f *.tab.c
+
+maintainer-clean-compile:
+$(mpicalc_OBJECTS): ../config.h
+
+mpicalc: $(mpicalc_OBJECTS) $(mpicalc_DEPENDENCIES)
+ $(LINK) $(mpicalc_OBJECTS) $(mpicalc_LDADD) $(LIBS)
+
+ID: $(HEADERS) $(SOURCES)
+ here=`pwd` && cd $(srcdir) && mkid -f$$here/ID $(SOURCES) $(HEADERS)
+
+tags: TAGS
+
+TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES)
+ here=`pwd` && cd $(srcdir) && etags $(ETAGS_ARGS) $(SOURCES) $(HEADERS) -o $$here/TAGS
+
+mostlyclean-tags:
+
+clean-tags:
+
+distclean-tags:
+ rm -f TAGS ID
+
+maintainer-clean-tags:
+
+subdir = tools
+distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)
+distdir: $(DEP_DISTFILES)
+ @for file in `cd $(srcdir) && echo $(DISTFILES)`; do \
+ test -f $(distdir)/$$file \
+ || ln $(srcdir)/$$file $(distdir)/$$file 2> /dev/null \
+ || cp -p $(srcdir)/$$file $(distdir)/$$file; \
+ done
+
+# This fragment is probably only useful for maintainers. It relies on
+# GNU make and gcc. It is only included in the generated Makefile.in
+# if `automake' is not passed the `--include-deps' flag.
+
+MKDEP = gcc -MM $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS)
+
+-include $(srcdir)/.deps/.P
+$(srcdir)/.deps/.P: $(BUILT_SOURCES)
+ cd $(srcdir) && test -d .deps || mkdir .deps
+ echo > $@
+
+-include $(DEP_FILES)
+$(DEP_FILES): $(srcdir)/.deps/.P
+
+$(srcdir)/.deps/%.P: $(srcdir)/%.c
+ @echo "mkdeps $< > $@"
+ @re=`echo 's,^$(srcdir)//*,,g;s, $(srcdir)//*, ,g' | sed 's,\.,\\\\.,g'`; \
+ $(MKDEP) $< | sed "$$re" > $@-tmp
+ @if test -n "$o"; then \
+ sed 's/\.o:/$$o:/' $@-tmp > $@; \
+ rm $@-tmp; \
+ else \
+ mv $@-tmp $@; \
+ fi
+
+# End of maintainer-only section
+info:
+
+dvi:
+
+check: all
+
+installcheck:
+
+install-exec: install-binPROGRAMS
+
+install-data:
+
+install: install-exec install-data all
+ @:
+
+uninstall: uninstall-binPROGRAMS
+
+all: $(PROGRAMS) Makefile
+
+install-strip:
+ $(MAKE) INSTALL_PROGRAM='$(INSTALL_PROGRAM) -s' install
+installdirs:
+ $(mkinstalldirs) $(bindir)
+
+
+mostlyclean-generic:
+ test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES)
+
+clean-generic:
+ test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+ rm -f Makefile $(DISTCLEANFILES)
+ rm -f config.cache config.log $(CONFIG_HEADER) stamp-h
+
+maintainer-clean-generic:
+ test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
+ test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
+mostlyclean: mostlyclean-binPROGRAMS mostlyclean-compile \
+ mostlyclean-tags mostlyclean-generic
+
+clean: clean-binPROGRAMS clean-compile clean-tags clean-generic \
+ mostlyclean
+
+distclean: distclean-binPROGRAMS distclean-compile distclean-tags \
+ distclean-generic clean
+ rm -f config.status
+
+maintainer-clean: maintainer-clean-binPROGRAMS maintainer-clean-compile \
+ maintainer-clean-tags maintainer-clean-generic \
+ distclean
+ @echo "This command is intended for maintainers to use;"
+ @echo "it deletes files that may require special tools to rebuild."
+
+.PHONY: default mostlyclean-binPROGRAMS distclean-binPROGRAMS \
+clean-binPROGRAMS maintainer-clean-binPROGRAMS uninstall-binPROGRAMS \
+install-binPROGRAMS mostlyclean-compile distclean-compile clean-compile \
+maintainer-clean-compile tags mostlyclean-tags distclean-tags \
+clean-tags maintainer-clean-tags distdir info dvi check installcheck \
+install-exec install-data install uninstall all installdirs \
+mostlyclean-generic distclean-generic clean-generic \
+maintainer-clean-generic clean mostlyclean distclean maintainer-clean
+
+.SUFFIXES:
+.SUFFIXES: .c .o
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/tools/bftest.c b/tools/bftest.c
new file mode 100644
index 000000000..bbfcd5dd1
--- /dev/null
+++ b/tools/bftest.c
@@ -0,0 +1,85 @@
+/* bftest.c - Blowfish test program
+ * Copyright (c) 1997 by Werner Koch (dd9jn)
+ *
+ * This file is part of G10.
+ *
+ * G10 is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * G10 is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
+ */
+
+#include <config.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "util.h"
+#include "blowfish.h"
+
+static void
+my_usage(void)
+{
+ fprintf(stderr, "usage: bftest [-e][-d] key\n");
+ exit(1);
+}
+
+const char *
+strusage( int level )
+{
+ return default_strusage(level);
+}
+
+int
+main(int argc, char **argv)
+{
+ int encode=0;
+ BLOWFISH_context ctx;
+ char buf[100];
+ char iv[BLOWFISH_BLOCKSIZE];
+ int n, size=8;
+
+ if( argc > 1 && !strcmp(argv[1], "-e") ) {
+ encode++;
+ argc--; argv++;
+ }
+ else if( argc > 1 && !strcmp(argv[1], "-E") ) {
+ encode++;
+ argc--; argv++;
+ size = 10;
+ }
+ else if( argc > 1 && !strcmp(argv[1], "-d") ) {
+ argc--; argv++;
+ }
+ else if( argc > 1 && !strcmp(argv[1], "-D") ) {
+ argc--; argv++;
+ size = 10;
+ }
+ if( argc != 2 )
+ my_usage();
+ argc--; argv++;
+
+ blowfish_setkey( &ctx, *argv, strlen(*argv) );
+ memset(iv,0, BLOWFISH_BLOCKSIZE);
+ blowfish_setiv( &ctx, iv );
+ while( (n = fread( buf, 1, size, stdin )) > 0 ) {
+ if( encode )
+ blowfish_encode_cfb( &ctx, buf, buf, n );
+ else
+ blowfish_decode_cfb( &ctx, buf, buf, n );
+ if( fwrite( buf, 1, n, stdout) != n )
+ log_fatal("write error\n");
+ }
+
+ return 0;
+}
+
diff --git a/tools/mpicalc.c b/tools/mpicalc.c
new file mode 100644
index 000000000..2402695d7
--- /dev/null
+++ b/tools/mpicalc.c
@@ -0,0 +1,341 @@
+/* mpitest.c - test the mpi functions
+ * Copyright (c) 1997 by Werner Koch (dd9jn)
+ *
+ * This is a RPN calculator; values must be given in hex.
+ * Operaion is like dc(1) except that the input/output radix is
+ * always 16 and you can use a '-' to prefix a negative number.
+ * Addition operators: ++ and --. All operators must be delimeted by a blank
+ *
+ *
+ * This file is part of G10.
+ *
+ * G10 is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * G10 is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
+ */
+
+#include <config.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <ctype.h>
+
+#include "util.h"
+#include "mpi.h"
+
+#define STACKSIZE 100
+static MPI stack[STACKSIZE];
+static int stackidx;
+
+
+const char *
+strusage( int level )
+{
+ const char *p;
+ switch( level ) {
+ case 10:
+ case 0: p = "mpicalc - v" VERSION "; "
+ "Copyright 1997 Werner Koch (dd9jn)" ; break;
+ case 13: p = "mpicalc"; break;
+ case 14: p = VERSION; break;
+ case 1:
+ case 11: p = "Usage: mpicalc (-h for help)";
+ break;
+ case 2:
+ case 12: p =
+ "\nSyntax: mpicalc [options] [files]\n"
+ "MPI RPN calculator\n";
+ break;
+ default: p = default_strusage(level);
+ }
+ return p;
+}
+
+
+static void
+do_add(void)
+{
+ if( stackidx < 2 ) {
+ fputs("stack underflow\n",stderr);
+ return;
+ }
+ mpi_add( stack[stackidx-2], stack[stackidx-2], stack[stackidx-1] );
+ stackidx--;
+}
+
+static void
+do_sub(void)
+{
+ if( stackidx < 2 ) {
+ fputs("stack underflow\n", stderr);
+ return;
+ }
+ mpi_sub( stack[stackidx-2], stack[stackidx-2], stack[stackidx-1] );
+ stackidx--;
+}
+
+static void
+do_inc(void)
+{
+ if( stackidx < 1 ) {
+ fputs("stack underflow\n", stderr);
+ return;
+ }
+ mpi_add_ui( stack[stackidx-1], stack[stackidx-1], 1 );
+}
+
+static void
+do_dec(void)
+{
+ if( stackidx < 1 ) {
+ fputs("stack underflow\n", stderr);
+ return;
+ }
+ /* mpi_sub_ui( stack[stackidx-1], stack[stackidx-1], 1 ); */
+}
+
+static void
+do_mul(void)
+{
+ if( stackidx < 2 ) {
+ fputs("stack underflow\n", stderr);
+ return;
+ }
+ mpi_mul( stack[stackidx-2], stack[stackidx-2], stack[stackidx-1] );
+ stackidx--;
+}
+
+static void
+do_div(void)
+{
+ if( stackidx < 2 ) {
+ fputs("stack underflow\n", stderr);
+ return;
+ }
+ mpi_fdiv_q( stack[stackidx-2], stack[stackidx-2], stack[stackidx-1] );
+ stackidx--;
+}
+
+static void
+do_rem(void)
+{
+ if( stackidx < 2 ) {
+ fputs("stack underflow\n", stderr);
+ return;
+ }
+ mpi_fdiv_r( stack[stackidx-2], stack[stackidx-2], stack[stackidx-1] );
+ stackidx--;
+}
+
+static void
+do_powm(void)
+{
+ MPI a;
+ if( stackidx < 3 ) {
+ fputs("stack underflow\n", stderr);
+ return;
+ }
+ a= mpi_alloc(10);
+ mpi_powm( a, stack[stackidx-3], stack[stackidx-2], stack[stackidx-1] );
+ mpi_free(stack[stackidx-3]);
+ stack[stackidx-3] = a;
+ stackidx -= 2;
+}
+
+static void
+do_inv(void)
+{
+ MPI a = mpi_alloc(40);
+ if( stackidx < 2 ) {
+ fputs("stack underflow\n", stderr);
+ return;
+ }
+ mpi_inv_mod( a, stack[stackidx-2], stack[stackidx-1] );
+ mpi_set(stack[stackidx-2],a);
+ mpi_free(a);
+ stackidx--;
+}
+
+static void
+do_gcd(void)
+{
+ MPI a = mpi_alloc(40);
+ if( stackidx < 2 ) {
+ fputs("stack underflow\n", stderr);
+ return;
+ }
+ mpi_gcd( a, stack[stackidx-2], stack[stackidx-1] );
+ mpi_set(stack[stackidx-2],a);
+ mpi_free(a);
+ stackidx--;
+}
+
+
+int
+main(int argc, char **argv)
+{
+ static ARGPARSE_OPTS opts[] = {
+ {0} };
+ ARGPARSE_ARGS pargs = { &argc, &argv, 0 };
+ int i, c;
+ int state = 0;
+ char strbuf[1000];
+ int stridx=0;
+
+ while( arg_parse( &pargs, opts) ) {
+ switch( pargs.r_opt ) {
+ default : pargs.err = 2; break;
+ }
+ }
+ if( argc )
+ usage(1);
+
+
+ for(i=0; i < STACKSIZE; i++ )
+ stack[i] = NULL;
+ stackidx =0;
+
+ while( (c=getc(stdin)) != EOF ) {
+ if( !state ) { /* waiting */
+ if( isdigit(c) || (c >='A' && c <= 'F') ) {
+ state = 1;
+ ungetc(c, stdin);
+ strbuf[0] = '0';
+ strbuf[1] = 'x';
+ stridx=2;
+ }
+ else if( isspace(c) )
+ ;
+ else {
+ switch(c) {
+ case '+':
+ if( (c=getc(stdin)) == '+' )
+ do_inc();
+ else {
+ ungetc(c, stdin);
+ do_add();
+ }
+ break;
+ case '-':
+ if( (c=getc(stdin)) == '-' )
+ do_dec();
+ else if( isdigit(c) || (c >='A' && c <= 'F') ) {
+ state = 1;
+ ungetc(c, stdin);
+ strbuf[0] = '-';
+ strbuf[1] = '0';
+ strbuf[2] = 'x';
+ stridx=3;
+ }
+ else {
+ ungetc(c, stdin);
+ do_sub();
+ }
+ break;
+ case '*':
+ do_mul();
+ break;
+ case '/':
+ do_div();
+ break;
+ case '%':
+ do_rem();
+ break;
+ case '^':
+ do_powm();
+ break;
+ case 'I':
+ do_inv();
+ break;
+ case 'G':
+ do_gcd();
+ break;
+ case 'i': /* dummy */
+ if( !stackidx )
+ fputs("stack underflow\n", stderr);
+ else {
+ mpi_free(stack[stackidx-1]);
+ stackidx--;
+ }
+ break;
+ case 'd': /* duplicate the tos */
+ if( !stackidx )
+ fputs("stack underflow\n", stderr);
+ else if( stackidx < STACKSIZE ) {
+ mpi_free(stack[stackidx]);
+ stack[stackidx] = mpi_copy( stack[stackidx-1] );
+ stackidx++;
+ }
+ else
+ fputs("stack overflow\n", stderr);
+ break;
+ case 'c':
+ for(i=0; i < stackidx; i++ )
+ mpi_free(stack[i]), stack[i] = NULL;
+ stackidx = 0;
+ break;
+ case 'p': /* print the tos */
+ if( !stackidx )
+ puts("stack is empty");
+ else {
+ mpi_print(stdout, stack[stackidx-1], 1 );
+ putchar('\n');
+ }
+ break;
+ case 'f': /* print the stack */
+ for( i = stackidx-1 ; i >= 0; i-- ) {
+ printf("[%2d]: ", i );
+ mpi_print(stdout, stack[i], 1 );
+ putchar('\n');
+ }
+ break;
+ default:
+ fputs("invalid operator\n", stderr);
+ }
+ }
+ }
+ else if( state == 1 ) { /* in a number */
+ if( !(isdigit(c) || (c >='A' && c <= 'F')) ) { /* store the number */
+ state = 0;
+ ungetc(c, stdin);
+ if( stridx < 1000 )
+ strbuf[stridx] = 0;
+
+ if( stackidx < STACKSIZE ) {
+ if( !stack[stackidx] )
+ stack[stackidx] = mpi_alloc(10);
+ if( mpi_fromstr(stack[stackidx], strbuf) )
+ fputs("invalid number\n", stderr);
+ else
+ stackidx++;
+ }
+ else
+ fputs("stack overflow\n", stderr);
+ }
+ else { /* store digit */
+ if( stridx < 999 )
+ strbuf[stridx++] = c;
+ else if( stridx == 999 ) {
+ strbuf[stridx] = 0;
+ fputs("string too large - truncated\n", stderr);
+ stridx++;
+ }
+ }
+ }
+
+ }
+ for(i=0; i < stackidx; i++ )
+ mpi_free(stack[i]);
+ return 0;
+}
+
+
diff --git a/tools/primes.scm b/tools/primes.scm
new file mode 100644
index 000000000..0772cdcf9
--- /dev/null
+++ b/tools/primes.scm
@@ -0,0 +1,31 @@
+(define (prime? n)
+ (define (smallest-divisor n)
+ (find-divisor n 2))
+ (define (find-divisor n test)
+ (cond ((> (square test) n) n)
+ ((divides? test n) test)
+ (else (find-divisor n (+ test 1)))))
+ (define (divides? a b)
+ (= (remainder b a) 0))
+ (define (square n)
+ (* n n))
+ (= n (smallest-divisor n)))
+
+(define count 0)
+
+
+
+(define (display-prime n)
+ (display n)
+ (display ", ")
+ (cond ((> count 8) (display "\n") (let count 0))
+ (else (define count (+ count 1)))))
+
+
+(define (primes n limit)
+ (if (prime? n)
+ (display-prime n) )
+ (if (< n limit)
+ (primes (+ n 1) limit)) )
+
+(primes 3 5000)