Skip to content

Commit

Permalink
Add basic cryptographic functions (#39)
Browse files Browse the repository at this point in the history
  • Loading branch information
chpock committed Jul 7, 2024
1 parent d8f5661 commit 5d5eb24
Show file tree
Hide file tree
Showing 13 changed files with 713 additions and 1 deletion.
3 changes: 3 additions & 0 deletions ChangeLog
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
2024-07-07 Konstantin Kushnir <[email protected]>
* Add basic cryptographic functions

2024-06-23 Konstantin Kushnir <[email protected]>
* Bumped version to 1.8.0

Expand Down
151 changes: 151 additions & 0 deletions configure
Original file line number Diff line number Diff line change
Expand Up @@ -657,6 +657,8 @@ MAKE_LIB
EGREP
GREP
COOKFS_PKGCONFIG_USECPKGCONFIG
COOKFS_PKGCONFIG_FEATURE_CRYPT
COOKFS_PKGCONFIG_USECCRYPT
COOKFS_PKGCONFIG_USETCLCMDS
COOKFS_PKGCONFIG_USECWRITER
COOKFS_PKGCONFIG_USECVFS
Expand Down Expand Up @@ -800,6 +802,7 @@ enable_c_writerchannel
enable_c_pkgconfig
enable_c_vfs
enable_c_writer
enable_c_crypt
enable_tcl_commands
'
ac_precious_vars='build_alias
Expand Down Expand Up @@ -1450,6 +1453,7 @@ Optional Features:
--disable-c-pkgconfig Use pkgconfig written in C. Defaults to true
--disable-c-vfs Use VFS support written in C. Defaults to true
--disable-c-writer Use writer handler written in C. Defaults to true
--disable-c-crypt Use crypt functions written in C. Defaults to true
--disable-tcl-commands Enable Tcl commands for objects. Defaults to true
Optional Packages:
Expand Down Expand Up @@ -8687,6 +8691,14 @@ else $as_nop
USECWRITER=yes
fi

# Check whether --enable-c-crypt was given.
if test ${enable_c_crypt+y}
then :
enableval=$enable_c_crypt; USECCRYPT=${enableval}
else $as_nop
USECCRYPT=yes
fi

# Check whether --enable-tcl-commands was given.
if test ${enable_tcl_commands+y}
then :
Expand Down Expand Up @@ -8736,6 +8748,140 @@ fi



if test ${USECCRYPT} = yes; then
printf "%s\n" "#define COOKFS_USECRYPT 1" >>confdefs.h

printf "%s\n" "#define COOKFS_USECCRYPT 1" >>confdefs.h

COOKFS_PKGCONFIG_USECCRYPT=1
COOKFS_PKGCONFIG_FEATURE_CRYPT=1

vars="crypt.c cryptCmd.c"
for i in $vars; do
case $i in
\$*)
# allow $-var names
PKG_SOURCES="$PKG_SOURCES $i"
PKG_OBJECTS="$PKG_OBJECTS $i"
;;
*)
# check for existence - allows for generic/win/unix VPATH
# To add more dirs here (like 'src'), you have to update VPATH
# in Makefile.in as well
if test ! -f "${srcdir}/$i" -a ! -f "${srcdir}/generic/$i" \
-a ! -f "${srcdir}/win/$i" -a ! -f "${srcdir}/unix/$i" \
-a ! -f "${srcdir}/macosx/$i" \
; then
as_fn_error $? "could not find source file '$i'" "$LINENO" 5
fi
PKG_SOURCES="$PKG_SOURCES $i"
# this assumes it is in a VPATH dir
i=`basename $i`
# handle user calling this before or after TEA_SETUP_COMPILER
if test x"${OBJEXT}" != x ; then
j="`echo $i | sed -e 's/\.[^.]*$//'`.${OBJEXT}"
else
j="`echo $i | sed -e 's/\.[^.]*$//'`.\${OBJEXT}"
fi
PKG_OBJECTS="$PKG_OBJECTS $j"
;;
esac
done




