The XML Security Library contains a "skeleton" for creating new "xmlsec-<crypto>" libraries. In order to create "xmlsec-mycrypto" library framework, do the following (this example assumes that you are using *nix system, adjust the commands if you are using something else):
Copy src/skeleton and include/xmlsec/skeleton folders to src/mycrypto and include/xmlsec/mycrypto folders:
Example 25. Coping skeleton folders:
cp -r src/skeleton src/mycrypto cp -r include/xmlsec/skeleton include/xmlsec/mycrypto
Replace "skeleton" with "mycrypto" in the copied files (note that there are different possible cases here):
Example 26. Replacing "skeleton" with "mycrypto".
for i in `ls include/xmlsec/mycrypto/* src/mycrypto/*`; do
echo Processing $i ..;
sed 's/skeleton/mycrypto/g' $i | \
sed 's/SKELETON/MYCRYPTO/g' | \
sed 's/Skeleton/MyCrypto/g' > $i.tmp;
mv $i.tmp $i;
done
Add "xmlsec-mycrypto" library to the "include/xmlsec/crypto.h" file:
Example 27. Modifying include/xmlsec/crypto.h file.
... #ifdef XMLSEC_CRYPTO_MYCRYPTO #include <xmlsec/mycrypto/app.h> #include <xmlsec/mycrypto/crypto.h> #include <xmlsec/mycrypto/symbols.h> #else /* XMLSEC_CRYPTO_MYCRYPTO */ ... #endif /* XMLSEC_CRYPTO_MYCRYPTO */ ...
Add "xmlsec-crypto" library to the configure.in file (for *nix systems; for Windows you need to modify win32/confgure.js and win32/Makefile.msvc files, see win32/README.txt for details):
Example 28. Modifying configure.in file.
dnl ==========================================================================
dnl See if we can find MyCrypto
dnl ==========================================================================
XMLSEC_MYCRYPTO_DEFINES=""
MYCRYPTO_CONFIG="mycrypto-config" # TODO
XMLSEC_NO_MYCRYPTO="1"
MYCRYPTO_MIN_VERSION="0.0.0" # TODO
MYCRYPTO_VERSION=""
MYCRYPTO_PREFIX=""
MYCRYPTO_CFLAGS=""
MYCRYPTO_LIBS=""
MYCRYPTO_LDADDS=""
AC_MSG_CHECKING(for mycrypto libraries >= $MYCRYPTO_MIN_VERSION)
AC_ARG_WITH(mycrypto, [ --with-mycrypto=[PFX] mycrypto location])
if test "$with_mycrypto" = "no" ; then
XMLSEC_CRYPTO_DISABLED_LIST="$XMLSEC_CRYPTO_DISABLED_LIST mycrypto"
AC_MSG_RESULT(no)
else
if test "$with_mycrypto" != "" ; then
MYCRYPTO_PREFIX=$with_mycrypto
MYCRYPTO_CONFIG=$MYCRYPTO_PREFIX/bin/$MYCRYPTO_CONFIG
fi
if ! $MYCRYPTO_CONFIG --version > /dev/null 2>&1 ; then
if test "$with_mycrypto" != "" ; then
AC_MSG_ERROR(Unable to find mycrypto at '$with_mycrypto')
fi
else
vers=`$MYCRYPTO_CONFIG --version | awk -F. '{ printf "%d", ($1 * 1000 + $2) * 1000 + $3;}'`
minvers=`echo $MYCRYPTO_MIN_VERSION | awk -F. '{ printf "%d", ($1 * 1000 + $2) * 1000 + $3;}'`
if test "$vers" -ge "$minvers" ; then
MYCRYPTO_LIBS="`$MYCRYPTO_CONFIG --libs`"
MYCRYPTO_CFLAGS="`$MYCRYPTO_CONFIG --cflags`"
MYCRYPTO_VERSION="`$MYCRYPTO_CONFIG --version`"
XMLSEC_NO_MYCRYPTO="0"
else
AC_MSG_ERROR(You need at least mycrypto $MYCRYPTO_MIN_VERSION for this version of $PACKAGE)
fi
fi
dnl update crypt libraries list
if test "z$XMLSEC_NO_MYCRYPTO" = "z0" ; then
dnl first crypto library is default one
if test "z$XMLSEC_CRYPTO" = "z" ; then
XMLSEC_CRYPTO="mycrypto"
XMLSEC_CRYPTO_LIB="xmlsec1-mycrypto"
XMLSEC_CRYPTO_CFLAGS="$MYCRYPTO_CFLAGS -DXMLSEC_CRYPTO_MYCRYPTO=1"
XMLSEC_CRYPTO_LIBS="$MYCRYPTO_LIBS"
XMLSEC_CRYPTO_LDADDS="$MYCRYPTO_LDADDS"
fi
XMLSEC_CRYPTO_LIST="$XMLSEC_CRYPTO_LIST mycrypto"
AC_MSG_RESULT(yes ('$MYCRYPTO_VERSION'))
else
XMLSEC_CRYPTO_DISABLED_LIST="$XMLSEC_CRYPTO_DISABLED_LIST mycrypto"
AC_MSG_RESULT(no)
fi
fi
AC_SUBST(XMLSEC_NO_MYCRYPTO)
AC_SUBST(MYCRYPTO_MIN_VERSION)
AC_SUBST(MYCRYPTO_VERSION)
AC_SUBST(MYCRYPTO_CONFIG)
AC_SUBST(MYCRYPTO_PREFIX)
AC_SUBST(MYCRYPTO_CFLAGS)
AC_SUBST(MYCRYPTO_LIBS)
AC_SUBST(MYCRYPTO_LDADDS)
AC_SUBST(XMLSEC_MYCRYPTO_DEFINES)
...
AC_OUTPUT([
...
include/xmlsec/mycrypto/Makefile
src/mycrypto/Makefile
...
])
Modify "xmlsec.spec.in" file to create "xmlsec-mycrypto" RPM (if necessary).
By now you should be able to sucessfuly compile XML Security Library with MyCrypto library (we disable all other libraries to make sure that xmlsec command line utility is linked against xmlsec-mycrypto library):
Example 29. Compiling the results.
./autogen.sh --without-openssl --without-nss --without-gnutls --without-gcrypt \
--with-mycrypto=$HOME --disable-tmpl-tests
make