mirror of
https://codeberg.org/scip/pcp.git
synced 2025-12-17 20:00:58 +01:00
initial commit
This commit is contained in:
17
tests/Makefile.am
Normal file
17
tests/Makefile.am
Normal file
@@ -0,0 +1,17 @@
|
||||
|
||||
AM_CFLAGS = -I../libpcp -Wall -g
|
||||
check_PROGRAMS = col invalidkeys
|
||||
|
||||
col_LDADD = ../libpcp/.libs/libpcp1.a
|
||||
col_SOURCES = collisions.c
|
||||
|
||||
invalidkeys_LDADD = ../libpcp/.libs/libpcp1.a ../src/keyprint.o
|
||||
invalidkeys_SOURCES = invalidkeys.c
|
||||
AM_CPPFLAGS = -I$(top_builddir)/src
|
||||
|
||||
|
||||
test: check
|
||||
./unittests.pl unittests.cfg
|
||||
|
||||
stresstest: check
|
||||
./unittests.pl stresstests.cfg
|
||||
529
tests/Makefile.in
Normal file
529
tests/Makefile.in
Normal file
@@ -0,0 +1,529 @@
|
||||
# Makefile.in generated by automake 1.12.4 from Makefile.am.
|
||||
# @configure_input@
|
||||
|
||||
# Copyright (C) 1994-2012 Free Software Foundation, Inc.
|
||||
|
||||
# This Makefile.in is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
# with or without modifications, as long as this notice is preserved.
|
||||
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
|
||||
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
||||
# PARTICULAR PURPOSE.
|
||||
|
||||
@SET_MAKE@
|
||||
VPATH = @srcdir@
|
||||
am__make_dryrun = \
|
||||
{ \
|
||||
am__dry=no; \
|
||||
case $$MAKEFLAGS in \
|
||||
*\\[\ \ ]*) \
|
||||
echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \
|
||||
| grep '^AM OK$$' >/dev/null || am__dry=yes;; \
|
||||
*) \
|
||||
for am__flg in $$MAKEFLAGS; do \
|
||||
case $$am__flg in \
|
||||
*=*|--*) ;; \
|
||||
*n*) am__dry=yes; break;; \
|
||||
esac; \
|
||||
done;; \
|
||||
esac; \
|
||||
test $$am__dry = yes; \
|
||||
}
|
||||
pkgdatadir = $(datadir)/@PACKAGE@
|
||||
pkgincludedir = $(includedir)/@PACKAGE@
|
||||
pkglibdir = $(libdir)/@PACKAGE@
|
||||
pkglibexecdir = $(libexecdir)/@PACKAGE@
|
||||
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
|
||||
install_sh_DATA = $(install_sh) -c -m 644
|
||||
install_sh_PROGRAM = $(install_sh) -c
|
||||
install_sh_SCRIPT = $(install_sh) -c
|
||||
INSTALL_HEADER = $(INSTALL_DATA)
|
||||
transform = $(program_transform_name)
|
||||
NORMAL_INSTALL = :
|
||||
PRE_INSTALL = :
|
||||
POST_INSTALL = :
|
||||
NORMAL_UNINSTALL = :
|
||||
PRE_UNINSTALL = :
|
||||
POST_UNINSTALL = :
|
||||
build_triplet = @build@
|
||||
host_triplet = @host@
|
||||
check_PROGRAMS = col$(EXEEXT) invalidkeys$(EXEEXT)
|
||||
subdir = tests
|
||||
DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
|
||||
$(top_srcdir)/config/depcomp
|
||||
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
|
||||
am__aclocal_m4_deps = $(top_srcdir)/config/libtool.m4 \
|
||||
$(top_srcdir)/config/ltoptions.m4 \
|
||||
$(top_srcdir)/config/ltsugar.m4 \
|
||||
$(top_srcdir)/config/ltversion.m4 \
|
||||
$(top_srcdir)/config/lt~obsolete.m4 $(top_srcdir)/configure.ac
|
||||
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
|
||||
$(ACLOCAL_M4)
|
||||
mkinstalldirs = $(install_sh) -d
|
||||
CONFIG_HEADER = $(top_builddir)/libpcp/config.h
|
||||
CONFIG_CLEAN_FILES =
|
||||
CONFIG_CLEAN_VPATH_FILES =
|
||||
am_col_OBJECTS = collisions.$(OBJEXT)
|
||||
col_OBJECTS = $(am_col_OBJECTS)
|
||||
col_DEPENDENCIES = ../libpcp/.libs/libpcp1.a
|
||||
am_invalidkeys_OBJECTS = invalidkeys.$(OBJEXT)
|
||||
invalidkeys_OBJECTS = $(am_invalidkeys_OBJECTS)
|
||||
invalidkeys_DEPENDENCIES = ../libpcp/.libs/libpcp1.a ../src/keyprint.o
|
||||
DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/libpcp
|
||||
depcomp = $(SHELL) $(top_srcdir)/config/depcomp
|
||||
am__depfiles_maybe = depfiles
|
||||
am__mv = mv -f
|
||||
COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
|
||||
$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
|
||||
LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
|
||||
--mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
|
||||
$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
|
||||
CCLD = $(CC)
|
||||
LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
|
||||
--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
|
||||
$(LDFLAGS) -o $@
|
||||
SOURCES = $(col_SOURCES) $(invalidkeys_SOURCES)
|
||||
DIST_SOURCES = $(col_SOURCES) $(invalidkeys_SOURCES)
|
||||
am__can_run_installinfo = \
|
||||
case $$AM_UPDATE_INFO_DIR in \
|
||||
n|no|NO) false;; \
|
||||
*) (install-info --version) >/dev/null 2>&1;; \
|
||||
esac
|
||||
ETAGS = etags
|
||||
CTAGS = ctags
|
||||
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
|
||||
ACLOCAL = @ACLOCAL@
|
||||
AMTAR = @AMTAR@
|
||||
AR = @AR@
|
||||
AUTOCONF = @AUTOCONF@
|
||||
AUTOHEADER = @AUTOHEADER@
|
||||
AUTOMAKE = @AUTOMAKE@
|
||||
AWK = @AWK@
|
||||
CC = @CC@
|
||||
CCDEPMODE = @CCDEPMODE@
|
||||
CFLAGS = @CFLAGS@
|
||||
CPP = @CPP@
|
||||
CPPFLAGS = @CPPFLAGS@
|
||||
CYGPATH_W = @CYGPATH_W@
|
||||
DEFS = @DEFS@
|
||||
DEPDIR = @DEPDIR@
|
||||
DLLTOOL = @DLLTOOL@
|
||||
DSYMUTIL = @DSYMUTIL@
|
||||
DUMPBIN = @DUMPBIN@
|
||||
ECHO_C = @ECHO_C@
|
||||
ECHO_N = @ECHO_N@
|
||||
ECHO_T = @ECHO_T@
|
||||
EGREP = @EGREP@
|
||||
EXEEXT = @EXEEXT@
|
||||
FGREP = @FGREP@
|
||||
GREP = @GREP@
|
||||
INSTALL = @INSTALL@
|
||||
INSTALL_DATA = @INSTALL_DATA@
|
||||
INSTALL_PROGRAM = @INSTALL_PROGRAM@
|
||||
INSTALL_SCRIPT = @INSTALL_SCRIPT@
|
||||
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
|
||||
LD = @LD@
|
||||
LDFLAGS = @LDFLAGS@
|
||||
LIBOBJS = @LIBOBJS@
|
||||
LIBS = @LIBS@
|
||||
LIBTOOL = @LIBTOOL@
|
||||
LIPO = @LIPO@
|
||||
LN_S = @LN_S@
|
||||
LTLIBOBJS = @LTLIBOBJS@
|
||||
MAKEINFO = @MAKEINFO@
|
||||
MANIFEST_TOOL = @MANIFEST_TOOL@
|
||||
MKDIR_P = @MKDIR_P@
|
||||
NM = @NM@
|
||||
NMEDIT = @NMEDIT@
|
||||
OBJDUMP = @OBJDUMP@
|
||||
OBJEXT = @OBJEXT@
|
||||
OTOOL = @OTOOL@
|
||||
OTOOL64 = @OTOOL64@
|
||||
PACKAGE = @PACKAGE@
|
||||
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
|
||||
PACKAGE_NAME = @PACKAGE_NAME@
|
||||
PACKAGE_STRING = @PACKAGE_STRING@
|
||||
PACKAGE_TARNAME = @PACKAGE_TARNAME@
|
||||
PACKAGE_URL = @PACKAGE_URL@
|
||||
PACKAGE_VERSION = @PACKAGE_VERSION@
|
||||
PATH_SEPARATOR = @PATH_SEPARATOR@
|
||||
RANLIB = @RANLIB@
|
||||
SED = @SED@
|
||||
SET_MAKE = @SET_MAKE@
|
||||
SHELL = @SHELL@
|
||||
STRIP = @STRIP@
|
||||
VERSION = @VERSION@
|
||||
abs_builddir = @abs_builddir@
|
||||
abs_srcdir = @abs_srcdir@
|
||||
abs_top_builddir = @abs_top_builddir@
|
||||
abs_top_srcdir = @abs_top_srcdir@
|
||||
ac_ct_AR = @ac_ct_AR@
|
||||
ac_ct_CC = @ac_ct_CC@
|
||||
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
|
||||
am__include = @am__include@
|
||||
am__leading_dot = @am__leading_dot@
|
||||
am__quote = @am__quote@
|
||||
am__tar = @am__tar@
|
||||
am__untar = @am__untar@
|
||||
bindir = @bindir@
|
||||
build = @build@
|
||||
build_alias = @build_alias@
|
||||
build_cpu = @build_cpu@
|
||||
build_os = @build_os@
|
||||
build_vendor = @build_vendor@
|
||||
builddir = @builddir@
|
||||
datadir = @datadir@
|
||||
datarootdir = @datarootdir@
|
||||
docdir = @docdir@
|
||||
dvidir = @dvidir@
|
||||
exec_prefix = @exec_prefix@
|
||||
host = @host@
|
||||
host_alias = @host_alias@
|
||||
host_cpu = @host_cpu@
|
||||
host_os = @host_os@
|
||||
host_vendor = @host_vendor@
|
||||
htmldir = @htmldir@
|
||||
includedir = @includedir@
|
||||
infodir = @infodir@
|
||||
install_sh = @install_sh@
|
||||
libdir = @libdir@
|
||||
libexecdir = @libexecdir@
|
||||
localedir = @localedir@
|
||||
localstatedir = @localstatedir@
|
||||
mandir = @mandir@
|
||||
mkdir_p = @mkdir_p@
|
||||
oldincludedir = @oldincludedir@
|
||||
pdfdir = @pdfdir@
|
||||
prefix = @prefix@
|
||||
program_transform_name = @program_transform_name@
|
||||
psdir = @psdir@
|
||||
sbindir = @sbindir@
|
||||
sharedstatedir = @sharedstatedir@
|
||||
srcdir = @srcdir@
|
||||
sysconfdir = @sysconfdir@
|
||||
target_alias = @target_alias@
|
||||
top_build_prefix = @top_build_prefix@
|
||||
top_builddir = @top_builddir@
|
||||
top_srcdir = @top_srcdir@
|
||||
AM_CFLAGS = -I../libpcp -Wall -g
|
||||
col_LDADD = ../libpcp/.libs/libpcp1.a
|
||||
col_SOURCES = collisions.c
|
||||
invalidkeys_LDADD = ../libpcp/.libs/libpcp1.a ../src/keyprint.o
|
||||
invalidkeys_SOURCES = invalidkeys.c
|
||||
AM_CPPFLAGS = -I$(top_builddir)/src
|
||||
all: all-am
|
||||
|
||||
.SUFFIXES:
|
||||
.SUFFIXES: .c .lo .o .obj
|
||||
$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
|
||||
@for dep in $?; do \
|
||||
case '$(am__configure_deps)' in \
|
||||
*$$dep*) \
|
||||
( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
|
||||
&& { if test -f $@; then exit 0; else break; fi; }; \
|
||||
exit 1;; \
|
||||
esac; \
|
||||
done; \
|
||||
echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tests/Makefile'; \
|
||||
$(am__cd) $(top_srcdir) && \
|
||||
$(AUTOMAKE) --gnu tests/Makefile
|
||||
.PRECIOUS: Makefile
|
||||
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
|
||||
@case '$?' in \
|
||||
*config.status*) \
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
|
||||
*) \
|
||||
echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
|
||||
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
|
||||
esac;
|
||||
|
||||
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
||||
|
||||
$(top_srcdir)/configure: $(am__configure_deps)
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
||||
$(ACLOCAL_M4): $(am__aclocal_m4_deps)
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
||||
$(am__aclocal_m4_deps):
|
||||
|
||||
clean-checkPROGRAMS:
|
||||
@list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \
|
||||
echo " rm -f" $$list; \
|
||||
rm -f $$list || exit $$?; \
|
||||
test -n "$(EXEEXT)" || exit 0; \
|
||||
list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
|
||||
echo " rm -f" $$list; \
|
||||
rm -f $$list
|
||||
col$(EXEEXT): $(col_OBJECTS) $(col_DEPENDENCIES) $(EXTRA_col_DEPENDENCIES)
|
||||
@rm -f col$(EXEEXT)
|
||||
$(LINK) $(col_OBJECTS) $(col_LDADD) $(LIBS)
|
||||
invalidkeys$(EXEEXT): $(invalidkeys_OBJECTS) $(invalidkeys_DEPENDENCIES) $(EXTRA_invalidkeys_DEPENDENCIES)
|
||||
@rm -f invalidkeys$(EXEEXT)
|
||||
$(LINK) $(invalidkeys_OBJECTS) $(invalidkeys_LDADD) $(LIBS)
|
||||
|
||||
mostlyclean-compile:
|
||||
-rm -f *.$(OBJEXT)
|
||||
|
||||
distclean-compile:
|
||||
-rm -f *.tab.c
|
||||
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/collisions.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/invalidkeys.Po@am__quote@
|
||||
|
||||
.c.o:
|
||||
@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
|
||||
@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCC_FALSE@ $(COMPILE) -c $<
|
||||
|
||||
.c.obj:
|
||||
@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
|
||||
@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
|
||||
|
||||
.c.lo:
|
||||
@am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
|
||||
@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
|
||||
|
||||
mostlyclean-libtool:
|
||||
-rm -f *.lo
|
||||
|
||||
clean-libtool:
|
||||
-rm -rf .libs _libs
|
||||
|
||||
ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
|
||||
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
|
||||
unique=`for i in $$list; do \
|
||||
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
||||
done | \
|
||||
$(AWK) '{ files[$$0] = 1; nonempty = 1; } \
|
||||
END { if (nonempty) { for (i in files) print i; }; }'`; \
|
||||
mkid -fID $$unique
|
||||
tags: TAGS
|
||||
|
||||
TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
|
||||
$(TAGS_FILES) $(LISP)
|
||||
set x; \
|
||||
here=`pwd`; \
|
||||
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
|
||||
unique=`for i in $$list; do \
|
||||
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
||||
done | \
|
||||
$(AWK) '{ files[$$0] = 1; nonempty = 1; } \
|
||||
END { if (nonempty) { for (i in files) print i; }; }'`; \
|
||||
shift; \
|
||||
if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
|
||||
test -n "$$unique" || unique=$$empty_fix; \
|
||||
if test $$# -gt 0; then \
|
||||
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
|
||||
"$$@" $$unique; \
|
||||
else \
|
||||
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
|
||||
$$unique; \
|
||||
fi; \
|
||||
fi
|
||||
ctags: CTAGS
|
||||
CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
|
||||
$(TAGS_FILES) $(LISP)
|
||||
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
|
||||
unique=`for i in $$list; do \
|
||||
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
||||
done | \
|
||||
$(AWK) '{ files[$$0] = 1; nonempty = 1; } \
|
||||
END { if (nonempty) { for (i in files) print i; }; }'`; \
|
||||
test -z "$(CTAGS_ARGS)$$unique" \
|
||||
|| $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
|
||||
$$unique
|
||||
|
||||
GTAGS:
|
||||
here=`$(am__cd) $(top_builddir) && pwd` \
|
||||
&& $(am__cd) $(top_srcdir) \
|
||||
&& gtags -i $(GTAGS_ARGS) "$$here"
|
||||
|
||||
cscopelist: $(HEADERS) $(SOURCES) $(LISP)
|
||||
list='$(SOURCES) $(HEADERS) $(LISP)'; \
|
||||
case "$(srcdir)" in \
|
||||
[\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
|
||||
*) sdir=$(subdir)/$(srcdir) ;; \
|
||||
esac; \
|
||||
for i in $$list; do \
|
||||
if test -f "$$i"; then \
|
||||
echo "$(subdir)/$$i"; \
|
||||
else \
|
||||
echo "$$sdir/$$i"; \
|
||||
fi; \
|
||||
done >> $(top_builddir)/cscope.files
|
||||
|
||||
distclean-tags:
|
||||
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
|
||||
|
||||
distdir: $(DISTFILES)
|
||||
@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
|
||||
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
|
||||
list='$(DISTFILES)'; \
|
||||
dist_files=`for file in $$list; do echo $$file; done | \
|
||||
sed -e "s|^$$srcdirstrip/||;t" \
|
||||
-e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
|
||||
case $$dist_files in \
|
||||
*/*) $(MKDIR_P) `echo "$$dist_files" | \
|
||||
sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
|
||||
sort -u` ;; \
|
||||
esac; \
|
||||
for file in $$dist_files; do \
|
||||
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
|
||||
if test -d $$d/$$file; then \
|
||||
dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
|
||||
if test -d "$(distdir)/$$file"; then \
|
||||
find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
|
||||
fi; \
|
||||
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
|
||||
cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
|
||||
find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
|
||||
fi; \
|
||||
cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
|
||||
else \
|
||||
test -f "$(distdir)/$$file" \
|
||||
|| cp -p $$d/$$file "$(distdir)/$$file" \
|
||||
|| exit 1; \
|
||||
fi; \
|
||||
done
|
||||
check-am: all-am
|
||||
$(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS)
|
||||
check: check-am
|
||||
all-am: Makefile
|
||||
installdirs:
|
||||
install: install-am
|
||||
install-exec: install-exec-am
|
||||
install-data: install-data-am
|
||||
uninstall: uninstall-am
|
||||
|
||||
install-am: all-am
|
||||
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
|
||||
|
||||
installcheck: installcheck-am
|
||||
install-strip:
|
||||
if test -z '$(STRIP)'; then \
|
||||
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
|
||||
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
|
||||
install; \
|
||||
else \
|
||||
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
|
||||
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
|
||||
"INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
|
||||
fi
|
||||
mostlyclean-generic:
|
||||
|
||||
clean-generic:
|
||||
|
||||
distclean-generic:
|
||||
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
|
||||
-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
|
||||
|
||||
maintainer-clean-generic:
|
||||
@echo "This command is intended for maintainers to use"
|
||||
@echo "it deletes files that may require special tools to rebuild."
|
||||
clean: clean-am
|
||||
|
||||
clean-am: clean-checkPROGRAMS clean-generic clean-libtool \
|
||||
mostlyclean-am
|
||||
|
||||
distclean: distclean-am
|
||||
-rm -rf ./$(DEPDIR)
|
||||
-rm -f Makefile
|
||||
distclean-am: clean-am distclean-compile distclean-generic \
|
||||
distclean-tags
|
||||
|
||||
dvi: dvi-am
|
||||
|
||||
dvi-am:
|
||||
|
||||
html: html-am
|
||||
|
||||
html-am:
|
||||
|
||||
info: info-am
|
||||
|
||||
info-am:
|
||||
|
||||
install-data-am:
|
||||
|
||||
install-dvi: install-dvi-am
|
||||
|
||||
install-dvi-am:
|
||||
|
||||
install-exec-am:
|
||||
|
||||
install-html: install-html-am
|
||||
|
||||
install-html-am:
|
||||
|
||||
install-info: install-info-am
|
||||
|
||||
install-info-am:
|
||||
|
||||
install-man:
|
||||
|
||||
install-pdf: install-pdf-am
|
||||
|
||||
install-pdf-am:
|
||||
|
||||
install-ps: install-ps-am
|
||||
|
||||
install-ps-am:
|
||||
|
||||
installcheck-am:
|
||||
|
||||
maintainer-clean: maintainer-clean-am
|
||||
-rm -rf ./$(DEPDIR)
|
||||
-rm -f Makefile
|
||||
maintainer-clean-am: distclean-am maintainer-clean-generic
|
||||
|
||||
mostlyclean: mostlyclean-am
|
||||
|
||||
mostlyclean-am: mostlyclean-compile mostlyclean-generic \
|
||||
mostlyclean-libtool
|
||||
|
||||
pdf: pdf-am
|
||||
|
||||
pdf-am:
|
||||
|
||||
ps: ps-am
|
||||
|
||||
ps-am:
|
||||
|
||||
uninstall-am:
|
||||
|
||||
.MAKE: check-am install-am install-strip
|
||||
|
||||
.PHONY: CTAGS GTAGS all all-am check check-am clean \
|
||||
clean-checkPROGRAMS clean-generic clean-libtool cscopelist \
|
||||
ctags distclean distclean-compile distclean-generic \
|
||||
distclean-libtool distclean-tags distdir dvi dvi-am html \
|
||||
html-am info info-am install install-am install-data \
|
||||
install-data-am install-dvi install-dvi-am install-exec \
|
||||
install-exec-am install-html install-html-am install-info \
|
||||
install-info-am install-man install-pdf install-pdf-am \
|
||||
install-ps install-ps-am install-strip installcheck \
|
||||
installcheck-am installdirs maintainer-clean \
|
||||
maintainer-clean-generic mostlyclean mostlyclean-compile \
|
||||
mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
|
||||
tags uninstall uninstall-am
|
||||
|
||||
|
||||
test: check
|
||||
./unittests.pl unittests.cfg
|
||||
|
||||
stresstest: check
|
||||
./unittests.pl stresstests.cfg
|
||||
|
||||
# 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:
|
||||
7
tests/README
Normal file
7
tests/README
Normal file
@@ -0,0 +1,7 @@
|
||||
Unittests fpr PCP.
|
||||
|
||||
Execute 'make test' here or from the top level directory
|
||||
to run the unit tests. Usually all tests shall succeed.
|
||||
|
||||
Execute 'make stresstest' to run a longer stresstest. It
|
||||
generates lots of keys and takes some time.
|
||||
36
tests/bart.pub
Normal file
36
tests/bart.pub
Normal file
@@ -0,0 +1,36 @@
|
||||
----- BEGIN PCP PUBLIC KEY -----
|
||||
Generated by: Pretty Curved Privacy Version 0.0.1
|
||||
Cipher: CURVE25519-ED25519-SALSA20-POLY1305
|
||||
Owner: Bart Simpson
|
||||
Mail: bart@springfield.com
|
||||
Key-ID: 0x0E4512BE47CE0215
|
||||
Public-Key: 1aHE2mHljT-}lCf(GM(ln.9(?}t9H+[c{$q!@$oEz#Y>r
|
||||
Creation Time: 2013-10-26T13:37:27
|
||||
Checksum: BA:10:B7:CC:79:C0:69:8E:F0:A8:4D:55:12:C2:E5:7E
|
||||
47:62:7D:C2:02:9C:3D:48:04:1B:5D:7D:5D:32:F4:7F
|
||||
Serial Number: 0xEE894128
|
||||
Key Version: 0x00000001
|
||||
Random Art ID: +----------------+
|
||||
| .....+. |
|
||||
| . . . ..o |
|
||||
| = . .. |
|
||||
| . . . |
|
||||
| . . |
|
||||
| . . |
|
||||
| . . |
|
||||
| . |
|
||||
+----------------+
|
||||
|
||||
1aHE2mHljT-}lCf(GM(ln.9(?}t9H+[c{$q!@$oEA6^#NBrBH@ze:Mmzufpo4k$0>0tKr<c
|
||||
ml<>NX[qmVTCVdi{Oj?f?+29S.w#wHF%}n{&GkBA/lw=8yME/LjO^XMUJDv=I(6a.%-r*X-
|
||||
nVZS)=f1GiY1V.hvq5?tBcAiYKH#*pp546$pyhduq2JhXQ#k{Mmev}tUBwGyx/MI1pq=W)w
|
||||
Cfij1g&pb+I98{>Y)72o6jtL0MDI27TeNgbiN6w+!=nBEx=?AL$.ZsyYkIa.2L*zPrShDR@
|
||||
?BZtx>qfH{ixW!)Sv0A-inF}(Y:^n>hp+G:gD&=G37x2]*xw)[SEK-a(olso31TnwYEC3a[
|
||||
Ss[wvvQTq0kYZ)+x(mM}x>q9>e[n*p0o9!*Pm8krDv@GqlEix{bt>?K.A!r(MY4CgvkVcT9
|
||||
asOUmVLwwPdupK}HBUY=uU5P>53ncmJ+QsH8Uy#gkI}vlm#0HIC+J2pM&4.B%^!FV?UoRnL
|
||||
EMA}1QbPI/ju0S3V$uJz^?$ugF?PEDvtPbK)!SfA$?.1Sa2T.&:.^va>^hnVya0Gz%4{7f:
|
||||
Zmst}k&sL.7@]blr*deC[lst2ayum}V-z+6PaM1soAVxbisyY/!w(AF:Z7*vzjI5nKwtPW0
|
||||
-Xm&ovi4NDTe/sCvT&jISh>UtWeB?8$C)S]>fhSrnmkM>Rgd1z^h:Z1/gbgS^RGY1PqucW%
|
||||
0096104pc&)GiZV)[2M%DD:?sR{-Um:2%<GqJKWnh<HzAViL)5A3VyH1v1M:[m++wfOUH.a
|
||||
q}SXc(EQlWd[?K1$t4gf8$$L
|
||||
------ END PCP PUBLICKEY ------
|
||||
32
tests/check-collisions.sh
Executable file
32
tests/check-collisions.sh
Executable file
@@ -0,0 +1,32 @@
|
||||
#!/bin/sh
|
||||
|
||||
rounds=$1
|
||||
|
||||
if test -z "$rounds"; then
|
||||
rounds=10
|
||||
fi
|
||||
|
||||
make check
|
||||
|
||||
log="collisions.log"
|
||||
name=""
|
||||
echo "Checking collisions for hash algorithms with ${rounds} rounds:" > $log
|
||||
|
||||
for hash in c o f d s; do
|
||||
case $hash in
|
||||
o) name="OAT";;
|
||||
c) name="CRC";;
|
||||
s) name="SAX";;
|
||||
d) name="DJB";;
|
||||
f) name="FNV";;
|
||||
esac
|
||||
echo -n "Running ${rounds} x ${name} hash ... "
|
||||
echo -n "Collisions for ${name}: " >> $log
|
||||
./col -l ${rounds} -${hash} \
|
||||
| sort | uniq -c | sort | grep -v "1 " | wc -l \
|
||||
>> $log
|
||||
echo "done."
|
||||
done
|
||||
|
||||
echo
|
||||
echo "Review $log for the results."
|
||||
247
tests/collisions.c
Normal file
247
tests/collisions.c
Normal file
@@ -0,0 +1,247 @@
|
||||
/*
|
||||
Run:
|
||||
|
||||
./col -l 1000000 | sort | uniq -c | sort | grep -v "1 " | wc -l
|
||||
|
||||
This generates the hashes and shows the number of collisions.
|
||||
Hash algorithm can be selected by commandline options, see col -h.
|
||||
|
||||
Algorithms from:
|
||||
http://eternallyconfuzzled.com/tuts/algorithms/jsw_tut_hashing.aspx
|
||||
*/
|
||||
|
||||
#include <unistd.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <getopt.h>
|
||||
#include <sodium.h>
|
||||
#include <limits.h>
|
||||
|
||||
// lib
|
||||
#include "mem.h"
|
||||
#include "defines.h"
|
||||
#include "digital_crc32.h"
|
||||
|
||||
#define ROUNDS 10
|
||||
|
||||
unsigned djb_hash ( void *key, int len ) {
|
||||
unsigned char *p = key;
|
||||
unsigned h = 0;
|
||||
int i;
|
||||
|
||||
for ( i = 0; i < len; i++ )
|
||||
h = 33 * h ^ p[i];
|
||||
|
||||
return h;
|
||||
}
|
||||
|
||||
unsigned fnv_hash ( void *key, int len ) {
|
||||
unsigned char *p = key;
|
||||
unsigned h = 2166136261;
|
||||
int i;
|
||||
|
||||
for ( i = 0; i < len; i++ )
|
||||
h = ( h * 16777619 ) ^ p[i];
|
||||
|
||||
return h;
|
||||
}
|
||||
|
||||
unsigned sax_hash ( void *key, int len ) {
|
||||
unsigned char *p = key;
|
||||
unsigned h = 0;
|
||||
int i;
|
||||
|
||||
for ( i = 0; i < len; i++ )
|
||||
h ^= ( h << 5 ) + ( h >> 2 ) + p[i];
|
||||
|
||||
return h;
|
||||
}
|
||||
|
||||
unsigned oat_hash ( void *key, int len ) {
|
||||
unsigned char *p = key;
|
||||
unsigned h = 0;
|
||||
int i;
|
||||
|
||||
for ( i = 0; i < len; i++ ) {
|
||||
h += p[i];
|
||||
h += ( h << 10 );
|
||||
h ^= ( h >> 6 );
|
||||
}
|
||||
|
||||
h += ( h << 3 );
|
||||
h ^= ( h >> 11 );
|
||||
h += ( h << 15 );
|
||||
|
||||
return h;
|
||||
}
|
||||
|
||||
|
||||
//#define jen_hashsize(n) ( 1U << (n) )
|
||||
//#define jen_hashmask(n) ( jen_hashsize ( n ) - 1 )
|
||||
|
||||
#define jen_mix(a,b,c) \
|
||||
{ \
|
||||
a -= b; a -= c; a ^= ( c >> 13 ); \
|
||||
b -= c; b -= a; b ^= ( a << 8 ); \
|
||||
c -= a; c -= b; c ^= ( b >> 13 ); \
|
||||
a -= b; a -= c; a ^= ( c >> 12 ); \
|
||||
b -= c; b -= a; b ^= ( a << 16 ); \
|
||||
c -= a; c -= b; c ^= ( b >> 5 ); \
|
||||
a -= b; a -= c; a ^= ( c >> 3 ); \
|
||||
b -= c; b -= a; b ^= ( a << 10 ); \
|
||||
c -= a; c -= b; c ^= ( b >> 15 ); \
|
||||
}
|
||||
|
||||
unsigned jen_hash ( unsigned char *k, unsigned length, unsigned initval ) {
|
||||
unsigned a, b;
|
||||
unsigned c = initval;
|
||||
unsigned len = length;
|
||||
|
||||
a = b = 0x9e3779b9;
|
||||
|
||||
while ( len >= 12 ) {
|
||||
a += ( k[0] + ( (unsigned)k[1] << 8 )
|
||||
+ ( (unsigned)k[2] << 16 )
|
||||
+ ( (unsigned)k[3] << 24 ) );
|
||||
b += ( k[4] + ( (unsigned)k[5] << 8 )
|
||||
+ ( (unsigned)k[6] << 16 )
|
||||
+ ( (unsigned)k[7] << 24 ) );
|
||||
c += ( k[8] + ( (unsigned)k[9] << 8 )
|
||||
+ ( (unsigned)k[10] << 16 )
|
||||
+ ( (unsigned)k[11] << 24 ) );
|
||||
|
||||
jen_mix ( a, b, c );
|
||||
|
||||
k += 12;
|
||||
len -= 12;
|
||||
}
|
||||
|
||||
c += length;
|
||||
|
||||
switch ( len ) {
|
||||
case 11: c += ( (unsigned)k[10] << 24 );
|
||||
case 10: c += ( (unsigned)k[9] << 16 );
|
||||
case 9 : c += ( (unsigned)k[8] << 8 );
|
||||
/* First byte of c reserved for length */
|
||||
case 8 : b += ( (unsigned)k[7] << 24 );
|
||||
case 7 : b += ( (unsigned)k[6] << 16 );
|
||||
case 6 : b += ( (unsigned)k[5] << 8 );
|
||||
case 5 : b += k[4];
|
||||
case 4 : a += ( (unsigned)k[3] << 24 );
|
||||
case 3 : a += ( (unsigned)k[2] << 16 );
|
||||
case 2 : a += ( (unsigned)k[1] << 8 );
|
||||
case 1 : a += k[0];
|
||||
}
|
||||
|
||||
jen_mix ( a, b, c );
|
||||
|
||||
return c;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
char *keyid(int h, char *id, byte *pub, byte *sec) {
|
||||
uint32_t s, p;
|
||||
p = s = 0;
|
||||
switch (h) {
|
||||
case 1:
|
||||
p = oat_hash(pub, 32);
|
||||
s = oat_hash(sec, 32);
|
||||
break;
|
||||
case 2:
|
||||
p = digital_crc32(pub, 32);
|
||||
s = digital_crc32(sec, 32);
|
||||
break;
|
||||
case 3:
|
||||
p = djb_hash(pub, 32);
|
||||
s = djb_hash(sec, 32);
|
||||
break;
|
||||
case 4:
|
||||
p = fnv_hash(pub, 32);
|
||||
s = fnv_hash(sec, 32);
|
||||
break;
|
||||
case 5:
|
||||
p = sax_hash(pub, 32);
|
||||
s = sax_hash(sec, 32);
|
||||
break;
|
||||
case 6:
|
||||
p = jen_hash(pub, 32, 0xd4a1);
|
||||
s = jen_hash(sec, 32, 0xe8c0);
|
||||
break;
|
||||
}
|
||||
snprintf(id, 17, "%08X%08X", p, s);
|
||||
return id;
|
||||
}
|
||||
|
||||
|
||||
void usage () {
|
||||
fprintf(stderr, "Options:\n");
|
||||
fprintf(stderr, " -o use Jenkins OAT hashing\n");
|
||||
fprintf(stderr, " -c use CRC32 checksums\n");
|
||||
fprintf(stderr, " -d use DJB hash\n");
|
||||
fprintf(stderr, " -s use SAX hash\n");
|
||||
fprintf(stderr, " -f use FNV hash \n");
|
||||
fprintf(stderr, " -j use Jenkins hash \n");
|
||||
fprintf(stderr, " -l <rounds> specify rounds, default: 10\n");
|
||||
fprintf(stderr, " -h print this help message\n");
|
||||
fprintf(stderr, "When complete, check the output for collisions:\n");
|
||||
fprintf(stderr, "cat hashfile | sort | uniq -c | sort | grep -v \"1 \" | wc -l\n");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
int main(int argc, char **argv) {
|
||||
byte public[32] = { 0 };
|
||||
byte secret[32] = { 0 };
|
||||
char *id = ucmalloc(17);
|
||||
int i;
|
||||
int opt;
|
||||
int h = 1;
|
||||
long long rounds = ROUNDS;
|
||||
|
||||
while (1) {
|
||||
opt = getopt(argc, argv, "jsfdochl:");
|
||||
|
||||
if(opt == -1) {
|
||||
break;
|
||||
}
|
||||
|
||||
switch (opt) {
|
||||
case 'o':
|
||||
h = 1;
|
||||
break;
|
||||
case 'c':
|
||||
h = 2;
|
||||
break;
|
||||
case 'd':
|
||||
h = 3;
|
||||
break;
|
||||
case 'f':
|
||||
h = 4;
|
||||
break;
|
||||
case 's':
|
||||
h = 5;
|
||||
break;
|
||||
case 'j':
|
||||
h = 6;
|
||||
break;
|
||||
case 'l':
|
||||
rounds = strtoll(optarg, NULL, 10);
|
||||
break;
|
||||
case 'h':
|
||||
usage();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
for(i=0; i<rounds; i++) {
|
||||
crypto_box_keypair (public, secret);
|
||||
id = keyid(h, id, public, secret);
|
||||
printf("%s\n", id);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
14
tests/exportmasspubs.sh
Executable file
14
tests/exportmasspubs.sh
Executable file
@@ -0,0 +1,14 @@
|
||||
#!/bin/sh
|
||||
|
||||
outdir=$1
|
||||
pcp=$2
|
||||
vault=$3
|
||||
|
||||
if test -s "$vault"; then
|
||||
# exports public keys
|
||||
rm -f $outdir/0x*
|
||||
$pcp -V $vault -l | grep 0x | awk '{print $1}' | while read id; do
|
||||
$pcp -V $vault -p -i $id 2> /dev/null | egrep -v "^ " \
|
||||
| egrep -v '^$' > $outdir/$id
|
||||
done
|
||||
fi
|
||||
30
tests/genmasskeys.sh
Executable file
30
tests/genmasskeys.sh
Executable file
@@ -0,0 +1,30 @@
|
||||
#!/bin/sh
|
||||
|
||||
outdir=$1
|
||||
number=$2
|
||||
pcp=$3
|
||||
vault=$4
|
||||
|
||||
mkdir -p $outdir
|
||||
|
||||
if test -s $vault; then
|
||||
has=`$pcp -V $vault -l 2>/dev/null | grep 0x | wc -l | awk '{print $1}'`
|
||||
if test $has -eq $number; then
|
||||
exit
|
||||
fi
|
||||
rm -f $vault
|
||||
fi
|
||||
|
||||
# generates $number secret keys
|
||||
jot $number | while read x; do
|
||||
count=`jot -r 1 10 127`
|
||||
name=`openssl rand -hex $count`
|
||||
mail=`openssl rand -hex $count`
|
||||
(echo $name; echo $mail;) | $pcp -V $vault -k -x xxx > /dev/null 2>&1
|
||||
done
|
||||
|
||||
# exports public keys
|
||||
$pcp -V $vault -l | grep 0x | awk '{print $1}' | while read id; do
|
||||
$pcp -V $vault -p -i $id 2> /dev/null | egrep -v "^ " | \
|
||||
egrep -v '^$' > $outdir/$id
|
||||
done
|
||||
14
tests/importmasspubs.sh
Executable file
14
tests/importmasspubs.sh
Executable file
@@ -0,0 +1,14 @@
|
||||
#!/bin/sh
|
||||
|
||||
outdir=$1
|
||||
pcp=$2
|
||||
vault=$3
|
||||
|
||||
if test -s "$vault"; then
|
||||
# imports public keys
|
||||
rm -f $vault
|
||||
fi
|
||||
|
||||
ls -1 $outdir/0x* | while read id; do
|
||||
$pcp -V $vault -P -I $id
|
||||
done
|
||||
171
tests/invalidkeys.c
Normal file
171
tests/invalidkeys.c
Normal file
@@ -0,0 +1,171 @@
|
||||
#include "invalidkeys.h"
|
||||
|
||||
int main() {
|
||||
char *pw =ucmalloc(8);
|
||||
char *pw2 =ucmalloc(8);
|
||||
char *o = ucmalloc(8);
|
||||
char *m = ucmalloc(8);
|
||||
strcpy(pw, "xxxx");
|
||||
strcpy(pw2, "xxxx");
|
||||
strcpy(o, "xxxx");
|
||||
strcpy(m, "xxxx");
|
||||
|
||||
pcp_key_t *k = pcpkey_new ();
|
||||
|
||||
memcpy(k->owner, o, 8);
|
||||
memcpy(k->mail, m, 8);
|
||||
|
||||
pcp_key_t *key = pcpkey_encrypt(k, pw);
|
||||
|
||||
int i;
|
||||
for(i=0; i<5; i++)
|
||||
mkinv(key, i);
|
||||
|
||||
pcp_pubkey_t *pub = pcpkey_pub_from_secret(key);
|
||||
for(i=0; i<4; i++)
|
||||
mkinvp(pub, i);
|
||||
|
||||
mkinvv("testvault-invalidheader", 0);
|
||||
mkinvv("testvault-invalidversion", 1);
|
||||
mkinvv("testvault-invaliditemsize", 2);
|
||||
mkinvv("testvault-invaliditemtype", 3);
|
||||
mkinvv("testvault-invalidkeytype", 4);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void pr(char *t, unsigned char *b, size_t s) {
|
||||
int i;
|
||||
printf("%s:\n", t);
|
||||
for(i=0; i<s; ++i)
|
||||
printf("%02x", (unsigned int) b[i]);
|
||||
printf("\n");
|
||||
}
|
||||
|
||||
void mkinvv(const char *name, int type) {
|
||||
unlink(name);
|
||||
vault_t *v = pcpvault_new((char *)name, 0);
|
||||
vault_item_header_t *item = ucmalloc(sizeof(vault_item_header_t));
|
||||
vault_header_t *header = ucmalloc(sizeof(vault_header_t));
|
||||
|
||||
header->fileid = PCP_VAULT_ID;
|
||||
header->version = PCP_VAULT_VERSION;
|
||||
bzero(header->checksum, 32);
|
||||
|
||||
item->version = PCP_KEY_VERSION;
|
||||
item->type = PCP_KEY_TYPE_SECRET;
|
||||
item->size = sizeof(pcp_key_t);
|
||||
|
||||
unsigned char *blah = ucmalloc(30);
|
||||
unsigned char *blub = ucmalloc(sizeof(pcp_pubkey_t));
|
||||
|
||||
fseek(v->fd, 0, SEEK_SET);
|
||||
|
||||
switch (type) {
|
||||
case 0:
|
||||
header->fileid = 0;
|
||||
vh2be(header);
|
||||
fwrite(header, sizeof(vault_header_t), 1, v->fd);
|
||||
break;
|
||||
|
||||
case 1:
|
||||
header->version = 0;
|
||||
vh2be(header);
|
||||
fwrite(header, sizeof(vault_header_t), 1, v->fd);
|
||||
break;
|
||||
|
||||
case 2:
|
||||
vh2be(header);
|
||||
fwrite(header, sizeof(vault_header_t), 1, v->fd);
|
||||
item->size = 8;
|
||||
ih2be(item);
|
||||
fwrite(item, sizeof(vault_item_header_t), 1, v->fd);
|
||||
break;
|
||||
|
||||
case 3:
|
||||
vh2be(header);
|
||||
fwrite(header, sizeof(vault_header_t), 1, v->fd);
|
||||
item->type = 0x08;
|
||||
ih2be(item);
|
||||
fwrite(item, sizeof(vault_item_header_t), 1, v->fd);
|
||||
fwrite(blub, sizeof(pcp_pubkey_t), 1, v->fd);
|
||||
break;
|
||||
|
||||
case 4:
|
||||
vh2be(header);
|
||||
fwrite(header, sizeof(vault_header_t), 1, v->fd);
|
||||
fwrite(blah, 30, 1, v->fd);
|
||||
break;
|
||||
}
|
||||
|
||||
fclose(v->fd);
|
||||
}
|
||||
|
||||
void mkinvp(pcp_pubkey_t *k, int type) {
|
||||
pcp_pubkey_t *key = ucmalloc(sizeof(pcp_pubkey_t));
|
||||
memcpy(key, k, sizeof(pcp_pubkey_t));
|
||||
|
||||
switch(type) {
|
||||
case 0:
|
||||
key->type = 0;
|
||||
pcppubkey_print(key, F("testpubkey-wrong-type"));
|
||||
break;
|
||||
case 1:
|
||||
key->version = 0;
|
||||
pcppubkey_print(key, F("testpubkey-wrong-version"));
|
||||
break;
|
||||
case 2:
|
||||
key->serial = 0;
|
||||
pcppubkey_print(key, F("testpubkey-wrong-serial"));
|
||||
break;
|
||||
case 3:
|
||||
key->id[16] = 0x3e;
|
||||
pcppubkey_print(key, F("testpubkey-invalid-id"));
|
||||
break;
|
||||
case 4:
|
||||
key->ctime = 0;
|
||||
pcppubkey_print(key, F("testpubkey-invalid-ctime"));
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void mkinv(pcp_key_t *k, int type) {
|
||||
pcp_key_t *key = ucmalloc(sizeof(pcp_key_t));
|
||||
memcpy(key, k, sizeof(pcp_key_t));
|
||||
|
||||
switch(type) {
|
||||
case 0:
|
||||
key->encrypted[0] = 0;
|
||||
pcpkey_print(key, F("testkey-not-encrypted"));
|
||||
break;
|
||||
case 1:
|
||||
key->type = 0;
|
||||
pcpkey_print(key, F("testkey-wrong-type"));
|
||||
break;
|
||||
case 2:
|
||||
key->version = 0;
|
||||
pcpkey_print(key, F("testkey-wrong-version"));
|
||||
break;
|
||||
case 3:
|
||||
key->serial = 0;
|
||||
pcpkey_print(key, F("testkey-wrong-serial"));
|
||||
break;
|
||||
case 4:
|
||||
key->id[16] = 0x1;
|
||||
pcpkey_print(key, F("testkey-invalid-id"));
|
||||
break;
|
||||
case 5:
|
||||
key->ctime = 0;
|
||||
pcpkey_print(key, F("testkey-invalid-ctime"));
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
FILE *F(char *filename) {
|
||||
FILE *f;
|
||||
if((f = fopen(filename, "wb+")) == NULL) {
|
||||
fprintf(stderr, "Could not open output file %s\n", filename);
|
||||
exit(1);
|
||||
}
|
||||
return f;
|
||||
}
|
||||
19
tests/invalidkeys.h
Normal file
19
tests/invalidkeys.h
Normal file
@@ -0,0 +1,19 @@
|
||||
#include <unistd.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <getopt.h>
|
||||
#include <sodium.h>
|
||||
#include <limits.h>
|
||||
|
||||
#include "mem.h"
|
||||
#include "defines.h"
|
||||
#include "keyprint.h"
|
||||
#include "key.h"
|
||||
#include "vault.h"
|
||||
|
||||
void mkinv(pcp_key_t *k, int type);
|
||||
void mkinvp(pcp_pubkey_t *k, int type);
|
||||
void mkinvv(const char *name, int type);
|
||||
FILE *F(char *filename);
|
||||
|
||||
void pr(char *t, unsigned char *b, size_t s);
|
||||
36
tests/key-alicia-pub
Normal file
36
tests/key-alicia-pub
Normal file
@@ -0,0 +1,36 @@
|
||||
----- BEGIN PCP PUBLIC KEY -----
|
||||
Generated by: Pretty Curved Privacy Version 0.0.1
|
||||
Cipher: CURVE25519-ED25519-SALSA20-POLY1305
|
||||
Owner: Alicia
|
||||
Mail: alicia@local
|
||||
Key-ID: 0xE2942C2B6C96F6CC
|
||||
Public-Key: 1mZ?-e4^0JA&[}#=t1$/&aI<i:eM^bA/uIJ0O.iRBn#pv
|
||||
Creation Time: 2013-10-28T18:43:53
|
||||
Checksum: 1D:33:59:F1:B2:2F:21:73:3A:F6:5E:0D:63:47:76:42
|
||||
93:3B:EF:36:D3:20:8E:43:F5:4D:A9:39:9F:09:43:69
|
||||
Serial Number: 0x90C7B055
|
||||
Key Version: 0x00000001
|
||||
Random Art ID: +----------------+
|
||||
| |
|
||||
| |
|
||||
| . |
|
||||
| o |
|
||||
| . . |
|
||||
| .... |
|
||||
| ..o...= . |
|
||||
| .+ o.+..|
|
||||
+----------------+
|
||||
|
||||
1mZ?-e4^0JA&[}#=t1$/&aI<i:eM^bA/uIJ0O.iRBu%.Sv}/uK[e:!VVu[(jqvxj3QIzoG<
|
||||
/@!Wi0UUCA}6NMwWT$%=Om%gAzYhPvNTZ$mm%*l5YCA>s8fWoUI)[[l?@](l[bY3wzfJg8$
|
||||
+RsBj5+]c/(!ZwWu-lDPCkCGb.GJM$HLPU@np=ZQTh-1[#RaNGdOWb(]ZY=K]fSdMfU4q)Z
|
||||
T7dmxE:Cmst2o73w4RJ*A%?1idZ2&a^:kXsxnrxCXc5zt>n{QOQY{99oj&^!WH%6b&8@r]o
|
||||
OLEzsx9t]B1/vjj:SUBt3*enaKb?.>2eZdMKvFLQ?7DeedmCz-0FGzc!t#o)&Tg%:jV$8iH
|
||||
Iq.#9vqGT/x<<nyz!0i(0i&$kp^ylwen6]g:ytRVULL%s>UF39qu9sT6xka@S9F&fyO%Vgo
|
||||
AtD^cLtsGtT.DiNQ5&dSeOe2Oa:ETxg&Z[fB+I7uU-Z9OstL?nWLq@O&)a+:vtW1NUrt>4(
|
||||
ZaW2D^?xt:CzJ=ARPhD2P6AW5t(E@MD?rpY5MlYFhYv*VU7%6bZ>#hU:<Gv5FX0OCR#PiK}
|
||||
UMFAiwkJ)laaDw53N>kW2r9nA8y5>OCb!u.i3dQ8NK3.<>A62Jy[^p}rzi:f*R-]cll:p!D
|
||||
hB:kv7pVUjpj*-.5Bg8NBT:HpC:nA*X3)]<eSQP)Qgc4fDlOZ$^lPE4]hBx?i9:bjPqucW%
|
||||
0096109cnzKomKzJcU^k?C=*@OGUI&18tAgfFq^Wi8!R6ac}Deld[lkk0OYPaf}2{5Arw$e
|
||||
Kg$$@/G+8v$i*m)d@U?H5.hN
|
||||
------ END PCP PUBLICKEY ------
|
||||
23
tests/key-alicia-sec
Normal file
23
tests/key-alicia-sec
Normal file
@@ -0,0 +1,23 @@
|
||||
----- BEGIN PCP SECRET KEY -----
|
||||
Generated by: Pretty Curved Privacy Version 0.0.1
|
||||
Cipher: CURVE25519-ED25519-SALSA20-POLY1305
|
||||
Key-ID: 0xE2942C2B6C96F6CC
|
||||
Creation Time: 2013-10-28T18:43:53
|
||||
Serial Number: 0x3271452A
|
||||
Key Version: 0x00000001
|
||||
|
||||
1mZ?-e4^0JA&[}#=t1$/&aI<i:eM^bA/uIJ0O.iRBo2&m=rz<?V@H>0Z2d1[B(z6I[xE%-a
|
||||
+sp@mrOlA&rK9gRP1pk=Hnr=sCxjb?Sj51ISMR.YA&:ZT23?J.Nx!{ZHobd9(QUR)FPmjti
|
||||
gT//!hkQNum.a9NC[LW>UetZSh%D>rS]#v}/uK[e:!VVu[(jqvxj3QIzoG</@!Wi0UUCA}6
|
||||
NMwWT$%=Om%gAzYhPvNTZ$mm%*l5YCA>s8fWoUI)[[l?@](l[bY3wzfJg8$+RsBj5+]c/(!
|
||||
ZwWu-lDPCkCGb.GJM$HLPU@np=ZQTh-1[#RaNGdOWb(]ZY=K]fSdMfU4q)ZT7dmxE:Cmst2
|
||||
o73w4RJ*A%?1idZ2&a^:kXsxnrxCXc5zt>n{QOQY{99oj&^!WH%6b&8@r]oOLEzsx9t]B1/
|
||||
vjj:SUBt3*enaKb?.>2eZdMKvFLQ?7DeedmCz-0FGzc!t#o)&Tg%:jV$8iHIq.#9vqGT/x<
|
||||
<nyz!0i(0i&$kp^ylwen6]g:ytRVULL%s>UF39qu9sT6xka@S9F&fyO%VgoAtD^cLtsGtT.
|
||||
DiNQ5&dSeOe2Oa:ETxg&Z[fB+I7uU-Z9OstL?nWLq@O&)a+:vtW1NUrt>4(ZaW2D^?xt:Cz
|
||||
J=ARPhD2P6AW5t(E@MD?rpY5MlYFhYv*VU7%6bZ>#hU:<Gv5FX0OCR#PiK}UMFAiwkJ)laa
|
||||
Dw53N>kW2r9nA8y5>OCb!u.i3dQ8NK3.<>A62Jy[^p}rzi:f*R-]cll:p!DhB:kv7pVUjpj
|
||||
*-.5Bg8NBT:HpC:nA*X3)]<eSQP)Qgc4fDlOZ$^lPE4]hBx?i.=-ZKqucW%0096104HASg6
|
||||
4S/xxvy{tr<r40seV900000000000000000000000000000000000000000eu+e0seV901Y
|
||||
bg0kqxS9@(ov
|
||||
------ END PCP SECRET KEY ------
|
||||
23
tests/key-alicia-secret
Normal file
23
tests/key-alicia-secret
Normal file
@@ -0,0 +1,23 @@
|
||||
----- BEGIN PCP SECRET KEY -----
|
||||
Generated by: Pretty Curved Privacy Version 0.0.1
|
||||
Cipher: CURVE25519-ED25519-SALSA20-POLY1305
|
||||
Key-ID: 0xE2942C2B6C96F6CC
|
||||
Creation Time: 2013-10-28T18:43:53
|
||||
Serial Number: 0x3271452A
|
||||
Key Version: 0x00000001
|
||||
|
||||
1mZ?-e4^0JA&[}#=t1$/&aI<i:eM^bA/uIJ0O.iRBo2&m=rz<?V@H>0Z2d1[B(z6I[xE%-a
|
||||
+sp@mrOlA&rK9gRP1pk=Hnr=sCxjb?Sj51ISMR.YA&:ZT23?J.Nx!{ZHobd9(QUR)FPmjti
|
||||
gT//!hkQNum.a9NC[LW>UetZSh%D>rS]#v}/uK[e:!VVu[(jqvxj3QIzoG</@!Wi0UUCA}6
|
||||
NMwWT$%=Om%gAzYhPvNTZ$mm%*l5YCA>s8fWoUI)[[l?@](l[bY3wzfJg8$+RsBj5+]c/(!
|
||||
ZwWu-lDPCkCGb.GJM$HLPU@np=ZQTh-1[#RaNGdOWb(]ZY=K]fSdMfU4q)ZT7dmxE:Cmst2
|
||||
o73w4RJ*A%?1idZ2&a^:kXsxnrxCXc5zt>n{QOQY{99oj&^!WH%6b&8@r]oOLEzsx9t]B1/
|
||||
vjj:SUBt3*enaKb?.>2eZdMKvFLQ?7DeedmCz-0FGzc!t#o)&Tg%:jV$8iHIq.#9vqGT/x<
|
||||
<nyz!0i(0i&$kp^ylwen6]g:ytRVULL%s>UF39qu9sT6xka@S9F&fyO%VgoAtD^cLtsGtT.
|
||||
DiNQ5&dSeOe2Oa:ETxg&Z[fB+I7uU-Z9OstL?nWLq@O&)a+:vtW1NUrt>4(ZaW2D^?xt:Cz
|
||||
J=ARPhD2P6AW5t(E@MD?rpY5MlYFhYv*VU7%6bZ>#hU:<Gv5FX0OCR#PiK}UMFAiwkJ)laa
|
||||
Dw53N>kW2r9nA8y5>OCb!u.i3dQ8NK3.<>A62Jy[^p}rzi:f*R-]cll:p!DhB:kv7pVUjpj
|
||||
*-.5Bg8NBT:HpC:nA*X3)]<eSQP)Qgc4fDlOZ$^lPE4]hBx?i.=-ZKqucW%0096104HASg6
|
||||
4S/xxvy{tr<r40seV900000000000000000000000000000000000000000eu+e0seV901Y
|
||||
bg0kqxS9@(ov
|
||||
------ END PCP SECRET KEY ------
|
||||
36
tests/key-bobby-pub
Normal file
36
tests/key-bobby-pub
Normal file
@@ -0,0 +1,36 @@
|
||||
----- BEGIN PCP PUBLIC KEY -----
|
||||
Generated by: Pretty Curved Privacy Version 0.0.1
|
||||
Cipher: CURVE25519-ED25519-SALSA20-POLY1305
|
||||
Owner: Bobby
|
||||
Mail: bobby@<40>local
|
||||
Key-ID: 0x68832D215AFB2440
|
||||
Public-Key: 1m9SHw3}sw<Ro82?hQ&J[byDA]z(g1.6X$MweEJ95Dz!h
|
||||
Creation Time: 2013-10-28T18:48:11
|
||||
Checksum: A8:32:16:EF:9D:38:9A:3C:7D:99:F2:81:D4:42:B3:2D
|
||||
28:13:A9:43:1B:22:C3:71:A8:38:38:10:E3:A3:B9:82
|
||||
Serial Number: 0x61FDA3CE
|
||||
Key Version: 0x00000001
|
||||
Random Art ID: +----------------+
|
||||
| |
|
||||
| |
|
||||
| |
|
||||
| |
|
||||
| o . |
|
||||
| o o . |
|
||||
| . Bo.. |
|
||||
| +o==. |
|
||||
+----------------+
|
||||
|
||||
1m9SHw3}sw<Ro82?hQ&J[byDA]z(g1.6X$MweEJ95KHzBvTd%QWcl:NlJtTyRdZ>sTc3J1e
|
||||
nQ<!<c@^1<(%aF6ks+&}eE%8}zc<Ny@#5&O%GN6ep49slxWhkSe*jox/(JrkVP[zWJ0.wQ8
|
||||
RqvuRolF*/(wJ&{+Qpd1dyx&=ERL1c$%bg($]4Fe23!410z/HctdobTD=bs#@]sT[[%d7Z&
|
||||
/k:d4>jeJey}hI*S7Pl^8O:i#]wd4}WNR7UYw(=}pBKsHbm^XeFqg^(CtjZG!K4oMPT=bJU
|
||||
df/X2F]5iq-bYp:EC82YBJ<[NP*BDW?r-L..!As*CWddicuvsp^AQ20O-$+a@K<}6OPd*Hb
|
||||
jex#UvSbZ+C%Gt+z!0i(0j#I6?xftr.eqpicnf]DWfiqE:*?/%(slD9QQU[7t4{J>hyLRkC
|
||||
s=uT0HwrFIz6f9C!&=Nf$(jE*(3RFhA>SM5MiFq&8TqUn:^2xzxa70=]T*J[g}vVl8:-Zqq
|
||||
N%{=qe7rScb.M4{Ld4j[HDIV(YZZWZ4}At*x.NT5E[/5p/3{SbNK7wjj[1yA2d]ZlE[I4-Z
|
||||
11m*e^vcdRz+(xlU=:cXwV2<E1jGb5N/rmsW}O*DM/lG^lEi*+ahIvln>A+463^RQHyN77/
|
||||
>fdtrPLE^lGYGTc(=FosgPggLZmqU)FTG6g.][KFAi5&YHl]3FOk$jf@g=c(^t3E+tqucW%
|
||||
009610m4wrvfsIuoY5m{QWy!7fuih0^e@NMCINT@TYUeV/h:L8WNE3YBh]kQ{UG3qf*4Ql9
|
||||
}&1i2de}$URN7GD6yTb/8L^J
|
||||
------ END PCP PUBLICKEY ------
|
||||
23
tests/key-bobby-sec
Normal file
23
tests/key-bobby-sec
Normal file
@@ -0,0 +1,23 @@
|
||||
----- BEGIN PCP SECRET KEY -----
|
||||
Generated by: Pretty Curved Privacy Version 0.0.1
|
||||
Cipher: CURVE25519-ED25519-SALSA20-POLY1305
|
||||
Key-ID: 0x68832D215AFB2440
|
||||
Creation Time: 2013-10-28T18:48:11
|
||||
Serial Number: 0xECD29916
|
||||
Key Version: 0x00000001
|
||||
|
||||
1m9SHw3}sw<Ro82?hQ&J[byDA]z(g1.6X$MweEJ95DAzC&hpY67^g3^L>d4K/JF>>JbqkC-
|
||||
ENik9(Oa&k6L^6(cq5O?r}Yx2C5&kgv$qs(-bttGrEtiKwvSQhD6&VdwYg)Fg%dqgVLX#FK
|
||||
+DcAIb@!A-ql$kqlYXd71ciD-Gs+p^P8fvTd%QWcl:NlJtTyRdZ>sTc3J1enQ<!<c@^1<(%
|
||||
aF6ks+&}eE%8}zc<Ny@#5&O%GN6ep49slxWhkSe*jox/(JrkVP[zWJ0.wQ8RqvuRolF*/(w
|
||||
J&{+Qpd1dyx&=ERL1c$%bg($]4Fe23!410z/HctdobTD=bs#@]sT[[%d7Z&/k:d4>jeJey}
|
||||
hI*S7Pl^8O:i#]wd4}WNR7UYw(=}pBKsHbm^XeFqg^(CtjZG!K4oMPT=bJUdf/X2F]5iq-b
|
||||
Yp:EC82YBJ<[NP*BDW?r-L..!As*CWddicuvsp^AQ20O-$+a@K<}6OPd*Hbjex#UvSbZ+C%
|
||||
Gt+z!0i(0j#I6?xftr.eqpicnf]DWfiqE:*?/%(slD9QQU[7t4{J>hyLRkCs=uT0HwrFIz6
|
||||
f9C!&=Nf$(jE*(3RFhA>SM5MiFq&8TqUn:^2xzxa70=]T*J[g}vVl8:-ZqqN%{=qe7rScb.
|
||||
M4{Ld4j[HDIV(YZZWZ4}At*x.NT5E[/5p/3{SbNK7wjj[1yA2d]ZlE[I4-Z11m*e^vcdRz+
|
||||
(xlU=:cXwV2<E1jGb5N/rmsW}O*DM/lG^lEi*+ahIvln>A+463^RQHyN77/>fdtrPLE^lGY
|
||||
GTc(=FosgPggLZmqU)FTG6g.][KFAi5&YHl]3FOk$jf@g=c(^-9o0OqucW%0096102z0J(&
|
||||
Aly(LQ/JMoWb{0seV900000000000000000000000000000000000000000evsu0seV901Y
|
||||
bg08Qd7i@/lX
|
||||
------ END PCP SECRET KEY ------
|
||||
31
tests/stresstests.cfg
Normal file
31
tests/stresstests.cfg
Normal file
@@ -0,0 +1,31 @@
|
||||
#
|
||||
# stress tests
|
||||
|
||||
confirm = Stress tests will take some time, continue?
|
||||
pcp = ../src/pcp1
|
||||
outdir = stresstest
|
||||
vault = $outdir/stresstestin
|
||||
pvault = $outdir/stresstestout
|
||||
numkeys = 100
|
||||
verbose = 1
|
||||
|
||||
<test check-bulk-tests>
|
||||
prepare = ./genmasskeys.sh $outdir $numkeys $pcp $vault
|
||||
|
||||
<test check-bulk-generate-keys>
|
||||
cmd = $pcp -V $vault -l | grep 0x | wc -l
|
||||
expect = $numkeys
|
||||
</test>
|
||||
|
||||
<test check-bulk-vault-export-publics>
|
||||
prepare = ./exportmasspubs.sh $outdir $pcp $vault
|
||||
cmd = ls -1 $outdir/0x* | wc -l
|
||||
expect = $numkeys
|
||||
</test>
|
||||
|
||||
<test check-bulk-import-publics>
|
||||
prepare = ./importmasspubs.sh $outdir $pcp $pvault
|
||||
cmd = $pcp -V $pvault -l | grep 0x | wc -l
|
||||
expect $numkeys
|
||||
</test>
|
||||
</test>
|
||||
13
tests/unittests-bulk.sh
Executable file
13
tests/unittests-bulk.sh
Executable file
@@ -0,0 +1,13 @@
|
||||
#!/bin/sh
|
||||
|
||||
pcp=$1
|
||||
vault=$2
|
||||
log=$3
|
||||
count=$4
|
||||
|
||||
rm -f $vault
|
||||
|
||||
jot $count | while read x; do
|
||||
(echo x; echo y;) | $pcp -V $vault -k -x bbb
|
||||
done > $log 2>&1
|
||||
|
||||
323
tests/unittests.cfg
Normal file
323
tests/unittests.cfg
Normal file
@@ -0,0 +1,323 @@
|
||||
# -*-html-*-
|
||||
|
||||
pcp = ../src/pcp1
|
||||
vault = v1
|
||||
passwd = xxx
|
||||
|
||||
<test check-show-help>
|
||||
cmd = $pcp -h
|
||||
expect = /export/
|
||||
</test>
|
||||
|
||||
<test check-if-fail-without-vault>
|
||||
prepare = rm -f $vault
|
||||
cmd = $pcp -V $vault -l
|
||||
expect = /doesn't contain any keys so far/
|
||||
</test>
|
||||
|
||||
<test check-generate-secret-key>
|
||||
cmd = $pcp -V $vault -k -x $passwd
|
||||
input = <<EOF
|
||||
Dexter Morgan
|
||||
dxmorg@florida.cops.gov
|
||||
EOF
|
||||
expect = /Generated new secret key/
|
||||
</test>
|
||||
|
||||
|
||||
<test check-if-vault-contains-secret>
|
||||
cmd = $pcp -V $vault -l
|
||||
expect = /Dexter Morgan/
|
||||
</test>
|
||||
|
||||
<test check-secret-key-info>
|
||||
cmd = $pcp -V $vault -l | tail -1 | cut -d ' ' -f 1 | xargs $pcp -V $vault -t -i
|
||||
expect = /BEGIN PCP SECRET KEY/
|
||||
</test>
|
||||
|
||||
<test check-export-public-key>
|
||||
cmd = $pcp -V $vault -l | tail -1 | cut -d ' ' -f 1 | xargs $pcp -V $vault -p -i
|
||||
expect = /BEGIN PCP PUBLIC KEY/
|
||||
</test>
|
||||
|
||||
<test check-export-public-key-tofile>
|
||||
cmd = $pcp -V $vault -l | tail -1 | cut -d ' ' -f 1 | xargs $pcp -V $vault -p -O testkey-self -i
|
||||
expect-file = testkey-self
|
||||
</test>
|
||||
|
||||
<test check-export-public-key-filecontent>
|
||||
cmd = /usr/bin/true # file is already there
|
||||
expect-file-contains = testkey-self Dexter
|
||||
</test>
|
||||
|
||||
<test check-import-public-key>
|
||||
cmd = $pcp -V $vault -P -I bart.pub
|
||||
expect = /key 0x0E4512BE47CE0215 added/
|
||||
</test>
|
||||
|
||||
<test check-imported-public-key-info>
|
||||
cmd = $pcp -V $vault -t -i 0x0E4512BE47CE0215
|
||||
expect = /Serial Number: 0xEE894128/
|
||||
</test>
|
||||
|
||||
<test check-if-delete-public-key-works>
|
||||
cmd = $pcp -V $vault -r -i 0x0E4512BE47CE0215
|
||||
expect = /Public key deleted/
|
||||
</test>
|
||||
|
||||
<test check-if-vault-still-valid>
|
||||
cmd = $pcp -V $vault -t
|
||||
expect = /Vault version: 00000001/
|
||||
</test>
|
||||
|
||||
<test check-if-deleted-public-key-is-away>
|
||||
cmd = $pcp -V $vault -t
|
||||
expect = /Public keys: 0/
|
||||
</test>
|
||||
|
||||
#
|
||||
# encryption tests
|
||||
idbobby = 0x68832D215AFB2440
|
||||
idalicia = 0xE2942C2B6C96F6CC
|
||||
md5msg = 66b8c4ca9e5d2a7e3c0559c3cdea3d50
|
||||
<test check-crypto-alicia-init>
|
||||
prepare = echo ${md5msg} > testmessage
|
||||
<test check-crypto-alicia-import-secret>
|
||||
cmd = $pcp -V va -S -I key-alicia-sec -x a
|
||||
expect = /${idalicia}/
|
||||
</test>
|
||||
|
||||
<test check-crypto-alicia-import-bobbys-key>
|
||||
cmd = $pcp -V va -P -I key-bobby-pub
|
||||
expect = /${idbobby}/
|
||||
</test>
|
||||
|
||||
<test check-crypto-alicia-encrypt>
|
||||
cmd = $pcp -V va -e -i ${idbobby} -I testmessage -O testencrypted -x a
|
||||
expect = /for ${idbobby} successfully/
|
||||
</test>
|
||||
|
||||
<test check-crypto-alicia-encrypted-file>
|
||||
cmd = cat testencrypted
|
||||
expect = /END PCP ENCRYPTED FILE/
|
||||
</test>
|
||||
</test>
|
||||
|
||||
<test check-crypto-bobby-init>
|
||||
<test check-crypto-bobby-import-secret>
|
||||
cmd = $pcp -V vb -S -I key-bobby-sec -x b
|
||||
expect = /${idbobby}/
|
||||
</test>
|
||||
|
||||
<test check-crypto-alicia-import-alicias-key>
|
||||
cmd = $pcp -V vb -P -I key-alicia-pub
|
||||
expect = /${idalicia}/
|
||||
</test>
|
||||
|
||||
<test check-crypto-bobby-decrypt>
|
||||
cmd = $pcp -V vb -d -O testdecrypted -I testencrypted -x b
|
||||
expect = /from ${idalicia} successfully/
|
||||
</test>
|
||||
|
||||
<test check-crypto-alicia-encrypted-file>
|
||||
cmd = cat testdecrypted
|
||||
expect = /${md5msg}/
|
||||
</test>
|
||||
</test>
|
||||
|
||||
|
||||
#
|
||||
# negative tests, check for error handling
|
||||
<test check-if-catch-conflicting-params>
|
||||
cmd = $pcp -S -P
|
||||
expect = /invalid combinatin of commandline parameters/
|
||||
</test>
|
||||
|
||||
<test check-infile-error>
|
||||
cmd = $pcp -V $vault -I nonexist -P
|
||||
expect = /Could not open input file nonexist/
|
||||
</test>
|
||||
|
||||
<test check-import-without-id-error>
|
||||
cmd = $pcp -V $vault -r
|
||||
expect = /You need to specify a key id/
|
||||
</test>
|
||||
|
||||
<test check-catch-invalid-short-keyid>
|
||||
cmd = $pcp -V $vault -r -i 0x1
|
||||
expect = /is too short/
|
||||
</test>
|
||||
|
||||
<test check-catch-invalid-long-keyid>
|
||||
cmd = $pcp -V $vault -r -i 0x1111111111111111111111111
|
||||
expect = /is too long/
|
||||
</test>
|
||||
|
||||
<test check-catch-invalid-long-keyid-without-0x>
|
||||
cmd = $pcp -V $vault -r -i 11111111111111111
|
||||
expect = /is too long/
|
||||
</test>
|
||||
|
||||
<test check-catch-delete-nonexist>
|
||||
cmd = $pcp -V $vault -r -i 0x0101010101010101
|
||||
expect = /No key with id 0x010101/
|
||||
</test>
|
||||
|
||||
<test check-if-export-secret-catch-nonexistent-keyid>
|
||||
cmd = $pcp -V $vault -s -i 0x0101010101010101
|
||||
expect = /Could not find a secret key with id 0x010101/
|
||||
</test>
|
||||
|
||||
<test check-if-export-secret-catch-no-primary>
|
||||
prepare = $pcp -V v2 -l # so we've got just an empty vault
|
||||
cmd = $pcp -V v2 -s
|
||||
expect = /no primary secret key in the vault/
|
||||
</test>
|
||||
|
||||
<test check-if-export-secret-catch-outfile-error>
|
||||
cmd = $pcp -V $vault -l | grep primary |cut -d ' ' -f 1 \
|
||||
| xargs $pcp -V $vault -s -O nonexistentdir/keyfile -i
|
||||
expect = /Could not create output file nonexistentdir/
|
||||
</test>
|
||||
|
||||
|
||||
<test check-if-export-public-catch-nonexistent-keyid>
|
||||
cmd = $pcp -V $vault -p -i 0x0101010101010101
|
||||
expect = /Could not find a public key with id 0x010101/
|
||||
</test>
|
||||
|
||||
<test check-if-export-public-catch-no-primary>
|
||||
prepare = $pcp -V v3 -l # so we've got just an empty vault
|
||||
cmd = $pcp -V v3 -p
|
||||
expect = /no primary secret key in the vault/
|
||||
</test>
|
||||
|
||||
<test check-if-export-public-catch-outfile-error>
|
||||
prepare = $pcp -V $vault -P -I bart.pub
|
||||
cmd = $pcp -V $vault -l | grep public | cut -d ' ' -f 1 \
|
||||
| tail -1 | xargs $pcp -V $vault -p -O nonexistentdir/keyfile
|
||||
expect = /Could not create output file nonexistentdir/
|
||||
</test>
|
||||
|
||||
<test check-if-catch-empty-input>
|
||||
prepare = echo -n > testfile-empty
|
||||
cmd = $pcp -V $vault -P -I testfile-empty
|
||||
expect = /file is empty/
|
||||
</test>
|
||||
|
||||
<test check-if-catch-missing-newlines>
|
||||
prepare = jot 5000 | while read ignore; do echo -n X; done > testfile-toolong
|
||||
cmd = $pcp -V $vault -P -I testfile-toolong
|
||||
expect = /line is too long/
|
||||
</test>
|
||||
|
||||
/*
|
||||
* Currently disabled, because ZeroMQ's zmq_z85_decode() doesn't really
|
||||
* catch invalid z85, it only checks the input length and not the actual
|
||||
* encoding. Re-enable, once that bug is fixed.
|
||||
<test check-if-catch-invalid-z85>
|
||||
prepare = jot 30 | while read ignore; do \
|
||||
echo XXXXXXXXXXXXXXXXXX; done > testfile-noz85
|
||||
cmd = $pcp -V $vault -P -I testfile-noz85
|
||||
expect = /could not decode input/
|
||||
</test>
|
||||
*/
|
||||
|
||||
<test check-if-catch-nokey-behind-z85>
|
||||
prepare = jot 30 | while read ignore; do echo XXXXX; done \
|
||||
| $pcp -z > testfile-nokey
|
||||
cmd = $pcp -V $vault -P -I testfile-nokey
|
||||
expect = /result to a proper sized key/
|
||||
</test>
|
||||
|
||||
<test check-if-sanity-catch-nosecret>
|
||||
cmd = $pcp -V $vault -S -I bart.pub
|
||||
expect = /result to a proper sized key/
|
||||
</test>
|
||||
|
||||
<test check-if-sanity-catch-keyexists>
|
||||
cmd = $pcp -V $vault -P -I bart.pub
|
||||
expect = /there already exists a key/
|
||||
</test>
|
||||
|
||||
<test check-if-catch-nokeys>
|
||||
prepare = $pcp -V v3 -l
|
||||
cmd = $pcp -V v3 -l
|
||||
expect = /contain any keys so far/
|
||||
</test>
|
||||
|
||||
|
||||
<test check-testkey-invalid-id>
|
||||
prepare = ./invalidkeys
|
||||
cmd = $pcp -V $vault -S -I testkey-invalid-id
|
||||
expect /invalid key id/
|
||||
</test>
|
||||
|
||||
<test check-testkey-not-encrypted>
|
||||
cmd = $pcp -V $vault -S -I testkey-not-encrypted
|
||||
expect = /secret key contained in key seems to be empty/
|
||||
</test>
|
||||
|
||||
<test check-testkey-wrong-serial>
|
||||
cmd = $pcp -V $vault -S -I testkey-wrong-serial
|
||||
# sometimes the created key is invalid in another way
|
||||
expect = /(invalid serial number|could not decode input)/
|
||||
</test>
|
||||
|
||||
<test check-testkey-wrong-type>
|
||||
cmd = $pcp -V $vault -S -I testkey-wrong-type
|
||||
expect = /key type is not SECRET/
|
||||
</test>
|
||||
|
||||
<test check-testkey-wrong-version>
|
||||
cmd = $pcp -V $vault -S -I testkey-wrong-version
|
||||
expect = /unknown key version/
|
||||
</test>
|
||||
|
||||
|
||||
|
||||
<test check-testpubkey-invalid-id>
|
||||
prepare = ./invalidkeys
|
||||
cmd = $pcp -V $vault -P -I testpubkey-invalid-id
|
||||
expect = /nvalid key id/
|
||||
</test>
|
||||
|
||||
<test check-testpubkey-wrong-serial>
|
||||
cmd = $pcp -V $vault -P -I testpubkey-wrong-serial
|
||||
expect = /invalid serial number/
|
||||
</test>
|
||||
|
||||
<test check-testpubkey-wrong-type>
|
||||
cmd = $pcp -V $vault -P -I testpubkey-wrong-type
|
||||
expect = /key type is not PUBLIC/
|
||||
</test>
|
||||
|
||||
<test check-testpubkey-wrong-version>
|
||||
cmd = $pcp -V $vault -P -I testpubkey-wrong-version
|
||||
expect = /unknown key version/
|
||||
</test>
|
||||
|
||||
<test check-vault-invalid-header>
|
||||
cmd = $pcp -V testvault-invalidheader -l
|
||||
expect = /Unexpected vault file format/
|
||||
</test>
|
||||
|
||||
<test check-vault-invalid-version>
|
||||
cmd = $pcp -V testvault-invalidversion -l
|
||||
expect = /Unexpected vault file format/
|
||||
</test>
|
||||
/*
|
||||
<test check-vault-invalid-itemsize>
|
||||
cmd = $pcp -V testvault-invaliditemsize -l
|
||||
expect = /invalid key item header size/
|
||||
</test>
|
||||
*/
|
||||
<test check-vault-invalid-itemtype>
|
||||
cmd = $pcp -V testvault-invaliditemtype -l
|
||||
expect = /invalid key type/
|
||||
</test>
|
||||
|
||||
<test check-vault-invalid-keytype>
|
||||
cmd = $pcp -V testvault-invalidkeytype -l
|
||||
expect = /contain any keys so far./
|
||||
</test>
|
||||
241
tests/unittests.pl
Executable file
241
tests/unittests.pl
Executable file
@@ -0,0 +1,241 @@
|
||||
#!/usr/bin/perl
|
||||
use Test::More;
|
||||
use IPC::Open3;
|
||||
use IO::Select;
|
||||
use FileHandle;
|
||||
use Config::General qw(ParseConfig);
|
||||
use Tie::IxHash;
|
||||
use Data::Dumper;
|
||||
|
||||
sub run;
|
||||
sub execute;
|
||||
|
||||
my $config = shift @ARGV || die "usage: $0 <config>\n";
|
||||
|
||||
my %cfg = ParseConfig(-ConfigFile => $config,
|
||||
-InterPolateVars => 1,
|
||||
-Tie => "Tie::IxHash" );
|
||||
my $verbose = $cfg{verbose};
|
||||
|
||||
if (exists $cfg{confirm}) {
|
||||
print "$cfg{confirm} [CTRL-C to abort, <ENTER> to continue] ";
|
||||
my $cont = <STDIN>;
|
||||
}
|
||||
|
||||
foreach my $test (keys %{$cfg{test}}) {
|
||||
my $name = "$test ($cfg{test}->{$test}->{cmd})";
|
||||
&runtest($cfg{test}->{$test}, $name);
|
||||
}
|
||||
|
||||
|
||||
|
||||
sub runtest {
|
||||
my($cfg, $name) = @_;
|
||||
my($in, $out, $error, $timeout);
|
||||
|
||||
if (exists $cfg->{prepare}) {
|
||||
print STDERR " executing prepare command: $cfg->{prepare}\n" if ($verbose);
|
||||
if ($cfg->{prepare} =~ />/) {
|
||||
system("$cfg->{prepare}");
|
||||
}
|
||||
else {
|
||||
system("$cfg->{prepare} > /dev/null 2>&1");
|
||||
}
|
||||
}
|
||||
|
||||
if (exists $cfg->{test}) {
|
||||
foreach my $test (keys %{$cfg->{test}}) {
|
||||
my $name = "$test ($cfg->{test}->{$test}->{cmd})";
|
||||
&runtest($cfg->{test}->{$test}, $name);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
my $ret = run($cfg->{cmd},
|
||||
$cfg->{input},
|
||||
\$out, \$error, 5, 0, undef);
|
||||
|
||||
my $output = $out . $error;
|
||||
|
||||
|
||||
$output =~ s/^\s*//;
|
||||
$output =~ s/\s*$//;
|
||||
|
||||
if (exists $cfg->{expect}) {
|
||||
if ($cfg->{expect} =~ /^\//) {
|
||||
like($output, $cfg->{expect}, "$name") or last;
|
||||
}
|
||||
else {
|
||||
is($output, $cfg->{expect}, "$name") or last;
|
||||
}
|
||||
}
|
||||
|
||||
elsif (exists $cfg->{"expect-file"}) {
|
||||
my $e = 0;
|
||||
if (-s $cfg->{"expect-file"}) {
|
||||
$e = 1;
|
||||
}
|
||||
is($e, 1, "$name") or last;
|
||||
}
|
||||
|
||||
elsif (exists $cfg->{"expect-file-contains"}) {
|
||||
my($file, $expext) = split /\s\s*/, $cfg->{"expect-file-contains"};
|
||||
my $e = 0;
|
||||
if (-s $file) {
|
||||
$e = 1;
|
||||
}
|
||||
is($e, 1, "$name") or last;
|
||||
if (open F, "<$file") {
|
||||
my $content = join '', <F>;
|
||||
close F;
|
||||
like($content, qr/$expect/s, "$name") or last;
|
||||
}
|
||||
else {
|
||||
fail($test);
|
||||
last;
|
||||
}
|
||||
}
|
||||
|
||||
elsif (exists $cfg->{exit}) {
|
||||
is($ret, $cfg->{exit}, "$name") or last;
|
||||
}
|
||||
|
||||
else {
|
||||
diag("invalid test spec for $test") or last;
|
||||
fail($test);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
done_testing;
|
||||
|
||||
sub run {
|
||||
# open3 wrapper. catch stderr, stdout, errno; add timeout and kill
|
||||
my($cmd, $input, $output, $error, $timeout, $debug, $monitorfile) = @_;
|
||||
|
||||
my ($stdin, $stderr, $stdout) = ('', '', '');
|
||||
my $child = 0;
|
||||
my $cmdline = join " ", @{$cmd};
|
||||
$timeout = $timeout ? $timeout : 10;
|
||||
$SIG{CHLD} = &reaper;
|
||||
|
||||
REENTRY:
|
||||
eval {
|
||||
local $SIG{ALRM} = sub { die "timeout" };
|
||||
alarm $timeout;
|
||||
|
||||
if ($child && kill 0, $child) {
|
||||
;
|
||||
}
|
||||
else {
|
||||
$child = open3($stdin, $stdout, $stderr, $cmd);
|
||||
$childs++;
|
||||
|
||||
if ($input) {
|
||||
print $stdin $input;
|
||||
}
|
||||
$stdin->close();
|
||||
}
|
||||
|
||||
my $sel = new IO::Select;
|
||||
$sel->add($stdout, $stderr);
|
||||
|
||||
while(my @ready = $sel->can_read) {
|
||||
foreach my $fh (@ready) {
|
||||
my $line;
|
||||
my $len = sysread $fh, $line, 4096;
|
||||
if(not defined $len){
|
||||
die "Error from child: $!\n";
|
||||
}
|
||||
elsif ($len == 0){
|
||||
$sel->remove($fh);
|
||||
next;
|
||||
}
|
||||
else {
|
||||
if(fileno($fh) == fileno($stdout)) {
|
||||
$$output .= $line;
|
||||
}
|
||||
elsif(fileno($fh) == fileno($stderr)) {
|
||||
$$error .= $line;
|
||||
}
|
||||
else {
|
||||
die "Unknown filehandle returned!\n";
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
alarm 0;
|
||||
close $stderr;
|
||||
close $stdout;
|
||||
};
|
||||
|
||||
TRY:
|
||||
my($exitcode, $killsignal, $coredumped);
|
||||
|
||||
if ($@ !~ /timeout at/) {
|
||||
my ($alert);
|
||||
while ($childs > 0 || kill(0, $child)) {
|
||||
if ((time - $alert) >= 60) {
|
||||
$alert = time;
|
||||
}
|
||||
}
|
||||
|
||||
$childs = 0;
|
||||
$CHILD_ERROR = $childerror{$child};
|
||||
$killsignal = $CHILD_ERROR & 127;
|
||||
$coredumped = $CHILD_ERROR & 127;
|
||||
}
|
||||
|
||||
$exitcode = $CHILD_ERROR >> 8;
|
||||
|
||||
if ($@ || ($exitcode != 0)) {
|
||||
chomp $@;
|
||||
if ($@ =~ /timeout/) {
|
||||
if (kill 0, $child) {
|
||||
# whoe it's still running
|
||||
if ($monitorfile) {
|
||||
my $size = -s $monitorfile;
|
||||
sleep $timeout;
|
||||
my $nsize = -s $monitorfile;
|
||||
if ($size != $nsize and kill 0, $child) {
|
||||
# well, file still growing, so the process seems still to work
|
||||
# go back to the eval{} block and enter select() again
|
||||
goto REENTRY;
|
||||
}
|
||||
else {
|
||||
# process no more running
|
||||
# reset $@ and go back to returncode check
|
||||
$@ = "";
|
||||
goto TRY;
|
||||
}
|
||||
}
|
||||
else {
|
||||
# get rid of it
|
||||
$$error .= "Timed out after $timeout seconds!\n";
|
||||
kill TERM => $child;
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
$$error .= $@;
|
||||
}
|
||||
return $exitcode;
|
||||
}
|
||||
else {
|
||||
return $exitcode;
|
||||
}
|
||||
}
|
||||
|
||||
sub reaper {
|
||||
my $pid;
|
||||
while (1) {
|
||||
my $pid = waitpid(-1,WNOHANG);
|
||||
if ($pid) {
|
||||
$childs-- if $pid > 0;
|
||||
$childerror{$pid} = $CHILD_ERROR;
|
||||
last;
|
||||
}
|
||||
}
|
||||
$SIG{CHLD} = \&reaper;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user