vars="7zip/C/Aes.c 7zip/C/AesOpt.c 7zip/C/Sha256.c 7zip/C/Sha256Opt.c"
for i in $vars; do
case $i in
\$*)
# allow $-var names
PKG_SOURCES="$PKG_SOURCES $i"
PKG_OBJECTS="$PKG_OBJECTS $i"
;;
*)
# check for existence - allows for generic/win/unix VPATH
# To add more dirs here (like 'src'), you have to update VPATH
# in Makefile.in as well
if test ! -f "${srcdir}/$i" -a ! -f "${srcdir}/generic/$i" \
-a ! -f "${srcdir}/win/$i" -a ! -f "${srcdir}/unix/$i" \
-a ! -f "${srcdir}/macosx/$i" \
; then
as_fn_error $? "could not find source file '$i'" "$LINENO" 5
fi
PKG_SOURCES="$PKG_SOURCES $i"
# this assumes it is in a VPATH dir
i=`basename $i`
# handle user calling this before or after TEA_SETUP_COMPILER
if test x"${OBJEXT}" != x ; then
j="`echo $i | sed -e 's/\.[^.]*$//'`.${OBJEXT}"
else
j="`echo $i | sed -e 's/\.[^.]*$//'`.\${OBJEXT}"
fi
PKG_OBJECTS="$PKG_OBJECTS $j"
;;
esac
done



if test "${TEA_PLATFORM}" = "windows" ; then

vars="-lbcrypt"
for i in $vars; do
if test "${TEA_PLATFORM}" = "windows" -a "$GCC" = "yes" ; then
# Convert foo.lib to -lfoo for GCC. No-op if not *.lib
i=`echo "$i" | sed -e 's/^\([^-].*\)\.[lL][iI][bB]$/-l\1/'`
fi
PKG_LIBS="$PKG_LIBS $i"
done


fi
# Include CpuArch.c only if we are not using c-lzma. Otherwise, this file
# will be included when processing the lzma option.
if test ${USECPAGES} != yes || test ${USELZMA} != yes; then

vars="7zip/C/CpuArch.c"
for i in $vars; do
case $i in
\$*)
# allow $-var names
PKG_SOURCES="$PKG_SOURCES $i"
PKG_OBJECTS="$PKG_OBJECTS $i"
;;
*)
# check for existence - allows for generic/win/unix VPATH
# To add more dirs here (like 'src'), you have to update VPATH
# in Makefile.in as well
if test ! -f "${srcdir}/$i" -a ! -f "${srcdir}/generic/$i" \
-a ! -f "${srcdir}/win/$i" -a ! -f "${srcdir}/unix/$i" \
-a ! -f "${srcdir}/macosx/$i" \
; then
as_fn_error $? "could not find source file '$i'" "$LINENO" 5
fi
PKG_SOURCES="$PKG_SOURCES $i"
# this assumes it is in a VPATH dir
i=`basename $i`
# handle user calling this before or after TEA_SETUP_COMPILER
if test x"${OBJEXT}" != x ; then
j="`echo $i | sed -e 's/\.[^.]*$//'`.${OBJEXT}"
else
j="`echo $i | sed -e 's/\.[^.]*$//'`.\${OBJEXT}"
fi
PKG_OBJECTS="$PKG_OBJECTS $j"
;;
esac
done



fi
else
COOKFS_PKGCONFIG_USECCRYPT=0
COOKFS_PKGCONFIG_FEATURE_CRYPT=0
fi

if test ${USECPAGES} = yes; then
printf "%s\n" "#define COOKFS_USECPAGES 1" >>confdefs.h

Expand Down Expand Up @@ -9656,6 +9802,7 @@ fi




if test ${USECPKGCONFIG} = yes; then
COOKFS_PKGCONFIG_USECPKGCONFIG=1
printf "%s\n" "#define COOKFS_PKGCONFIG_FEATURE_ASIDE $COOKFS_PKGCONFIG_FEATURE_ASIDE" >>confdefs.h
Expand Down Expand Up @@ -9686,6 +9833,10 @@ if test ${USECPKGCONFIG} = yes; then

printf "%s\n" "#define COOKFS_PKGCONFIG_USETCLCMDS $COOKFS_PKGCONFIG_USETCLCMDS" >>confdefs.h

printf "%s\n" "#define COOKFS_PKGCONFIG_USECCRYPT $COOKFS_PKGCONFIG_USECCRYPT" >>confdefs.h

printf "%s\n" "#define COOKFS_PKGCONFIG_FEATURE_CRYPT $COOKFS_PKGCONFIG_FEATURE_CRYPT" >>confdefs.h


