<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <title>Creating a framework from the skeleton.</title> <meta name="GENERATOR" content="Modular DocBook HTML Stylesheet Version 1.79"> <link rel="HOME" title="XML Security Library Reference Manual" href="index.html"> <link rel="UP" title="Adding support for new cryptographic library." href="xmlsec-notes-new-crypto.html"> <link rel="PREVIOUS" title="Adding support for new cryptographic library." href="xmlsec-notes-new-crypto.html"> <link rel="NEXT" title="xmlSecCryptoApp* functions." href="xmlsec-notes-new-crypto-functions.html"> <style type="text/css">.synopsis, .classsynopsis { background: #eeeeee; border: solid 1px #aaaaaa; padding: 0.5em; } .programlisting { background: #eeeeff; border: solid 1px #aaaaff; padding: 0.5em; } .variablelist { padding: 4px; margin-left: 3em; } .navigation { background: #ffeeee; border: solid 1px #ffaaaa; margin-top: 0.5em; margin-bottom: 0.5em; } .navigation a { color: #770000; } .navigation a:visited { color: #550000; } .navigation .title { font-size: 200%; }</style> </head> <body><table witdh="100%" valign="top"><tr valign="top"> <td valign="top" align="left" width="210"> <img src="../images/logo.gif" alt="XML Security Library" border="0"><p></p> <ul> <li><a href="../index.html">Home</a></li> <li><a href="../download.html">Download</a></li> <li><a href="../news.html">News</a></li> <li><a href="../documentation.html">Documentation</a></li> <ul> <li><a href="../faq.html">FAQ</a></li> <li><a href="../api/xmlsec-notes.html">Tutorial</a></li> <li><a href="../api/xmlsec-reference.html">API reference</a></li> <li><a href="../api/xmlsec-examples.html">Examples</a></li> </ul> <li><a href="../xmldsig.html">XML Digital Signature</a></li> <ul><li><a href="http://www.aleksey.com/xmlsec/xmldsig-verifier.html">Online Verifier</a></li></ul> <li><a href="../xmlenc.html">XML Encryption</a></li> <li><a href="../c14n.html">XML Canonicalization</a></li> <li><a href="../bugs.html">Reporting Bugs</a></li> <li><a href="http://www.aleksey.com/pipermail/xmlsec">Mailing list</a></li> <li><a href="../related.html">Related</a></li> <li><a href="../authors.html">Authors</a></li> </ul> <table width="100%"> <tr> <td width="15"></td> <td><a href="http://xmlsoft.org/"><img src="../images/libxml2-logo.png" alt="LibXML2" border="0"></a></td> </tr> <tr> <td width="15"></td> <td><a href="http://xmlsoft.org/XSLT"><img src="../images/libxslt-logo.png" alt="LibXSLT" border="0"></a></td> </tr> <tr> <td width="15"></td> <td><a href="http://www.openssl.org/"><img src="../images/openssl-logo.png" alt="OpenSSL" border="0"></a></td> </tr> <!--Links - start--><!--Links - end--> </table> </td> <td valign="top"><table width="100%" valign="top"><tr><td valign="top" align="left" id="xmlsecContent"> <table width="100%" class="navigation" summary="Navigation header" cellpadding="2" cellspacing="2"><tr valign="middle"> <td><a accesskey="p" href="xmlsec-notes-new-crypto.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td> <td><a accesskey="u" href="xmlsec-notes-new-crypto.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td> <td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td> <th width="100%" align="center">XML Security Library Reference Manual</th> <td><a accesskey="n" href="xmlsec-notes-new-crypto-functions.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td> </tr></table> <br clear="all"><div class="SECT1"> <h1 class="SECT1"><a name="XMLSEC-NOTES-NEW-CRYPTO-SKELETON">Creating a framework from the skeleton.</a></h1> <p> 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): </p> <p></p> <ul> <li> <p> Copy src/skeleton and include/xmlsec/skeleton folders to src/mycrypto and include/xmlsec/mycrypto folders and remove CVS folders from the result: </p> <div class="EXAMPLE"> <a name="AEN512"></a><p><b>Example 1. Coping skeleton folders.</b></p> <pre class="PROGRAMLISTING">cd src cp -r skeleton mycrypto cd mycrypto rm -rf CVS cd ../.. cd include/xmlsec cp -r skeleton mycrypto cd mycrypto rm -rf CVS cd ../../.. </pre> </div> </li> <li> <p> Replace "skeleton" with "mycrypto" in the copied files (note that there are different possible cases here): </p> <div class="EXAMPLE"> <a name="AEN517"></a><p><b>Example 2. Replacing "skeleton" with "mycrypto".</b></p> <pre class="PROGRAMLISTING">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 </pre> </div> </li> <li> <p> Add "xmlsec-mycrypto" library to the "include/xmlsec/crypto.h" file: </p> <div class="EXAMPLE"> <a name="AEN522"></a><p><b>Example 3. Modifying include/xmlsec/crypto.h file.</b></p> <pre class="PROGRAMLISTING">... #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 */ ... </pre> </div> </li> <li> <p> 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): </p> <div class="EXAMPLE"> <a name="AEN527"></a><p><b>Example 4. Modifying configure.in file.</b></p> <pre class="PROGRAMLISTING">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 ... ]) </pre> </div> </li> <li><p>Modify "xmlsec.spec.in" file to create "xmlsec-mycrypto" RPM (if necessary). </p></li> </ul> 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): <div class="EXAMPLE"> <a name="AEN532"></a><p><b>Example 5. Compiling the results.</b></p> <pre class="PROGRAMLISTING">./autogen.sh --without-openssl --without-nss --without-gnutls --without-gcrypt \ --with-mycrypto=$HOME --disable-tmpl-tests make </pre> </div> </div> <table class="navigation" width="100%" summary="Navigation footer" cellpadding="2" cellspacing="2"><tr valign="middle"> <td align="left"><a accesskey="p" href="xmlsec-notes-new-crypto.html"><b><<< Adding support for new cryptographic library.</b></a></td> <td align="right"><a accesskey="n" href="xmlsec-notes-new-crypto-functions.html"><b>xmlSecCryptoApp* functions. >>></b></a></td> </tr></table> </td></tr></table></td> </tr></table></body> </html>