printf "%s\n" "#define COOKFS_USECPKGCONFIG 1" >>confdefs.h

Expand Down
26 changes: 25 additions & 1 deletion configure.in
Original file line number Diff line number Diff line change
Expand Up @@ -127,6 +127,7 @@ AC_ARG_ENABLE(c-writerchannel, [ --disable-c-writerchannel Use writer handler w
AC_ARG_ENABLE(c-pkgconfig, [ --disable-c-pkgconfig Use pkgconfig written in C. Defaults to true], USECPKGCONFIG=${enableval}, USECPKGCONFIG=yes)
AC_ARG_ENABLE(c-vfs, [ --disable-c-vfs Use VFS support written in C. Defaults to true], USECVFS=${enableval}, USECVFS=yes)
AC_ARG_ENABLE(c-writer, [ --disable-c-writer Use writer handler written in C. Defaults to true], USECWRITER=${enableval}, USECWRITER=yes)
AC_ARG_ENABLE(c-crypt, [ --disable-c-crypt Use crypt functions written in C. Defaults to true], USECCRYPT=${enableval}, USECCRYPT=yes)
AC_ARG_ENABLE(tcl-commands, [ --disable-tcl-commands Enable Tcl commands for objects. Defaults to true], USETCLCMDS=${enableval}, USETCLCMDS=yes)


Expand All @@ -138,6 +139,26 @@ TEA_ADD_TCL_SOURCES([scripts/pages.tcl])
TEA_ADD_TCL_SOURCES([scripts/readerchannel.tcl])
TEA_ADD_TCL_SOURCES([scripts/fsindex.tcl])

if test ${USECCRYPT} = yes; then
AC_DEFINE(COOKFS_USECRYPT)
AC_DEFINE(COOKFS_USECCRYPT)
COOKFS_PKGCONFIG_USECCRYPT=1
COOKFS_PKGCONFIG_FEATURE_CRYPT=1
TEA_ADD_SOURCES([crypt.c cryptCmd.c])
TEA_ADD_SOURCES([7zip/C/Aes.c 7zip/C/AesOpt.c 7zip/C/Sha256.c 7zip/C/Sha256Opt.c])
if test "${TEA_PLATFORM}" = "windows" ; then
TEA_ADD_LIBS([-lbcrypt])
fi
# Include CpuArch.c only if we are not using c-lzma. Otherwise, this file
# will be included when processing the lzma option.
if test ${USECPAGES} != yes || test ${USELZMA} != yes; then
TEA_ADD_SOURCES([7zip/C/CpuArch.c])
fi
else
COOKFS_PKGCONFIG_USECCRYPT=0
COOKFS_PKGCONFIG_FEATURE_CRYPT=0
fi

if test ${USECPAGES} = yes; then
AC_DEFINE(COOKFS_USECPAGES)
COOKFS_PKGCONFIG_USECPAGES=1
Expand Down Expand Up @@ -365,7 +386,6 @@ else
COOKFS_PKGCONFIG_USETCLCMDS=1
fi


AC_SUBST(COOKFS_PKGCONFIG_FEATURE_ASIDE)
AC_SUBST(COOKFS_PKGCONFIG_USECPAGES)
AC_SUBST(COOKFS_PKGCONFIG_USECREADERCHAN)
Expand All @@ -379,6 +399,8 @@ AC_SUBST(COOKFS_PKGCONFIG_FEATURE_METADATA)
AC_SUBST(COOKFS_PKGCONFIG_USECVFS)
AC_SUBST(COOKFS_PKGCONFIG_USECWRITER)
AC_SUBST(COOKFS_PKGCONFIG_USETCLCMDS)
AC_SUBST(COOKFS_PKGCONFIG_USECCRYPT)
AC_SUBST(COOKFS_PKGCONFIG_FEATURE_CRYPT)

if test ${USECPKGCONFIG} = yes; then
COOKFS_PKGCONFIG_USECPKGCONFIG=1
Expand All @@ -396,6 +418,8 @@ if test ${USECPKGCONFIG} = yes; then
AC_DEFINE_UNQUOTED(COOKFS_PKGCONFIG_USECVFS, $COOKFS_PKGCONFIG_USECVFS)
AC_DEFINE_UNQUOTED(COOKFS_PKGCONFIG_USECWRITER, $COOKFS_PKGCONFIG_USECWRITER)
AC_DEFINE_UNQUOTED(COOKFS_PKGCONFIG_USETCLCMDS, $COOKFS_PKGCONFIG_USETCLCMDS)
AC_DEFINE_UNQUOTED(COOKFS_PKGCONFIG_USECCRYPT, $COOKFS_PKGCONFIG_USECCRYPT)
AC_DEFINE_UNQUOTED(COOKFS_PKGCONFIG_FEATURE_CRYPT, $COOKFS_PKGCONFIG_FEATURE_CRYPT)

AC_DEFINE(COOKFS_USECPKGCONFIG)
else
Expand Down
14 changes: 14 additions & 0 deletions generic/cookfs.c
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
*/

#include "cookfs.h"
#include "crypt.h"

#ifdef COOKFS_USECPAGES
#include "pagesCmd.h"
Expand All @@ -33,6 +34,10 @@
#include "writerchannelCmd.h"
#endif /* COOKFS_USECWRITERCHAN */

#ifdef COOKFS_USECCRYPT
#include "cryptCmd.h"
#endif /* COOKFS_USECCRYPT */

/*
*----------------------------------------------------------------------
*
Expand Down Expand Up @@ -118,6 +123,15 @@ Cookfs_Init(Tcl_Interp *interp) // cppcheck-suppress unusedFunction
return TCL_ERROR;
}

#if defined(COOKFS_USECCRYPT)
Cookfs_CryptInit();
#if defined(COOKFS_USETCLCMDS)
if (Cookfs_InitCryptCmd(interp) != TCL_OK) {
return TCL_ERROR;
}
#endif
#endif

#if defined(COOKFS_USECVFS)
if (Cookfs_InitVfsMountCmd(interp) != TCL_OK) {
return TCL_ERROR;
Expand Down
15 changes: 15 additions & 0 deletions generic/cookfs.h
Original file line number Diff line number Diff line change
Expand Up @@ -20,9 +20,18 @@
#include <assert.h>

#ifdef COOKFS_INTERNAL_DEBUG
#ifndef __FUNCTION_NAME__
#ifdef _WIN32 // WINDOWS
#define __FUNCTION_NAME__ __FUNCTION__
#else // GCC
#define __FUNCTION_NAME__ __func__
#endif
#endif
#define CookfsLog(a) {a; printf("\n"); fflush(stdout);}
#define CookfsLog2(a) {printf("%s: ", __FUNCTION_NAME__); a; printf("\n"); fflush(stdout);}
#else
#define CookfsLog(a) {}
#define CookfsLog2(a) {}
#endif

#define UNUSED(expr) do { (void)(expr); } while (0)
Expand All @@ -49,6 +58,10 @@
#define Tcl_NewSizeIntFromObj Tcl_NewWideIntObj
#endif /* TCL_SIZE_MAX */

#ifndef Tcl_BounceRefCount
#define Tcl_BounceRefCount(x) Tcl_IncrRefCount((x));Tcl_DecrRefCount((x))
#endif

#define SET_ERROR(e) \
if (err != NULL) { *err = (e); }

Expand Down Expand Up @@ -90,6 +103,8 @@ static Tcl_Config const cookfs_pkgconfig[] = {
{"c-writerchannel", STRINGIFY(COOKFS_PKGCONFIG_USECWRITERCHAN)},
{"c-vfs", STRINGIFY(COOKFS_PKGCONFIG_USECVFS)},
{"c-writer", STRINGIFY(COOKFS_PKGCONFIG_USECWRITER)},
{"c-crypt", STRINGIFY(COOKFS_PKGCONFIG_USECCRYPT)},
{"feature-crypt", STRINGIFY(COOKFS_PKGCONFIG_FEATURE_CRYPT)},
{"feature-aside", STRINGIFY(COOKFS_PKGCONFIG_FEATURE_ASIDE)},
{"feature-bzip2", STRINGIFY(COOKFS_PKGCONFIG_USEBZ2)},
{"feature-lzma", STRINGIFY(COOKFS_PKGCONFIG_USELZMA)},
Expand Down
Loading

0 comments on commit 5d5eb24

Please sign in to comment.