summaryrefslogtreecommitdiff
path: root/libxmlsec
diff options
context:
space:
mode:
authorVladimir Glazounov <vg@openoffice.org>2009-01-22 17:14:08 +0000
committerVladimir Glazounov <vg@openoffice.org>2009-01-22 17:14:08 +0000
commite57e55b1aa43ac626891d3ccfa185bf623b16ddf (patch)
treebb41dce98dd9746a2e3359a1fa9f9b88fc3e9a1e /libxmlsec
parentb12b88e2d9e3bfe8f6085ee583658c7e71018f16 (diff)
#i10000# missing changes from jl111
Diffstat (limited to 'libxmlsec')
-rw-r--r--libxmlsec/xmlsec1-1.2.6.patch32871
1 files changed, 15350 insertions, 17521 deletions
diff --git a/libxmlsec/xmlsec1-1.2.6.patch b/libxmlsec/xmlsec1-1.2.6.patch
index 8005fb5b2b5e..eb5153d99a18 100644
--- a/libxmlsec/xmlsec1-1.2.6.patch
+++ b/libxmlsec/xmlsec1-1.2.6.patch
@@ -1,17534 +1,15363 @@
-*** misc/xmlsec1-1.2.6/apps/Makefile.in Thu Aug 26 08:00:30 2004
---- misc/build/xmlsec1-1.2.6/apps/Makefile.in Fri May 11 14:47:19 2007
-***************
-*** 370,376 ****
- $(CRYPTO_DEPS) \
- $(NULL)
-
-! all: all-am
-
- .SUFFIXES:
- .SUFFIXES: .c .lo .o .obj
---- 370,376 ----
- $(CRYPTO_DEPS) \
- $(NULL)
-
-! all:
-
- .SUFFIXES:
- .SUFFIXES: .c .lo .o .obj
-*** misc/xmlsec1-1.2.6/configure Thu Aug 26 08:00:34 2004
---- misc/build/xmlsec1-1.2.6/configure Fri May 11 14:47:19 2007
-***************
-*** 463,469 ****
- # include <unistd.h>
- #endif"
-
-! ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS build build_cpu build_vendor build_os host host_cpu host_vendor host_os XMLSEC_VERSION XMLSEC_PACKAGE XMLSEC_VERSION_SAFE XMLSEC_VERSION_MAJOR XMLSEC_VERSION_MINOR XMLSEC_VERSION_SUBMINOR XMLSEC_VERSION_INFO INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA CYGPATH_W PACKAGE VERSION ACLOCAL AUTOCONF AUTOMAKE AUTOHEADER MAKEINFO AMTAR install_sh STRIP ac_ct_STRIP INSTALL_STRIP_PROGRAM mkdir_p AWK SET_MAKE am__leading_dot MAINTAINER_MODE_TRUE MAINTAINER_MODE_FALSE MAINT CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT DEPDIR am__include am__quote AMDEP_TRUE AMDEP_FALSE AMDEPBACKSLASH CCDEPMODE am__fastdepCC_TRUE am__fastdepCC_FALSE EGREP LN_S ECHO AR ac_ct_AR RANLIB ac_ct_RANLIB CPP CXX CXXFLAGS ac_ct_CXX CXXDEPMODE am__fastdepCXX_TRUE am__fastdepCXX_FALSE CXXCPP F77 FFLAGS ac_ct_F77 LIBTOOL RM CP MV TAR HELP2MAN MAN2HTML U ANSI2KNR INSTALL_LTDL_TRUE INSTALL_LTDL_FALSE CONVENIENCE_LTDL_TRUE CONVENIENCE_LTDL_FALSE LIBADD_DL PKG_CONFIG_ENABLED PKG_CONFIG LIBXML_CFLAGS LIBXML_LIBS LIBXML262_CFLAGS LIBXML262_LIBS LIBXML_CONFIG LIBXML_MIN_VERSION LIBXSLT_CFLAGS LIBXSLT_LIBS XMLSEC_NO_LIBXSLT LIBXSLT_CONFIG LIBXSLT_MIN_VERSION OPENSSL_CFLAGS OPENSSL_LIBS OPENSSL097_CFLAGS OPENSSL097_LIBS XMLSEC_NO_OPENSSL_TRUE XMLSEC_NO_OPENSSL_FALSE XMLSEC_NO_OPENSSL OPENSSL_CRYPTO_LIB OPENSSL_MIN_VERSION GNUTLS_CFLAGS GNUTLS_LIBS XMLSEC_NO_GNUTLS_TRUE XMLSEC_NO_GNUTLS_FALSE XMLSEC_NO_GNUTLS GNUTLS_CRYPTO_LIB GNUTLS_MIN_VERSION NSS_CFLAGS NSS_LIBS XMLSEC_NO_NSS_TRUE XMLSEC_NO_NSS_FALSE XMLSEC_NO_NSS NSS_CRYPTO_LIB NSS_MIN_VERSION NSPR_MIN_VERSION MOZILLA_MIN_VERSION XMLSEC_NO_SHA1_TRUE XMLSEC_NO_SHA1_FALSE XMLSEC_NO_SHA1 XMLSEC_NO_RIPEMD160_TRUE XMLSEC_NO_RIPEMD160_FALSE XMLSEC_NO_RIPEMD160 XMLSEC_NO_HMAC_TRUE XMLSEC_NO_HMAC_FALSE XMLSEC_NO_HMAC XMLSEC_NO_DSA_TRUE XMLSEC_NO_DSA_FALSE XMLSEC_NO_DSA XMLSEC_NO_RSA_TRUE XMLSEC_NO_RSA_FALSE XMLSEC_NO_RSA XMLSEC_NO_X509_TRUE XMLSEC_NO_X509_FALSE XMLSEC_NO_X509 XMLSEC_NO_DES_TRUE XMLSEC_NO_DES_FALSE XMLSEC_NO_DES XMLSEC_NO_AES_TRUE XMLSEC_NO_AES_FALSE XMLSEC_NO_AES XMLSEC_NO_XMLDSIG_TRUE XMLSEC_NO_XMLDSIG_FALSE XMLSEC_NO_XMLDSIG XMLSEC_NO_XMLENC_TRUE XMLSEC_NO_XMLENC_FALSE XMLSEC_NO_XMLENC XMLSEC_NO_XKMS_TRUE XMLSEC_NO_XKMS_FALSE XMLSEC_NO_XKMS XMLSEC_NO_CRYPTO_DYNAMIC_LOADING_TRUE XMLSEC_NO_CRYPTO_DYNAMIC_LOADING_FALSE XMLSEC_NO_CRYPTO_DYNAMIC_LOADING XMLSEC_DL_INCLUDES XMLSEC_DL_LIBS XMLSEC_NO_APPS_CRYPTO_DYNAMIC_LOADING_TRUE XMLSEC_NO_APPS_CRYPTO_DYNAMIC_LOADING_FALSE XMLSEC_NO_APPS_CRYPTO_DYNAMIC_LOADING XMLSEC_DOCDIR XMLSEC_STATIC_BINARIES XMLSEC_CORE_CFLAGS XMLSEC_CORE_LIBS XMLSEC_LIBDIR XMLSEC_OPENSSL_CFLAGS XMLSEC_OPENSSL_LIBS XMLSEC_GNUTLS_CFLAGS XMLSEC_GNUTLS_LIBS XMLSEC_NSS_CFLAGS XMLSEC_NSS_LIBS XMLSEC_CFLAGS XMLSEC_LIBS XMLSEC_DEFINES XMLSEC_APP_DEFINES XMLSEC_CRYPTO XMLSEC_CRYPTO_LIST XMLSEC_CRYPTO_DISABLED_LIST XMLSEC_CRYPTO_LIB XMLSEC_CRYPTO_CFLAGS XMLSEC_CRYPTO_LIBS XMLSEC_CRYPTO_PC_FILES_LIST LIBOBJS LTLIBOBJS'
- ac_subst_files=''
-
- # Initialize some variables set by options.
---- 463,469 ----
- # include <unistd.h>
- #endif"
-
-! ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS build build_cpu build_vendor build_os host host_cpu host_vendor host_os XMLSEC_VERSION XMLSEC_PACKAGE XMLSEC_VERSION_SAFE XMLSEC_VERSION_MAJOR XMLSEC_VERSION_MINOR XMLSEC_VERSION_SUBMINOR XMLSEC_VERSION_INFO INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA CYGPATH_W PACKAGE VERSION ACLOCAL AUTOCONF AUTOMAKE AUTOHEADER MAKEINFO AMTAR install_sh STRIP ac_ct_STRIP INSTALL_STRIP_PROGRAM mkdir_p AWK SET_MAKE am__leading_dot MAINTAINER_MODE_TRUE MAINTAINER_MODE_FALSE MAINT CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT DEPDIR am__include am__quote AMDEP_TRUE AMDEP_FALSE AMDEPBACKSLASH CCDEPMODE am__fastdepCC_TRUE am__fastdepCC_FALSE EGREP LN_S ECHO AR ac_ct_AR RANLIB ac_ct_RANLIB CPP CXX CXXFLAGS ac_ct_CXX CXXDEPMODE am__fastdepCXX_TRUE am__fastdepCXX_FALSE CXXCPP F77 FFLAGS ac_ct_F77 LIBTOOL RM CP MV TAR HELP2MAN MAN2HTML U ANSI2KNR INSTALL_LTDL_TRUE INSTALL_LTDL_FALSE CONVENIENCE_LTDL_TRUE CONVENIENCE_LTDL_FALSE LIBADD_DL PKG_CONFIG_ENABLED PKG_CONFIG LIBXML_CFLAGS LIBXML_LIBS LIBXML262_CFLAGS LIBXML262_LIBS LIBXML_CONFIG LIBXML_MIN_VERSION LIBXSLT_CFLAGS LIBXSLT_LIBS XMLSEC_NO_LIBXSLT LIBXSLT_CONFIG LIBXSLT_MIN_VERSION OPENSSL_CFLAGS OPENSSL_LIBS OPENSSL097_CFLAGS OPENSSL097_LIBS XMLSEC_NO_OPENSSL_TRUE XMLSEC_NO_OPENSSL_FALSE XMLSEC_NO_OPENSSL OPENSSL_CRYPTO_LIB OPENSSL_MIN_VERSION GNUTLS_CFLAGS GNUTLS_LIBS XMLSEC_NO_GNUTLS_TRUE XMLSEC_NO_GNUTLS_FALSE XMLSEC_NO_GNUTLS GNUTLS_CRYPTO_LIB GNUTLS_MIN_VERSION NSS_CFLAGS NSS_LIBS XMLSEC_NO_NSS_TRUE XMLSEC_NO_NSS_FALSE XMLSEC_NO_NSS NSS_CRYPTO_LIB NSS_MIN_VERSION NSPR_MIN_VERSION MOZILLA_MIN_VERSION MSCRYPTO_CFLAGS MSCRYPTO_LIBS XMLSEC_NO_SHA1_TRUE XMLSEC_NO_SHA1_FALSE XMLSEC_NO_SHA1 XMLSEC_NO_RIPEMD160_TRUE XMLSEC_NO_RIPEMD160_FALSE XMLSEC_NO_RIPEMD160 XMLSEC_NO_HMAC_TRUE XMLSEC_NO_HMAC_FALSE XMLSEC_NO_HMAC XMLSEC_NO_DSA_TRUE XMLSEC_NO_DSA_FALSE XMLSEC_NO_DSA XMLSEC_NO_RSA_TRUE XMLSEC_NO_RSA_FALSE XMLSEC_NO_RSA XMLSEC_NO_X509_TRUE XMLSEC_NO_X509_FALSE XMLSEC_NO_X509 XMLSEC_NO_DES_TRUE XMLSEC_NO_DES_FALSE XMLSEC_NO_DES XMLSEC_NO_AES_TRUE XMLSEC_NO_AES_FALSE XMLSEC_NO_AES XMLSEC_NO_XMLDSIG_TRUE XMLSEC_NO_XMLDSIG_FALSE XMLSEC_NO_XMLDSIG XMLSEC_NO_XMLENC_TRUE XMLSEC_NO_XMLENC_FALSE XMLSEC_NO_XMLENC XMLSEC_NO_XKMS_TRUE XMLSEC_NO_XKMS_FALSE XMLSEC_NO_XKMS XMLSEC_NO_CRYPTO_DYNAMIC_LOADING_TRUE XMLSEC_NO_CRYPTO_DYNAMIC_LOADING_FALSE XMLSEC_NO_CRYPTO_DYNAMIC_LOADING XMLSEC_DL_INCLUDES XMLSEC_DL_LIBS XMLSEC_NO_APPS_CRYPTO_DYNAMIC_LOADING_TRUE XMLSEC_NO_APPS_CRYPTO_DYNAMIC_LOADING_FALSE XMLSEC_NO_APPS_CRYPTO_DYNAMIC_LOADING XMLSEC_DOCDIR XMLSEC_STATIC_BINARIES XMLSEC_CORE_CFLAGS XMLSEC_CORE_LIBS XMLSEC_LIBDIR XMLSEC_OPENSSL_CFLAGS XMLSEC_OPENSSL_LIBS XMLSEC_GNUTLS_CFLAGS XMLSEC_GNUTLS_LIBS XMLSEC_NSS_CFLAGS XMLSEC_NSS_LIBS XMLSEC_CFLAGS XMLSEC_LIBS XMLSEC_DEFINES XMLSEC_APP_DEFINES XMLSEC_CRYPTO XMLSEC_CRYPTO_LIST XMLSEC_CRYPTO_DISABLED_LIST XMLSEC_CRYPTO_LIB XMLSEC_CRYPTO_CFLAGS XMLSEC_CRYPTO_LIBS XMLSEC_CRYPTO_PC_FILES_LIST LIBOBJS LTLIBOBJS'
- ac_subst_files=''
-
- # Initialize some variables set by options.
-***************
-*** 1072,1077 ****
---- 1072,1078 ----
- --with-nss=PFX nss location
- --with-nspr=PFX nspr location (needed for NSS)
- --with-mozilla-ver=VER mozilla version (alt to --with-nss, --with-nspr)
-+ --with-mscrypto try to use mscrypto
- --with-html-dir=PATH path to installed docs
-
- Some influential environment variables:
-***************
-*** 2045,2052 ****
-
- ac_ext=c
- ac_cpp='$CPP $CPPFLAGS'
-! ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-! ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
- ac_compiler_gnu=$ac_cv_c_compiler_gnu
- if test -n "$ac_tool_prefix"; then
- # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
---- 2046,2053 ----
-
- ac_ext=c
- ac_cpp='$CPP $CPPFLAGS'
-! ac_compile='$CC -c $ADDCFLAGS $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-! ac_link='$CC -o conftest$ac_exeext $ADDCFLAGS $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
- ac_compiler_gnu=$ac_cv_c_compiler_gnu
- if test -n "$ac_tool_prefix"; then
- # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
-***************
-*** 2698,2712 ****
- CFLAGS=$ac_save_CFLAGS
- elif test $ac_cv_prog_cc_g = yes; then
- if test "$GCC" = yes; then
-! CFLAGS="-g -O2"
- else
-! CFLAGS="-g"
- fi
- else
- if test "$GCC" = yes; then
-! CFLAGS="-O2"
- else
-! CFLAGS=
- fi
- fi
- echo "$as_me:$LINENO: checking for $CC option to accept ANSI C" >&5
---- 2699,2713 ----
- CFLAGS=$ac_save_CFLAGS
- elif test $ac_cv_prog_cc_g = yes; then
- if test "$GCC" = yes; then
-! CFLAGS="$ADDCFLAGS -g -O2"
- else
-! CFLAGS="$ADDCFLAGS -g"
- fi
- else
- if test "$GCC" = yes; then
-! CFLAGS="$ADDCFLAGS -O2"
- else
-! CFLAGS="$ADDCFLAGS"
- fi
- fi
- echo "$as_me:$LINENO: checking for $CC option to accept ANSI C" >&5
-***************
-*** 6350,6360 ****
- lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4'
- ;;
-
-! beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
- # PIC is the default for these OSes.
- ;;
-
-! mingw* | pw32* | os2*)
- # This hack is so that the source file can tell whether it is being
- # built for inclusion in a dll (and should export symbols for example).
- lt_prog_compiler_pic='-DDLL_EXPORT'
---- 6351,6361 ----
- lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4'
- ;;
-
-! beos* | cygwin* | mingw* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
- # PIC is the default for these OSes.
- ;;
-
-! pw32* | os2*)
- # This hack is so that the source file can tell whether it is being
- # built for inclusion in a dll (and should export symbols for example).
- lt_prog_compiler_pic='-DDLL_EXPORT'
-***************
-*** 6409,6415 ****
- fi
- ;;
-
-! mingw* | pw32* | os2*)
- # This hack is so that the source file can tell whether it is being
- # built for inclusion in a dll (and should export symbols for example).
- lt_prog_compiler_pic='-DDLL_EXPORT'
---- 6410,6416 ----
- fi
- ;;
-
-! pw32* | os2*)
- # This hack is so that the source file can tell whether it is being
- # built for inclusion in a dll (and should export symbols for example).
- lt_prog_compiler_pic='-DDLL_EXPORT'
-***************
-*** 6752,6758 ****
- export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGS] /s/.* \([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW] /s/.* //'\'' | sort | uniq > $export_symbols'
-
- if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then
-! archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib'
- # If the export-symbols file already is a .def file (1st line
- # is EXPORTS), use it as is; otherwise, prepend...
- archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
---- 6753,6759 ----
- export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGS] /s/.* \([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW] /s/.* //'\'' | sort | uniq > $export_symbols'
-
- if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then
-! archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--exclude-libs,ALL ${wl}--out-implib,$lib'
- # If the export-symbols file already is a .def file (1st line
- # is EXPORTS), use it as is; otherwise, prepend...
- archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
-***************
-*** 7778,7784 ****
- ;;
-
- freebsd*)
-! objformat=`test -x /usr/bin/objformat && /usr/bin/objformat || echo aout`
- version_type=freebsd-$objformat
- case $version_type in
- freebsd-elf*)
---- 7779,7785 ----
- ;;
-
- freebsd*)
-! objformat=`test -x /usr/bin/objformat && /usr/bin/objformat || echo elf`
- version_type=freebsd-$objformat
- case $version_type in
- freebsd-elf*)
-***************
-*** 9046,9052 ****
- ;;
- esac
- output_verbose_link_cmd='echo'
-! archive_cmds='$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs$compiler_flags -install_name $rpath/$soname $verstring'
- module_cmds='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags'
- # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's
- archive_expsym_cmds='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs$compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
---- 9047,9053 ----
- ;;
- esac
- output_verbose_link_cmd='echo'
-! archive_cmds='$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs$compiler_flags -install_name @executable_path/$soname $verstring'
- module_cmds='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags'
- # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's
- archive_expsym_cmds='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs$compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
-***************
-*** 10088,10094 ****
- enable_shared_with_static_runtimes_CXX=yes
-
- if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then
-! archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib'
- # If the export-symbols file already is a .def file (1st line
- # is EXPORTS), use it as is; otherwise, prepend...
- archive_expsym_cmds_CXX='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
---- 10089,10095 ----
- enable_shared_with_static_runtimes_CXX=yes
-
- if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then
-! archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--exclude-libs,ALL ${wl}--out-implib,$lib'
- # If the export-symbols file already is a .def file (1st line
- # is EXPORTS), use it as is; otherwise, prepend...
- archive_expsym_cmds_CXX='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
-***************
-*** 10816,10825 ****
- # like `-m68040'.
- lt_prog_compiler_pic_CXX='-m68020 -resident32 -malways-restore-a4'
- ;;
-! beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
- # PIC is the default for these OSes.
- ;;
-! mingw* | os2* | pw32*)
- # This hack is so that the source file can tell whether it is being
- # built for inclusion in a dll (and should export symbols for example).
- lt_prog_compiler_pic_CXX='-DDLL_EXPORT'
---- 10817,10826 ----
- # like `-m68040'.
- lt_prog_compiler_pic_CXX='-m68020 -resident32 -malways-restore-a4'
- ;;
-! beos* | cygwin* | mingw* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
- # PIC is the default for these OSes.
- ;;
-! os2* | pw32*)
- # This hack is so that the source file can tell whether it is being
- # built for inclusion in a dll (and should export symbols for example).
- lt_prog_compiler_pic_CXX='-DDLL_EXPORT'
-***************
-*** 11497,11503 ****
- ;;
-
- freebsd*)
-! objformat=`test -x /usr/bin/objformat && /usr/bin/objformat || echo aout`
- version_type=freebsd-$objformat
- case $version_type in
- freebsd-elf*)
---- 11498,11504 ----
- ;;
-
- freebsd*)
-! objformat=`test -x /usr/bin/objformat && /usr/bin/objformat || echo elf`
- version_type=freebsd-$objformat
- case $version_type in
- freebsd-elf*)
-***************
-*** 13259,13269 ****
- lt_prog_compiler_pic_F77='-m68020 -resident32 -malways-restore-a4'
- ;;
-
-! beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
- # PIC is the default for these OSes.
- ;;
-
-! mingw* | pw32* | os2*)
- # This hack is so that the source file can tell whether it is being
- # built for inclusion in a dll (and should export symbols for example).
- lt_prog_compiler_pic_F77='-DDLL_EXPORT'
---- 13260,13270 ----
- lt_prog_compiler_pic_F77='-m68020 -resident32 -malways-restore-a4'
- ;;
-
-! beos* | cygwin* | mingw* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
- # PIC is the default for these OSes.
- ;;
-
-! pw32* | os2*)
- # This hack is so that the source file can tell whether it is being
- # built for inclusion in a dll (and should export symbols for example).
- lt_prog_compiler_pic_F77='-DDLL_EXPORT'
-***************
-*** 13661,13667 ****
- export_symbols_cmds_F77='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGS] /s/.* \([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW] /s/.* //'\'' | sort | uniq > $export_symbols'
-
- if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then
-! archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib'
- # If the export-symbols file already is a .def file (1st line
- # is EXPORTS), use it as is; otherwise, prepend...
- archive_expsym_cmds_F77='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
---- 13662,13668 ----
- export_symbols_cmds_F77='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGS] /s/.* \([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW] /s/.* //'\'' | sort | uniq > $export_symbols'
-
- if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then
-! archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--exclude-libs,ALL ${wl}--out-implib,$lib'
- # If the export-symbols file already is a .def file (1st line
- # is EXPORTS), use it as is; otherwise, prepend...
- archive_expsym_cmds_F77='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
-***************
-*** 14667,14673 ****
- ;;
-
- freebsd*)
-! objformat=`test -x /usr/bin/objformat && /usr/bin/objformat || echo aout`
- version_type=freebsd-$objformat
- case $version_type in
- freebsd-elf*)
---- 14668,14674 ----
- ;;
-
- freebsd*)
-! objformat=`test -x /usr/bin/objformat && /usr/bin/objformat || echo elf`
- version_type=freebsd-$objformat
- case $version_type in
- freebsd-elf*)
-***************
-*** 15607,15617 ****
- lt_prog_compiler_pic_GCJ='-m68020 -resident32 -malways-restore-a4'
- ;;
-
-! beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
- # PIC is the default for these OSes.
- ;;
-
-! mingw* | pw32* | os2*)
- # This hack is so that the source file can tell whether it is being
- # built for inclusion in a dll (and should export symbols for example).
- lt_prog_compiler_pic_GCJ='-DDLL_EXPORT'
---- 15608,15618 ----
- lt_prog_compiler_pic_GCJ='-m68020 -resident32 -malways-restore-a4'
- ;;
-
-! beos* | cygwin* | mingw* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
- # PIC is the default for these OSes.
- ;;
-
-! pw32* | os2*)
- # This hack is so that the source file can tell whether it is being
- # built for inclusion in a dll (and should export symbols for example).
- lt_prog_compiler_pic_GCJ='-DDLL_EXPORT'
-***************
-*** 15666,15672 ****
- fi
- ;;
-
-! mingw* | pw32* | os2*)
- # This hack is so that the source file can tell whether it is being
- # built for inclusion in a dll (and should export symbols for example).
- lt_prog_compiler_pic_GCJ='-DDLL_EXPORT'
---- 15667,15673 ----
- fi
- ;;
-
-! pw32* | os2*)
- # This hack is so that the source file can tell whether it is being
- # built for inclusion in a dll (and should export symbols for example).
- lt_prog_compiler_pic_GCJ='-DDLL_EXPORT'
-***************
-*** 16009,16015 ****
- export_symbols_cmds_GCJ='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGS] /s/.* \([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW] /s/.* //'\'' | sort | uniq > $export_symbols'
-
- if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then
-! archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib'
- # If the export-symbols file already is a .def file (1st line
- # is EXPORTS), use it as is; otherwise, prepend...
- archive_expsym_cmds_GCJ='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
---- 16010,16016 ----
- export_symbols_cmds_GCJ='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGS] /s/.* \([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW] /s/.* //'\'' | sort | uniq > $export_symbols'
-
- if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then
-! archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--exclude-libs,ALL ${wl}--out-implib,$lib'
- # If the export-symbols file already is a .def file (1st line
- # is EXPORTS), use it as is; otherwise, prepend...
- archive_expsym_cmds_GCJ='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
-***************
-*** 17035,17041 ****
- ;;
-
- freebsd*)
-! objformat=`test -x /usr/bin/objformat && /usr/bin/objformat || echo aout`
- version_type=freebsd-$objformat
- case $version_type in
- freebsd-elf*)
---- 17036,17042 ----
- ;;
-
- freebsd*)
-! objformat=`test -x /usr/bin/objformat && /usr/bin/objformat || echo elf`
- version_type=freebsd-$objformat
- case $version_type in
- freebsd-elf*)
-***************
-*** 24598,24604 ****
- fi
-
- LIBXML_MIN_VERSION="2.4.2"
-! LIBXML_CONFIG="xml2-config"
- LIBXML_CFLAGS=""
- LIBXML_LIBS=""
- LIBXML_FOUND="no"
---- 24599,24605 ----
- fi
-
- LIBXML_MIN_VERSION="2.4.2"
-! LIBXML_CONFIG="./libxml2-config"
- LIBXML_CFLAGS=""
- LIBXML_LIBS=""
- LIBXML_FOUND="no"
-***************
-*** 25678,25689 ****
-
- XMLSEC_NO_NSS="1"
- MOZILLA_MIN_VERSION="1.4"
- NSS_MIN_VERSION="3.2"
- NSPR_MIN_VERSION="4.0"
- NSS_CFLAGS=""
- NSS_LIBS=""
-! NSS_LIBS_LIST="-lnss3 -lsmime3"
-! NSPR_LIBS_LIST="-lnspr4 -lplds4 -lplc4"
- NSS_CRYPTO_LIB="$PACKAGE-nss"
- NSS_FOUND="no"
-
---- 25679,25704 ----
-
- XMLSEC_NO_NSS="1"
- MOZILLA_MIN_VERSION="1.4"
-+ if test "z$MOZ_FLAVOUR" = "zfirefox" ; then
-+ MOZILLA_MIN_VERSION="1.0"
-+ fi
- NSS_MIN_VERSION="3.2"
- NSPR_MIN_VERSION="4.0"
- NSS_CFLAGS=""
- NSS_LIBS=""
-!
-! case $host_os in
-! cygwin* | mingw* | pw32*)
-! NSS_LIBS_LIST="-lnss3 -lsmime3"
-! NSPR_LIBS_LIST="-lnspr4"
-! ;;
-!
-! *)
-! NSS_LIBS_LIST="-lnss3 -lsoftokn3 -lsmime3"
-! NSPR_LIBS_LIST="-lnspr4 -lplds4 -lplc4"
-! ;;
-! esac
-!
- NSS_CRYPTO_LIB="$PACKAGE-nss"
- NSS_FOUND="no"
-
-***************
-*** 25766,25788 ****
- else
- PKG_CONFIG_MIN_VERSION=0.9.0
- if $PKG_CONFIG --atleast-pkgconfig-version $PKG_CONFIG_MIN_VERSION; then
-! echo "$as_me:$LINENO: checking for mozilla-nspr >= $MOZILLA_MIN_VERSION mozilla-nss >= $MOZILLA_MIN_VERSION" >&5
-! echo $ECHO_N "checking for mozilla-nspr >= $MOZILLA_MIN_VERSION mozilla-nss >= $MOZILLA_MIN_VERSION... $ECHO_C" >&6
-
-! if $PKG_CONFIG --exists "mozilla-nspr >= $MOZILLA_MIN_VERSION mozilla-nss >= $MOZILLA_MIN_VERSION" ; then
- echo "$as_me:$LINENO: result: yes" >&5
- echo "${ECHO_T}yes" >&6
- succeeded=yes
-
- echo "$as_me:$LINENO: checking NSS_CFLAGS" >&5
- echo $ECHO_N "checking NSS_CFLAGS... $ECHO_C" >&6
-! NSS_CFLAGS=`$PKG_CONFIG --cflags "mozilla-nspr >= $MOZILLA_MIN_VERSION mozilla-nss >= $MOZILLA_MIN_VERSION"`
- echo "$as_me:$LINENO: result: $NSS_CFLAGS" >&5
- echo "${ECHO_T}$NSS_CFLAGS" >&6
-
- echo "$as_me:$LINENO: checking NSS_LIBS" >&5
- echo $ECHO_N "checking NSS_LIBS... $ECHO_C" >&6
-! NSS_LIBS=`$PKG_CONFIG --libs "mozilla-nspr >= $MOZILLA_MIN_VERSION mozilla-nss >= $MOZILLA_MIN_VERSION"`
- echo "$as_me:$LINENO: result: $NSS_LIBS" >&5
- echo "${ECHO_T}$NSS_LIBS" >&6
- else
---- 25781,25803 ----
- else
- PKG_CONFIG_MIN_VERSION=0.9.0
- if $PKG_CONFIG --atleast-pkgconfig-version $PKG_CONFIG_MIN_VERSION; then
-! echo "$as_me:$LINENO: checking for $MOZ_FLAVOUR-nspr >= $MOZILLA_MIN_VERSION $MOZ_FLAVOUR-nss >= $MOZILLA_MIN_VERSION" >&5
-! echo $ECHO_N "checking for $MOZ_FLAVOUR-nspr >= $MOZILLA_MIN_VERSION $MOZ_FLAVOUR-nss >= $MOZILLA_MIN_VERSION... $ECHO_C" >&6
-
-! if $PKG_CONFIG --exists "$MOZ_FLAVOUR-nspr >= $MOZILLA_MIN_VERSION $MOZ_FLAVOUR-nss >= $MOZILLA_MIN_VERSION" ; then
- echo "$as_me:$LINENO: result: yes" >&5
- echo "${ECHO_T}yes" >&6
- succeeded=yes
-
- echo "$as_me:$LINENO: checking NSS_CFLAGS" >&5
- echo $ECHO_N "checking NSS_CFLAGS... $ECHO_C" >&6
-! NSS_CFLAGS=`$PKG_CONFIG --cflags "$MOZ_FLAVOUR-nspr >= $MOZILLA_MIN_VERSION $MOZ_FLAVOUR-nss >= $MOZILLA_MIN_VERSION"`
- echo "$as_me:$LINENO: result: $NSS_CFLAGS" >&5
- echo "${ECHO_T}$NSS_CFLAGS" >&6
-
- echo "$as_me:$LINENO: checking NSS_LIBS" >&5
- echo $ECHO_N "checking NSS_LIBS... $ECHO_C" >&6
-! NSS_LIBS=`$PKG_CONFIG --libs "$MOZ_FLAVOUR-nspr >= $MOZILLA_MIN_VERSION $MOZ_FLAVOUR-nss >= $MOZILLA_MIN_VERSION"`
- echo "$as_me:$LINENO: result: $NSS_LIBS" >&5
- echo "${ECHO_T}$NSS_LIBS" >&6
- else
-***************
-*** 25790,25796 ****
- NSS_LIBS=""
- ## If we have a custom action on failure, don't print errors, but
- ## do set a variable so people can do so.
-! NSS_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "mozilla-nspr >= $MOZILLA_MIN_VERSION mozilla-nss >= $MOZILLA_MIN_VERSION"`
-
- fi
-
---- 25805,25811 ----
- NSS_LIBS=""
- ## If we have a custom action on failure, don't print errors, but
- ## do set a variable so people can do so.
-! NSS_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "$MOZ_FLAVOUR-nspr >= $MOZILLA_MIN_VERSION $MOZ_FLAVOUR-nss >= $MOZILLA_MIN_VERSION"`
-
- fi
-
-***************
-*** 25808,25813 ****
---- 25822,25929 ----
- NSS_FOUND=no
- fi
-
-+ echo "$as_me:$LINENO: result: $NSS_FOUND" >&5
-+ echo "${ECHO_T}$NSS_FOUND" >&6
-+ if test "z$NSS_FOUND" = "zno" ; then
-+
-+ succeeded=no
-+
-+ if test -z "$PKG_CONFIG"; then
-+ # Extract the first word of "pkg-config", so it can be a program name with args.
-+ set dummy pkg-config; ac_word=$2
-+ echo "$as_me:$LINENO: checking for $ac_word" >&5
-+ echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-+ if test "${ac_cv_path_PKG_CONFIG+set}" = set; then
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
-+ else
-+ case $PKG_CONFIG in
-+ [\\/]* | ?:[\\/]*)
-+ ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path.
-+ ;;
-+ *)
-+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-+ for as_dir in $PATH
-+ do
-+ IFS=$as_save_IFS
-+ test -z "$as_dir" && as_dir=.
-+ for ac_exec_ext in '' $ac_executable_extensions; do
-+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-+ ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext"
-+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-+ break 2
-+ fi
-+ done
-+ done
-+
-+ test -z "$ac_cv_path_PKG_CONFIG" && ac_cv_path_PKG_CONFIG="no"
-+ ;;
-+ esac
-+ fi
-+ PKG_CONFIG=$ac_cv_path_PKG_CONFIG
-+
-+ if test -n "$PKG_CONFIG"; then
-+ echo "$as_me:$LINENO: result: $PKG_CONFIG" >&5
-+ echo "${ECHO_T}$PKG_CONFIG" >&6
-+ else
-+ echo "$as_me:$LINENO: result: no" >&5
-+ echo "${ECHO_T}no" >&6
-+ fi
-+
-+ fi
-+
-+ if test "$PKG_CONFIG" = "no" ; then
-+ echo "*** The pkg-config script could not be found. Make sure it is"
-+ echo "*** in your path, or set the PKG_CONFIG environment variable"
-+ echo "*** to the full path to pkg-config."
-+ echo "*** Or see http://www.freedesktop.org/software/pkgconfig to get pkg-config."
-+ else
-+ PKG_CONFIG_MIN_VERSION=0.9.0
-+ if $PKG_CONFIG --atleast-pkgconfig-version $PKG_CONFIG_MIN_VERSION; then
-+ echo "$as_me:$LINENO: checking for nspr >= $NSPR_MIN_VERSION nss >= $NSS_MIN_VERSION" >&5
-+ echo $ECHO_N "checking for nspr >= $NSPR_MIN_VERSION nss >= $NSS_MIN_VERSION... $ECHO_C" >&6
-+
-+ if $PKG_CONFIG --exists "nspr >= $NSPR_MIN_VERSION nss >= $NSS_MIN_VERSION" ; then
-+ echo "$as_me:$LINENO: result: yes" >&5
-+ echo "${ECHO_T}yes" >&6
-+ succeeded=yes
-+
-+ echo "$as_me:$LINENO: checking NSS_CFLAGS" >&5
-+ echo $ECHO_N "checking NSS_CFLAGS... $ECHO_C" >&6
-+ NSS_CFLAGS=`$PKG_CONFIG --cflags "nspr >= $NSPR_MIN_VERSION nss >= $NSS_MIN_VERSION"`
-+ echo "$as_me:$LINENO: result: $NSS_CFLAGS" >&5
-+ echo "${ECHO_T}$NSS_CFLAGS" >&6
-+
-+ echo "$as_me:$LINENO: checking NSS_LIBS" >&5
-+ echo $ECHO_N "checking NSS_LIBS... $ECHO_C" >&6
-+ NSS_LIBS=`$PKG_CONFIG --libs "nspr >= $NSPR_MIN_VERSION nss >= $NSS_MIN_VERSION"`
-+ echo "$as_me:$LINENO: result: $NSS_LIBS" >&5
-+ echo "${ECHO_T}$NSS_LIBS" >&6
-+ else
-+ NSS_CFLAGS=""
-+ NSS_LIBS=""
-+ ## If we have a custom action on failure, don't print errors, but
-+ ## do set a variable so people can do so.
-+ NSS_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "nspr >= $NSPR_MIN_VERSION nss >= $NSS_MIN_VERSION"`
-+
-+ fi
-+
-+
-+
-+ else
-+ echo "*** Your version of pkg-config is too old. You need version $PKG_CONFIG_MIN_VERSION or newer."
-+ echo "*** See http://www.freedesktop.org/software/pkgconfig"
-+ fi
-+ fi
-+
-+ if test $succeeded = yes; then
-+ NSS_FOUND=yes
-+ else
-+ NSS_FOUND=no
-+ fi
-+
-+ echo "$as_me:$LINENO: result: $NSS_FOUND" >&5
-+ echo "${ECHO_T}$NSS_FOUND" >&6
-+ fi
- fi
-
- if test "z$NSS_FOUND" = "zno" ; then
-***************
-*** 25817,25824 ****
- ac_mozilla_name=mozilla-$MOZILLA_MIN_VERSION
- fi
-
-! ac_nss_lib_dir="/usr/lib /usr/lib64 /usr/local/lib /usr/lib/$ac_mozilla_name /usr/local/lib/$ac_mozilla_name"
-! ac_nss_inc_dir="/usr/include /usr/include/mozilla /usr/local/include /usr/local/include/mozilla /usr/include/$ac_mozilla_name /usr/local/include/$ac_mozilla_name"
-
- echo "$as_me:$LINENO: checking for nspr libraries >= $NSPR_MIN_VERSION" >&5
- echo $ECHO_N "checking for nspr libraries >= $NSPR_MIN_VERSION... $ECHO_C" >&6
---- 25832,25839 ----
- ac_mozilla_name=mozilla-$MOZILLA_MIN_VERSION
- fi
-
-! ac_nss_lib_dir="${SOLARVERSION}/${INPATH}/lib${UPDMINOREXT}"
-! ac_nss_inc_dir="${SOLARVERSION}/${INPATH}/inc${UPDMINOREXT}/mozilla"
-
- echo "$as_me:$LINENO: checking for nspr libraries >= $NSPR_MIN_VERSION" >&5
- echo $ECHO_N "checking for nspr libraries >= $NSPR_MIN_VERSION... $ECHO_C" >&6
-***************
-*** 25853,25860 ****
- done
-
- for dir in $ac_nss_lib_dir ; do
-! if test -f $dir/libnspr4.so ; then
-! if test "z$dir" = "z/usr/lib" ; then
- NSPR_LIBS="$NSPR_LIBS_LIST"
- else
- if test "z$with_gnu_ld" = "zyes" ; then
---- 25868,25878 ----
- done
-
- for dir in $ac_nss_lib_dir ; do
-! case $host_os in
-! cygwin* | mingw* | pw32*)
-! if test -f $dir/libnspr4.so -o -f $dir/libnspr4.dylib -o -f $dir/libnspr4.a ; then
-! dnl do not add -L/usr/lib because compiler does it anyway
-! if test "z$dir" = "z/usr/lib" ; then
- NSPR_LIBS="$NSPR_LIBS_LIST"
- else
- if test "z$with_gnu_ld" = "zyes" ; then
-***************
-*** 25865,25871 ****
- fi
- NSPR_LIBS_FOUND="yes"
- break
-! fi
- done
- fi
-
---- 25883,25908 ----
- fi
- NSPR_LIBS_FOUND="yes"
- break
-! fi
-! ;;
-!
-! *)
-! if test -f $dir/libnspr4.so -o -f $dir/libnspr4.dylib ; then
-! dnl do not add -L/usr/lib because compiler does it anyway
-! if test "z$dir" = "z/usr/lib" ; then
-! NSPR_LIBS="$NSPR_LIBS_LIST"
-! else
-! if test "z$with_gnu_ld" = "zyes" ; then
-! NSPR_LIBS="-Wl,-rpath-link -Wl,$dir -L$dir $NSPR_LIBS_LIST"
-! else
-! NSPR_LIBS="-L$dir $NSPR_LIBS_LIST"
-! fi
-! fi
-! NSPR_LIBS_FOUND="yes"
-! break
-! fi
-! ;;
-! esac
- done
- fi
-
-***************
-*** 25939,25946 ****
- done
-
- for dir in $ac_nss_lib_dir ; do
-! if test -f $dir/libnss3.so ; then
-! if test "z$dir" = "z/usr/lib" ; then
- NSS_LIBS="$NSS_LIBS_LIST"
- else
- if test "z$with_gnu_ld" = "zyes" ; then
---- 25976,25986 ----
- done
-
- for dir in $ac_nss_lib_dir ; do
-! case $host_os in
-! cygwin* | mingw* | pw32*)
-! if test -f $dir/libnss3.so -o -f $dir/libnss3.dylib -o -f $dir/libnss3.a ; then
-! dnl do not add -L/usr/lib because compiler does it anyway
-! if test "z$dir" = "z/usr/lib" ; then
- NSS_LIBS="$NSS_LIBS_LIST"
- else
- if test "z$with_gnu_ld" = "zyes" ; then
-***************
-*** 25951,25957 ****
- fi
- NSS_LIBS_FOUND="yes"
- break
-! fi
- done
- fi
-
---- 25991,26016 ----
- fi
- NSS_LIBS_FOUND="yes"
- break
-! fi
-! ;;
-!
-! *)
-! if test -f $dir/libnss3.so -o -f $dir/libnss3.dylib ; then
-! dnl do not add -L/usr/lib because compiler does it anyway
-! if test "z$dir" = "z/usr/lib" ; then
-! NSS_LIBS="$NSS_LIBS_LIST"
-! else
-! if test "z$with_gnu_ld" = "zyes" ; then
-! NSS_LIBS="-Wl,-rpath-link -Wl,$dir -L$dir $NSS_LIBS_LIST"
-! else
-! NSS_LIBS="-L$dir $NSS_LIBS_LIST"
-! fi
-! fi
-! NSS_LIBS_FOUND="yes"
-! break
-! fi
-! ;;
-! esac
- done
- fi
-
-***************
-*** 26004,26009 ****
---- 26063,26074 ----
- fi
- fi
-
-+ case $host_os in
-+ darwin*)
-+ NSS_LIBS="$NSS_LIBS "`"$PERL" "$SOLARENV/bin/macosx-dylib-link-list.pl" $NSS_LIBS`
-+ ;;
-+ esac
-+
- if test "z$NSS_FOUND" = "zyes" ; then
- XMLSEC_NO_NSS="0"
- NSS_CFLAGS="$NSS_CFLAGS -DXMLSEC_CRYPTO_NSS=1"
-***************
-*** 26037,26042 ****
---- 26102,26210 ----
-
-
-
-+ MSCRYPTO_CFLAGS=""
-+ MSCRYPTO_LIBS=""
-+ MSCRYPTO_FOUND="no"
-+
-+
-+ # Check whether --with-mscrypto or --without-mscrypto was given.
-+ if test "${with_mscrypto+set}" = set; then
-+ withval="$with_mscrypto"
-+
-+ fi;
-+ if test "z$with_mscrypto" = "zno" ; then
-+ echo "$as_me:$LINENO: checking for MSCRYPTO libraries" >&5
-+ echo $ECHO_N "checking for MSCRYPTO libraries... $ECHO_C" >&6
-+ echo "$as_me:$LINENO: result: no" >&5
-+ echo "${ECHO_T}no" >&6
-+ MSCRYPTO_FOUND="without"
-+ else
-+ ac_mscrypto_lib_dir="${PSDK_HOME}/lib"
-+ ac_mscrypto_inc_dir="${SOLARVERSION}/${INPATH}/inc${UPDMINOREXT}/external/mingw/include ${COMPATH}/include ${COMPATH}/include/w32api"
-+ echo "$as_me:$LINENO: checking for mscrypto libraries" >&5
-+ echo $ECHO_N "checking for mscrypto libraries... $ECHO_C" >&6
-+ MSCRYPTO_INCLUDES_FOUND="no"
-+ MSCRYPTO_LIBS_FOUND="no"
-+ WINCRYPT_H=""
-+
-+ for dir in $ac_mscrypto_inc_dir ; do
-+ if test -f $dir/wincrypt.h ; then
-+ MSCRYPTO_CFLAGS="$MSCRYPTO_CFLAGS -I$dir"
-+ MSCRYPTO_INCLUDES_FOUND="yes"
-+ WINCRYPT_H="$dir/wincrypt.h"
-+ break
-+ fi
-+ done
-+
-+ for dir in $ac_mscrypto_lib_dir ; do
-+ if test -f $dir/crypt32.lib ; then
-+ if test "z$with_gnu_ld" = "zyes" ; then
-+ MSCRYPTO_LIBS="-Wl,-rpath-link -Wl,$dir -L$dir $dir/crypt32.lib"
-+ else
-+ MSCRYPTO_LIBS="-L$dir $dir/crypt32.lib"
-+ fi
-+ MSCRYPTO_LIBS_FOUND="yes"
-+ break
-+ fi
-+ done
-+
-+ if test "z$MSCRYPTO_INCLUDES_FOUND" = "zyes" -a "z$MSCRYPTO_LIBS_FOUND" = "zyes" ; then
-+ OLD_CPPFLAGS=$CPPFLAGS
-+ CPPFLAGS="$MSCRYPTO_CFLAGS"
-+ cat >conftest.$ac_ext <<_ACEOF
-+ /* confdefs.h. */
-+ _ACEOF
-+ cat confdefs.h >>conftest.$ac_ext
-+ cat >>conftest.$ac_ext <<_ACEOF
-+ /* end confdefs.h. */
-+
-+ #include <wincrypt.h>
-+ #if defined(_WINCRYPT_H) || defined(__WINCRYPT_H__)
-+ yes
-+ #endif
-+
-+ _ACEOF
-+ if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
-+ $EGREP "yes" >/dev/null 2>&1; then
-+
-+ MSCRYPTO_FOUND=yes
-+
-+ else
-+
-+ MSCRYPTO_FOUND=no
-+
-+ fi
-+ rm -f conftest*
-+
-+ CPPFLAGS="$OLD_CPPFLAGS"
-+ fi
-+
-+ if test "z$MSCRYPTO_FOUND" = "zyes" ; then
-+ echo "$as_me:$LINENO: result: yes" >&5
-+ echo "${ECHO_T}yes" >&6
-+ else
-+ echo "$as_me:$LINENO: result: no" >&5
-+ echo "${ECHO_T}no" >&6
-+ fi
-+
-+ fi
-+
-+ if test "z$MSCRYPTO_FOUND" = "zyes" ; then
-+ MSCRYPTO_CFLAGS="$MSCRYPTO_CFLAGS -DXMLSEC_CRYPTO_MSCRYPTO=1"
-+
-+ if test "z$XMLSEC_CRYPTO" = "z" ; then
-+ XMLSEC_CRYPTO="mscrypto"
-+ XMLSEC_CRYPTO_LIB="$PACKAGE-mscrypto"
-+ XMLSEC_CRYPTO_CFLAGS="$MSCRYPTO_CFLAGS"
-+ XMLSEC_CRYPTO_LIBS="$MSCRYPTO_LIBS"
-+ fi
-+ XMLSEC_CRYPTO_LIST="$XMLSEC_CRYPTO_LIST mscrypto"
-+ else
-+ XMLSEC_CRYPTO_DISABLED_LIST="$XMLSEC_CRYPTO_DISABLED_LIST mscrypto"
-+ fi
-+
-+
-+
- echo "$as_me:$LINENO: checking for crypto library" >&5
- echo $ECHO_N "checking for crypto library... $ECHO_C" >&6
- if test "z$XMLSEC_CRYPTO" = "z" ; then
-***************
-*** 26604,26610 ****
- done
-
-
-! ac_config_files="$ac_config_files include/xmlsec/version.h Makefile include/Makefile include/xmlsec/Makefile include/xmlsec/private/Makefile src/Makefile apps/Makefile docs/Makefile docs/api/Makefile man/Makefile xmlsec1Conf.sh:xmlsecConf.sh.in xmlsec1-config:xmlsec-config.in xmlsec1-openssl.pc:xmlsec-openssl.pc.in xmlsec1-gnutls.pc:xmlsec-gnutls.pc.in xmlsec1-nss.pc:xmlsec-nss.pc.in xmlsec1.spec:xmlsec.spec.in"
- cat >confcache <<\_ACEOF
- # This file is a shell script that caches the results of configure
- # tests run on this system so they can be shared between configure
---- 26772,26778 ----
- done
-
-
-! ac_config_files="$ac_config_files include/xmlsec/version.h Makefile include/Makefile include/xmlsec/Makefile include/xmlsec/private/Makefile src/Makefile apps/Makefile docs/Makefile docs/api/Makefile man/Makefile xmlsec1Conf.sh:xmlsecConf.sh.in xmlsec1-config:xmlsec-config.in xmlsec1-openssl.pc:xmlsec-openssl.pc.in xmlsec1-gnutls.pc:xmlsec-gnutls.pc.in xmlsec1-nss.pc:xmlsec-nss.pc.in xmlsec1-mscrypto.pc:xmlsec-mscrypto.pc.in xmlsec1.spec:xmlsec.spec.in"
- cat >confcache <<\_ACEOF
- # This file is a shell script that caches the results of configure
- # tests run on this system so they can be shared between configure
-***************
-*** 27521,27526 ****
---- 27689,27696 ----
- s,@NSS_MIN_VERSION@,$NSS_MIN_VERSION,;t t
- s,@NSPR_MIN_VERSION@,$NSPR_MIN_VERSION,;t t
- s,@MOZILLA_MIN_VERSION@,$MOZILLA_MIN_VERSION,;t t
-+ s,@MSCRYPTO_CFLAGS@,$MSCRYPTO_CFLAGS,;t t
-+ s,@MSCRYPTO_LIBS@,$MSCRYPTO_LIBS,;t t
- s,@XMLSEC_NO_SHA1_TRUE@,$XMLSEC_NO_SHA1_TRUE,;t t
- s,@XMLSEC_NO_SHA1_FALSE@,$XMLSEC_NO_SHA1_FALSE,;t t
- s,@XMLSEC_NO_SHA1@,$XMLSEC_NO_SHA1,;t t
-***************
-*** 29231,29236 ****
---- 29401,29408 ----
- s,@NSS_MIN_VERSION@,$NSS_MIN_VERSION,;t t
- s,@NSPR_MIN_VERSION@,$NSPR_MIN_VERSION,;t t
- s,@MOZILLA_MIN_VERSION@,$MOZILLA_MIN_VERSION,;t t
-+ s,@MSCRYPTO_CFLAGS@,$MSCRYPTO_CFLAGS,;t t
-+ s,@MSCRYPTO_LIBS@,$MSCRYPTO_LIBS,;t t
- s,@XMLSEC_NO_SHA1_TRUE@,$XMLSEC_NO_SHA1_TRUE,;t t
- s,@XMLSEC_NO_SHA1_FALSE@,$XMLSEC_NO_SHA1_FALSE,;t t
- s,@XMLSEC_NO_SHA1@,$XMLSEC_NO_SHA1,;t t
-***************
-*** 30941,30946 ****
---- 31113,31120 ----
- s,@NSS_MIN_VERSION@,$NSS_MIN_VERSION,;t t
- s,@NSPR_MIN_VERSION@,$NSPR_MIN_VERSION,;t t
- s,@MOZILLA_MIN_VERSION@,$MOZILLA_MIN_VERSION,;t t
-+ s,@MSCRYPTO_CFLAGS@,$MSCRYPTO_CFLAGS,;t t
-+ s,@MSCRYPTO_LIBS@,$MSCRYPTO_LIBS,;t t
- s,@XMLSEC_NO_SHA1_TRUE@,$XMLSEC_NO_SHA1_TRUE,;t t
- s,@XMLSEC_NO_SHA1_FALSE@,$XMLSEC_NO_SHA1_FALSE,;t t
- s,@XMLSEC_NO_SHA1@,$XMLSEC_NO_SHA1,;t t
-***************
-*** 32653,32658 ****
---- 32827,34550 ----
- s,@NSS_MIN_VERSION@,$NSS_MIN_VERSION,;t t
- s,@NSPR_MIN_VERSION@,$NSPR_MIN_VERSION,;t t
- s,@MOZILLA_MIN_VERSION@,$MOZILLA_MIN_VERSION,;t t
-+ s,@MSCRYPTO_CFLAGS@,$MSCRYPTO_CFLAGS,;t t
-+ s,@MSCRYPTO_LIBS@,$MSCRYPTO_LIBS,;t t
-+ s,@XMLSEC_NO_SHA1_TRUE@,$XMLSEC_NO_SHA1_TRUE,;t t
-+ s,@XMLSEC_NO_SHA1_FALSE@,$XMLSEC_NO_SHA1_FALSE,;t t
-+ s,@XMLSEC_NO_SHA1@,$XMLSEC_NO_SHA1,;t t
-+ s,@XMLSEC_NO_RIPEMD160_TRUE@,$XMLSEC_NO_RIPEMD160_TRUE,;t t
-+ s,@XMLSEC_NO_RIPEMD160_FALSE@,$XMLSEC_NO_RIPEMD160_FALSE,;t t
-+ s,@XMLSEC_NO_RIPEMD160@,$XMLSEC_NO_RIPEMD160,;t t
-+ s,@XMLSEC_NO_HMAC_TRUE@,$XMLSEC_NO_HMAC_TRUE,;t t
-+ s,@XMLSEC_NO_HMAC_FALSE@,$XMLSEC_NO_HMAC_FALSE,;t t
-+ s,@XMLSEC_NO_HMAC@,$XMLSEC_NO_HMAC,;t t
-+ s,@XMLSEC_NO_DSA_TRUE@,$XMLSEC_NO_DSA_TRUE,;t t
-+ s,@XMLSEC_NO_DSA_FALSE@,$XMLSEC_NO_DSA_FALSE,;t t
-+ s,@XMLSEC_NO_DSA@,$XMLSEC_NO_DSA,;t t
-+ s,@XMLSEC_NO_RSA_TRUE@,$XMLSEC_NO_RSA_TRUE,;t t
-+ s,@XMLSEC_NO_RSA_FALSE@,$XMLSEC_NO_RSA_FALSE,;t t
-+ s,@XMLSEC_NO_RSA@,$XMLSEC_NO_RSA,;t t
-+ s,@XMLSEC_NO_X509_TRUE@,$XMLSEC_NO_X509_TRUE,;t t
-+ s,@XMLSEC_NO_X509_FALSE@,$XMLSEC_NO_X509_FALSE,;t t
-+ s,@XMLSEC_NO_X509@,$XMLSEC_NO_X509,;t t
-+ s,@XMLSEC_NO_DES_TRUE@,$XMLSEC_NO_DES_TRUE,;t t
-+ s,@XMLSEC_NO_DES_FALSE@,$XMLSEC_NO_DES_FALSE,;t t
-+ s,@XMLSEC_NO_DES@,$XMLSEC_NO_DES,;t t
-+ s,@XMLSEC_NO_AES_TRUE@,$XMLSEC_NO_AES_TRUE,;t t
-+ s,@XMLSEC_NO_AES_FALSE@,$XMLSEC_NO_AES_FALSE,;t t
-+ s,@XMLSEC_NO_AES@,$XMLSEC_NO_AES,;t t
-+ s,@XMLSEC_NO_XMLDSIG_TRUE@,$XMLSEC_NO_XMLDSIG_TRUE,;t t
-+ s,@XMLSEC_NO_XMLDSIG_FALSE@,$XMLSEC_NO_XMLDSIG_FALSE,;t t
-+ s,@XMLSEC_NO_XMLDSIG@,$XMLSEC_NO_XMLDSIG,;t t
-+ s,@XMLSEC_NO_XMLENC_TRUE@,$XMLSEC_NO_XMLENC_TRUE,;t t
-+ s,@XMLSEC_NO_XMLENC_FALSE@,$XMLSEC_NO_XMLENC_FALSE,;t t
-+ s,@XMLSEC_NO_XMLENC@,$XMLSEC_NO_XMLENC,;t t
-+ s,@XMLSEC_NO_XKMS_TRUE@,$XMLSEC_NO_XKMS_TRUE,;t t
-+ s,@XMLSEC_NO_XKMS_FALSE@,$XMLSEC_NO_XKMS_FALSE,;t t
-+ s,@XMLSEC_NO_XKMS@,$XMLSEC_NO_XKMS,;t t
-+ s,@XMLSEC_NO_CRYPTO_DYNAMIC_LOADING_TRUE@,$XMLSEC_NO_CRYPTO_DYNAMIC_LOADING_TRUE,;t t
-+ s,@XMLSEC_NO_CRYPTO_DYNAMIC_LOADING_FALSE@,$XMLSEC_NO_CRYPTO_DYNAMIC_LOADING_FALSE,;t t
-+ s,@XMLSEC_NO_CRYPTO_DYNAMIC_LOADING@,$XMLSEC_NO_CRYPTO_DYNAMIC_LOADING,;t t
-+ s,@XMLSEC_DL_INCLUDES@,$XMLSEC_DL_INCLUDES,;t t
-+ s,@XMLSEC_DL_LIBS@,$XMLSEC_DL_LIBS,;t t
-+ s,@XMLSEC_NO_APPS_CRYPTO_DYNAMIC_LOADING_TRUE@,$XMLSEC_NO_APPS_CRYPTO_DYNAMIC_LOADING_TRUE,;t t
-+ s,@XMLSEC_NO_APPS_CRYPTO_DYNAMIC_LOADING_FALSE@,$XMLSEC_NO_APPS_CRYPTO_DYNAMIC_LOADING_FALSE,;t t
-+ s,@XMLSEC_NO_APPS_CRYPTO_DYNAMIC_LOADING@,$XMLSEC_NO_APPS_CRYPTO_DYNAMIC_LOADING,;t t
-+ s,@XMLSEC_DOCDIR@,$XMLSEC_DOCDIR,;t t
-+ s,@XMLSEC_STATIC_BINARIES@,$XMLSEC_STATIC_BINARIES,;t t
-+ s,@XMLSEC_CORE_CFLAGS@,$XMLSEC_CORE_CFLAGS,;t t
-+ s,@XMLSEC_CORE_LIBS@,$XMLSEC_CORE_LIBS,;t t
-+ s,@XMLSEC_LIBDIR@,$XMLSEC_LIBDIR,;t t
-+ s,@XMLSEC_OPENSSL_CFLAGS@,$XMLSEC_OPENSSL_CFLAGS,;t t
-+ s,@XMLSEC_OPENSSL_LIBS@,$XMLSEC_OPENSSL_LIBS,;t t
-+ s,@XMLSEC_GNUTLS_CFLAGS@,$XMLSEC_GNUTLS_CFLAGS,;t t
-+ s,@XMLSEC_GNUTLS_LIBS@,$XMLSEC_GNUTLS_LIBS,;t t
-+ s,@XMLSEC_NSS_CFLAGS@,$XMLSEC_NSS_CFLAGS,;t t
-+ s,@XMLSEC_NSS_LIBS@,$XMLSEC_NSS_LIBS,;t t
-+ s,@XMLSEC_CFLAGS@,$XMLSEC_CFLAGS,;t t
-+ s,@XMLSEC_LIBS@,$XMLSEC_LIBS,;t t
-+ s,@XMLSEC_DEFINES@,$XMLSEC_DEFINES,;t t
-+ s,@XMLSEC_APP_DEFINES@,$XMLSEC_APP_DEFINES,;t t
-+ s,@XMLSEC_CRYPTO@,$XMLSEC_CRYPTO,;t t
-+ s,@XMLSEC_CRYPTO_LIST@,$XMLSEC_CRYPTO_LIST,;t t
-+ s,@XMLSEC_CRYPTO_DISABLED_LIST@,$XMLSEC_CRYPTO_DISABLED_LIST,;t t
-+ s,@XMLSEC_CRYPTO_LIB@,$XMLSEC_CRYPTO_LIB,;t t
-+ s,@XMLSEC_CRYPTO_CFLAGS@,$XMLSEC_CRYPTO_CFLAGS,;t t
-+ s,@XMLSEC_CRYPTO_LIBS@,$XMLSEC_CRYPTO_LIBS,;t t
-+ s,@XMLSEC_CRYPTO_PC_FILES_LIST@,$XMLSEC_CRYPTO_PC_FILES_LIST,;t t
-+ s,@LIBOBJS@,$LIBOBJS,;t t
-+ s,@LTLIBOBJS@,$LTLIBOBJS,;t t
-+ CEOF
-+
-+ _ACEOF
-+
-+ cat >>$CONFIG_STATUS <<\_ACEOF
-+ # Split the substitutions into bite-sized pieces for seds with
-+ # small command number limits, like on Digital OSF/1 and HP-UX.
-+ ac_max_sed_lines=48
-+ ac_sed_frag=1 # Number of current file.
-+ ac_beg=1 # First line for current file.
-+ ac_end=$ac_max_sed_lines # Line after last line for current file.
-+ ac_more_lines=:
-+ ac_sed_cmds=
-+ while $ac_more_lines; do
-+ if test $ac_beg -gt 1; then
-+ sed "1,${ac_beg}d; ${ac_end}q" $tmp/subs.sed >$tmp/subs.frag
-+ else
-+ sed "${ac_end}q" $tmp/subs.sed >$tmp/subs.frag
-+ fi
-+ if test ! -s $tmp/subs.frag; then
-+ ac_more_lines=false
-+ else
-+ # The purpose of the label and of the branching condition is to
-+ # speed up the sed processing (if there are no `@' at all, there
-+ # is no need to browse any of the substitutions).
-+ # These are the two extra sed commands mentioned above.
-+ (echo ':t
-+ /@[a-zA-Z_][a-zA-Z_0-9]*@/!b' && cat $tmp/subs.frag) >$tmp/subs-$ac_sed_frag.sed
-+ if test -z "$ac_sed_cmds"; then
-+ ac_sed_cmds="sed -f $tmp/subs-$ac_sed_frag.sed"
-+ else
-+ ac_sed_cmds="$ac_sed_cmds | sed -f $tmp/subs-$ac_sed_frag.sed"
-+ fi
-+ ac_sed_frag=`expr $ac_sed_frag + 1`
-+ ac_beg=$ac_end
-+ ac_end=`expr $ac_end + $ac_max_sed_lines`
-+ fi
-+ done
-+ if test -z "$ac_sed_cmds"; then
-+ ac_sed_cmds=cat
-+ fi
-+ fi # test -n "$CONFIG_FILES"
-+
-+ _ACEOF
-+ cat >>$CONFIG_STATUS <<\_ACEOF
-+ for ac_file in : $CONFIG_FILES; do test "x$ac_file" = x: && continue
-+ # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
-+ case $ac_file in
-+ - | *:- | *:-:* ) # input from stdin
-+ cat >$tmp/stdin
-+ ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
-+ ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
-+ *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
-+ ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
-+ * ) ac_file_in=$ac_file.in ;;
-+ esac
-+
-+ # Compute @srcdir@, @top_srcdir@, and @INSTALL@ for subdirectories.
-+ ac_dir=`(dirname "$ac_file") 2>/dev/null ||
-+ $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
-+ X"$ac_file" : 'X\(//\)[^/]' \| \
-+ X"$ac_file" : 'X\(//\)$' \| \
-+ X"$ac_file" : 'X\(/\)' \| \
-+ . : '\(.\)' 2>/dev/null ||
-+ echo X"$ac_file" |
-+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
-+ /^X\(\/\/\)[^/].*/{ s//\1/; q; }
-+ /^X\(\/\/\)$/{ s//\1/; q; }
-+ /^X\(\/\).*/{ s//\1/; q; }
-+ s/.*/./; q'`
-+ { if $as_mkdir_p; then
-+ mkdir -p "$ac_dir"
-+ else
-+ as_dir="$ac_dir"
-+ as_dirs=
-+ while test ! -d "$as_dir"; do
-+ as_dirs="$as_dir $as_dirs"
-+ as_dir=`(dirname "$as_dir") 2>/dev/null ||
-+ $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
-+ X"$as_dir" : 'X\(//\)[^/]' \| \
-+ X"$as_dir" : 'X\(//\)$' \| \
-+ X"$as_dir" : 'X\(/\)' \| \
-+ . : '\(.\)' 2>/dev/null ||
-+ echo X"$as_dir" |
-+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
-+ /^X\(\/\/\)[^/].*/{ s//\1/; q; }
-+ /^X\(\/\/\)$/{ s//\1/; q; }
-+ /^X\(\/\).*/{ s//\1/; q; }
-+ s/.*/./; q'`
-+ done
-+ test ! -n "$as_dirs" || mkdir $as_dirs
-+ fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5
-+ echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;}
-+ { (exit 1); exit 1; }; }; }
-+
-+ ac_builddir=.
-+
-+ if test "$ac_dir" != .; then
-+ ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
-+ # A "../" for each directory in $ac_dir_suffix.
-+ ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'`
-+ else
-+ ac_dir_suffix= ac_top_builddir=
-+ fi
-+
-+ case $srcdir in
-+ .) # No --srcdir option. We are building in place.
-+ ac_srcdir=.
-+ if test -z "$ac_top_builddir"; then
-+ ac_top_srcdir=.
-+ else
-+ ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'`
-+ fi ;;
-+ [\\/]* | ?:[\\/]* ) # Absolute path.
-+ ac_srcdir=$srcdir$ac_dir_suffix;
-+ ac_top_srcdir=$srcdir ;;
-+ *) # Relative path.
-+ ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix
-+ ac_top_srcdir=$ac_top_builddir$srcdir ;;
-+ esac
-+
-+ # Do not use `cd foo && pwd` to compute absolute paths, because
-+ # the directories may not exist.
-+ case `pwd` in
-+ .) ac_abs_builddir="$ac_dir";;
-+ *)
-+ case "$ac_dir" in
-+ .) ac_abs_builddir=`pwd`;;
-+ [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";;
-+ *) ac_abs_builddir=`pwd`/"$ac_dir";;
-+ esac;;
-+ esac
-+ case $ac_abs_builddir in
-+ .) ac_abs_top_builddir=${ac_top_builddir}.;;
-+ *)
-+ case ${ac_top_builddir}. in
-+ .) ac_abs_top_builddir=$ac_abs_builddir;;
-+ [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;;
-+ *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;;
-+ esac;;
-+ esac
-+ case $ac_abs_builddir in
-+ .) ac_abs_srcdir=$ac_srcdir;;
-+ *)
-+ case $ac_srcdir in
-+ .) ac_abs_srcdir=$ac_abs_builddir;;
-+ [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;;
-+ *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;;
-+ esac;;
-+ esac
-+ case $ac_abs_builddir in
-+ .) ac_abs_top_srcdir=$ac_top_srcdir;;
-+ *)
-+ case $ac_top_srcdir in
-+ .) ac_abs_top_srcdir=$ac_abs_builddir;;
-+ [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;;
-+ *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;;
-+ esac;;
-+ esac
-+
-+
-+ case $INSTALL in
-+ [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;;
-+ *) ac_INSTALL=$ac_top_builddir$INSTALL ;;
-+ esac
-+
-+ if test x"$ac_file" != x-; then
-+ { echo "$as_me:$LINENO: creating $ac_file" >&5
-+ echo "$as_me: creating $ac_file" >&6;}
-+ rm -f "$ac_file"
-+ fi
-+ # Let's still pretend it is `configure' which instantiates (i.e., don't
-+ # use $as_me), people would be surprised to read:
-+ # /* config.h. Generated by config.status. */
-+ if test x"$ac_file" = x-; then
-+ configure_input=
-+ else
-+ configure_input="$ac_file. "
-+ fi
-+ configure_input=$configure_input"Generated from `echo $ac_file_in |
-+ sed 's,.*/,,'` by configure."
-+
-+ # First look for the input files in the build tree, otherwise in the
-+ # src tree.
-+ ac_file_inputs=`IFS=:
-+ for f in $ac_file_in; do
-+ case $f in
-+ -) echo $tmp/stdin ;;
-+ [\\/$]*)
-+ # Absolute (can't be DOS-style, as IFS=:)
-+ test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
-+ echo "$as_me: error: cannot find input file: $f" >&2;}
-+ { (exit 1); exit 1; }; }
-+ echo "$f";;
-+ *) # Relative
-+ if test -f "$f"; then
-+ # Build tree
-+ echo "$f"
-+ elif test -f "$srcdir/$f"; then
-+ # Source tree
-+ echo "$srcdir/$f"
-+ else
-+ # /dev/null tree
-+ { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
-+ echo "$as_me: error: cannot find input file: $f" >&2;}
-+ { (exit 1); exit 1; }; }
-+ fi;;
-+ esac
-+ done` || { (exit 1); exit 1; }
-+ _ACEOF
-+ cat >>$CONFIG_STATUS <<_ACEOF
-+ sed "$ac_vpsub
-+ $extrasub
-+ _ACEOF
-+ cat >>$CONFIG_STATUS <<\_ACEOF
-+ :t
-+ /@[a-zA-Z_][a-zA-Z_0-9]*@/!b
-+ s,@configure_input@,$configure_input,;t t
-+ s,@srcdir@,$ac_srcdir,;t t
-+ s,@abs_srcdir@,$ac_abs_srcdir,;t t
-+ s,@top_srcdir@,$ac_top_srcdir,;t t
-+ s,@abs_top_srcdir@,$ac_abs_top_srcdir,;t t
-+ s,@builddir@,$ac_builddir,;t t
-+ s,@abs_builddir@,$ac_abs_builddir,;t t
-+ s,@top_builddir@,$ac_top_builddir,;t t
-+ s,@abs_top_builddir@,$ac_abs_top_builddir,;t t
-+ s,@INSTALL@,$ac_INSTALL,;t t
-+ " $ac_file_inputs | (eval "$ac_sed_cmds") >$tmp/out
-+ rm -f $tmp/stdin
-+ if test x"$ac_file" != x-; then
-+ mv $tmp/out $ac_file
-+ else
-+ cat $tmp/out
-+ rm -f $tmp/out
-+ fi
-+
-+ done
-+ _ACEOF
-+ cat >>$CONFIG_STATUS <<\_ACEOF
-+
-+ #
-+ # CONFIG_HEADER section.
-+ #
-+
-+ # These sed commands are passed to sed as "A NAME B NAME C VALUE D", where
-+ # NAME is the cpp macro being defined and VALUE is the value it is being given.
-+ #
-+ # ac_d sets the value in "#define NAME VALUE" lines.
-+ ac_dA='s,^\([ ]*\)#\([ ]*define[ ][ ]*\)'
-+ ac_dB='[ ].*$,\1#\2'
-+ ac_dC=' '
-+ ac_dD=',;t'
-+ # ac_u turns "#undef NAME" without trailing blanks into "#define NAME VALUE".
-+ ac_uA='s,^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)'
-+ ac_uB='$,\1#\2define\3'
-+ ac_uC=' '
-+ ac_uD=',;t'
-+
-+ for ac_file in : $CONFIG_HEADERS; do test "x$ac_file" = x: && continue
-+ # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
-+ case $ac_file in
-+ - | *:- | *:-:* ) # input from stdin
-+ cat >$tmp/stdin
-+ ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
-+ ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
-+ *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
-+ ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
-+ * ) ac_file_in=$ac_file.in ;;
-+ esac
-+
-+ test x"$ac_file" != x- && { echo "$as_me:$LINENO: creating $ac_file" >&5
-+ echo "$as_me: creating $ac_file" >&6;}
-+
-+ # First look for the input files in the build tree, otherwise in the
-+ # src tree.
-+ ac_file_inputs=`IFS=:
-+ for f in $ac_file_in; do
-+ case $f in
-+ -) echo $tmp/stdin ;;
-+ [\\/$]*)
-+ # Absolute (can't be DOS-style, as IFS=:)
-+ test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
-+ echo "$as_me: error: cannot find input file: $f" >&2;}
-+ { (exit 1); exit 1; }; }
-+ # Do quote $f, to prevent DOS paths from being IFS'd.
-+ echo "$f";;
-+ *) # Relative
-+ if test -f "$f"; then
-+ # Build tree
-+ echo "$f"
-+ elif test -f "$srcdir/$f"; then
-+ # Source tree
-+ echo "$srcdir/$f"
-+ else
-+ # /dev/null tree
-+ { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
-+ echo "$as_me: error: cannot find input file: $f" >&2;}
-+ { (exit 1); exit 1; }; }
-+ fi;;
-+ esac
-+ done` || { (exit 1); exit 1; }
-+ # Remove the trailing spaces.
-+ sed 's/[ ]*$//' $ac_file_inputs >$tmp/in
-+
-+ _ACEOF
-+
-+ # Transform confdefs.h into two sed scripts, `conftest.defines' and
-+ # `conftest.undefs', that substitutes the proper values into
-+ # config.h.in to produce config.h. The first handles `#define'
-+ # templates, and the second `#undef' templates.
-+ # And first: Protect against being on the right side of a sed subst in
-+ # config.status. Protect against being in an unquoted here document
-+ # in config.status.
-+ rm -f conftest.defines conftest.undefs
-+ # Using a here document instead of a string reduces the quoting nightmare.
-+ # Putting comments in sed scripts is not portable.
-+ #
-+ # `end' is used to avoid that the second main sed command (meant for
-+ # 0-ary CPP macros) applies to n-ary macro definitions.
-+ # See the Autoconf documentation for `clear'.
-+ cat >confdef2sed.sed <<\_ACEOF
-+ s/[\\&,]/\\&/g
-+ s,[\\$`],\\&,g
-+ t clear
-+ : clear
-+ s,^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*\)\(([^)]*)\)[ ]*\(.*\)$,${ac_dA}\1${ac_dB}\1\2${ac_dC}\3${ac_dD},gp
-+ t end
-+ s,^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)$,${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD},gp
-+ : end
-+ _ACEOF
-+ # If some macros were called several times there might be several times
-+ # the same #defines, which is useless. Nevertheless, we may not want to
-+ # sort them, since we want the *last* AC-DEFINE to be honored.
-+ uniq confdefs.h | sed -n -f confdef2sed.sed >conftest.defines
-+ sed 's/ac_d/ac_u/g' conftest.defines >conftest.undefs
-+ rm -f confdef2sed.sed
-+
-+ # This sed command replaces #undef with comments. This is necessary, for
-+ # example, in the case of _POSIX_SOURCE, which is predefined and required
-+ # on some systems where configure will not decide to define it.
-+ cat >>conftest.undefs <<\_ACEOF
-+ s,^[ ]*#[ ]*undef[ ][ ]*[a-zA-Z_][a-zA-Z_0-9]*,/* & */,
-+ _ACEOF
-+
-+ # Break up conftest.defines because some shells have a limit on the size
-+ # of here documents, and old seds have small limits too (100 cmds).
-+ echo ' # Handle all the #define templates only if necessary.' >>$CONFIG_STATUS
-+ echo ' if grep "^[ ]*#[ ]*define" $tmp/in >/dev/null; then' >>$CONFIG_STATUS
-+ echo ' # If there are no defines, we may have an empty if/fi' >>$CONFIG_STATUS
-+ echo ' :' >>$CONFIG_STATUS
-+ rm -f conftest.tail
-+ while grep . conftest.defines >/dev/null
-+ do
-+ # Write a limited-size here document to $tmp/defines.sed.
-+ echo ' cat >$tmp/defines.sed <<CEOF' >>$CONFIG_STATUS
-+ # Speed up: don't consider the non `#define' lines.
-+ echo '/^[ ]*#[ ]*define/!b' >>$CONFIG_STATUS
-+ # Work around the forget-to-reset-the-flag bug.
-+ echo 't clr' >>$CONFIG_STATUS
-+ echo ': clr' >>$CONFIG_STATUS
-+ sed ${ac_max_here_lines}q conftest.defines >>$CONFIG_STATUS
-+ echo 'CEOF
-+ sed -f $tmp/defines.sed $tmp/in >$tmp/out
-+ rm -f $tmp/in
-+ mv $tmp/out $tmp/in
-+ ' >>$CONFIG_STATUS
-+ sed 1,${ac_max_here_lines}d conftest.defines >conftest.tail
-+ rm -f conftest.defines
-+ mv conftest.tail conftest.defines
-+ done
-+ rm -f conftest.defines
-+ echo ' fi # grep' >>$CONFIG_STATUS
-+ echo >>$CONFIG_STATUS
-+
-+ # Break up conftest.undefs because some shells have a limit on the size
-+ # of here documents, and old seds have small limits too (100 cmds).
-+ echo ' # Handle all the #undef templates' >>$CONFIG_STATUS
-+ rm -f conftest.tail
-+ while grep . conftest.undefs >/dev/null
-+ do
-+ # Write a limited-size here document to $tmp/undefs.sed.
-+ echo ' cat >$tmp/undefs.sed <<CEOF' >>$CONFIG_STATUS
-+ # Speed up: don't consider the non `#undef'
-+ echo '/^[ ]*#[ ]*undef/!b' >>$CONFIG_STATUS
-+ # Work around the forget-to-reset-the-flag bug.
-+ echo 't clr' >>$CONFIG_STATUS
-+ echo ': clr' >>$CONFIG_STATUS
-+ sed ${ac_max_here_lines}q conftest.undefs >>$CONFIG_STATUS
-+ echo 'CEOF
-+ sed -f $tmp/undefs.sed $tmp/in >$tmp/out
-+ rm -f $tmp/in
-+ mv $tmp/out $tmp/in
-+ ' >>$CONFIG_STATUS
-+ sed 1,${ac_max_here_lines}d conftest.undefs >conftest.tail
-+ rm -f conftest.undefs
-+ mv conftest.tail conftest.undefs
-+ done
-+ rm -f conftest.undefs
-+
-+ cat >>$CONFIG_STATUS <<\_ACEOF
-+ # Let's still pretend it is `configure' which instantiates (i.e., don't
-+ # use $as_me), people would be surprised to read:
-+ # /* config.h. Generated by config.status. */
-+ if test x"$ac_file" = x-; then
-+ echo "/* Generated by configure. */" >$tmp/config.h
-+ else
-+ echo "/* $ac_file. Generated by configure. */" >$tmp/config.h
-+ fi
-+ cat $tmp/in >>$tmp/config.h
-+ rm -f $tmp/in
-+ if test x"$ac_file" != x-; then
-+ if diff $ac_file $tmp/config.h >/dev/null 2>&1; then
-+ { echo "$as_me:$LINENO: $ac_file is unchanged" >&5
-+ echo "$as_me: $ac_file is unchanged" >&6;}
+--- misc/xmlsec1-1.2.6/apps/Makefile.in 2004-08-26 08:00:30.000000000 +0200
++++ misc/build/xmlsec1-1.2.6/apps/Makefile.in 2008-06-29 23:44:19.000000000 +0200
+@@ -370,7 +370,7 @@
+ $(CRYPTO_DEPS) \
+ $(NULL)
+
+-all: all-am
++all:
+
+ .SUFFIXES:
+ .SUFFIXES: .c .lo .o .obj
+--- misc/xmlsec1-1.2.6/configure 2004-08-26 08:00:34.000000000 +0200
++++ misc/build/xmlsec1-1.2.6/configure 2008-06-29 23:44:19.000000000 +0200
+@@ -463,7 +463,7 @@
+ # include <unistd.h>
+ #endif"
+
+-ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS build build_cpu build_vendor build_os host host_cpu host_vendor host_os XMLSEC_VERSION XMLSEC_PACKAGE XMLSEC_VERSION_SAFE XMLSEC_VERSION_MAJOR XMLSEC_VERSION_MINOR XMLSEC_VERSION_SUBMINOR XMLSEC_VERSION_INFO INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA CYGPATH_W PACKAGE VERSION ACLOCAL AUTOCONF AUTOMAKE AUTOHEADER MAKEINFO AMTAR install_sh STRIP ac_ct_STRIP INSTALL_STRIP_PROGRAM mkdir_p AWK SET_MAKE am__leading_dot MAINTAINER_MODE_TRUE MAINTAINER_MODE_FALSE MAINT CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT DEPDIR am__include am__quote AMDEP_TRUE AMDEP_FALSE AMDEPBACKSLASH CCDEPMODE am__fastdepCC_TRUE am__fastdepCC_FALSE EGREP LN_S ECHO AR ac_ct_AR RANLIB ac_ct_RANLIB CPP CXX CXXFLAGS ac_ct_CXX CXXDEPMODE am__fastdepCXX_TRUE am__fastdepCXX_FALSE CXXCPP F77 FFLAGS ac_ct_F77 LIBTOOL RM CP MV TAR HELP2MAN MAN2HTML U ANSI2KNR INSTALL_LTDL_TRUE INSTALL_LTDL_FALSE CONVENIENCE_LTDL_TRUE CONVENIENCE_LTDL_FALSE LIBADD_DL PKG_CONFIG_ENABLED PKG_CONFIG LIBXML_CFLAGS LIBXML_LIBS LIBXML262_CFLAGS LIBXML262_LIBS LIBXML_CONFIG LIBXML_MIN_VERSION LIBXSLT_CFLAGS LIBXSLT_LIBS XMLSEC_NO_LIBXSLT LIBXSLT_CONFIG LIBXSLT_MIN_VERSION OPENSSL_CFLAGS OPENSSL_LIBS OPENSSL097_CFLAGS OPENSSL097_LIBS XMLSEC_NO_OPENSSL_TRUE XMLSEC_NO_OPENSSL_FALSE XMLSEC_NO_OPENSSL OPENSSL_CRYPTO_LIB OPENSSL_MIN_VERSION GNUTLS_CFLAGS GNUTLS_LIBS XMLSEC_NO_GNUTLS_TRUE XMLSEC_NO_GNUTLS_FALSE XMLSEC_NO_GNUTLS GNUTLS_CRYPTO_LIB GNUTLS_MIN_VERSION NSS_CFLAGS NSS_LIBS XMLSEC_NO_NSS_TRUE XMLSEC_NO_NSS_FALSE XMLSEC_NO_NSS NSS_CRYPTO_LIB NSS_MIN_VERSION NSPR_MIN_VERSION MOZILLA_MIN_VERSION XMLSEC_NO_SHA1_TRUE XMLSEC_NO_SHA1_FALSE XMLSEC_NO_SHA1 XMLSEC_NO_RIPEMD160_TRUE XMLSEC_NO_RIPEMD160_FALSE XMLSEC_NO_RIPEMD160 XMLSEC_NO_HMAC_TRUE XMLSEC_NO_HMAC_FALSE XMLSEC_NO_HMAC XMLSEC_NO_DSA_TRUE XMLSEC_NO_DSA_FALSE XMLSEC_NO_DSA XMLSEC_NO_RSA_TRUE XMLSEC_NO_RSA_FALSE XMLSEC_NO_RSA XMLSEC_NO_X509_TRUE XMLSEC_NO_X509_FALSE XMLSEC_NO_X509 XMLSEC_NO_DES_TRUE XMLSEC_NO_DES_FALSE XMLSEC_NO_DES XMLSEC_NO_AES_TRUE XMLSEC_NO_AES_FALSE XMLSEC_NO_AES XMLSEC_NO_XMLDSIG_TRUE XMLSEC_NO_XMLDSIG_FALSE XMLSEC_NO_XMLDSIG XMLSEC_NO_XMLENC_TRUE XMLSEC_NO_XMLENC_FALSE XMLSEC_NO_XMLENC XMLSEC_NO_XKMS_TRUE XMLSEC_NO_XKMS_FALSE XMLSEC_NO_XKMS XMLSEC_NO_CRYPTO_DYNAMIC_LOADING_TRUE XMLSEC_NO_CRYPTO_DYNAMIC_LOADING_FALSE XMLSEC_NO_CRYPTO_DYNAMIC_LOADING XMLSEC_DL_INCLUDES XMLSEC_DL_LIBS XMLSEC_NO_APPS_CRYPTO_DYNAMIC_LOADING_TRUE XMLSEC_NO_APPS_CRYPTO_DYNAMIC_LOADING_FALSE XMLSEC_NO_APPS_CRYPTO_DYNAMIC_LOADING XMLSEC_DOCDIR XMLSEC_STATIC_BINARIES XMLSEC_CORE_CFLAGS XMLSEC_CORE_LIBS XMLSEC_LIBDIR XMLSEC_OPENSSL_CFLAGS XMLSEC_OPENSSL_LIBS XMLSEC_GNUTLS_CFLAGS XMLSEC_GNUTLS_LIBS XMLSEC_NSS_CFLAGS XMLSEC_NSS_LIBS XMLSEC_CFLAGS XMLSEC_LIBS XMLSEC_DEFINES XMLSEC_APP_DEFINES XMLSEC_CRYPTO XMLSEC_CRYPTO_LIST XMLSEC_CRYPTO_DISABLED_LIST XMLSEC_CRYPTO_LIB XMLSEC_CRYPTO_CFLAGS XMLSEC_CRYPTO_LIBS XMLSEC_CRYPTO_PC_FILES_LIST LIBOBJS LTLIBOBJS'
++ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS build build_cpu build_vendor build_os host host_cpu host_vendor host_os XMLSEC_VERSION XMLSEC_PACKAGE XMLSEC_VERSION_SAFE XMLSEC_VERSION_MAJOR XMLSEC_VERSION_MINOR XMLSEC_VERSION_SUBMINOR XMLSEC_VERSION_INFO INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA CYGPATH_W PACKAGE VERSION ACLOCAL AUTOCONF AUTOMAKE AUTOHEADER MAKEINFO AMTAR install_sh STRIP ac_ct_STRIP INSTALL_STRIP_PROGRAM mkdir_p AWK SET_MAKE am__leading_dot MAINTAINER_MODE_TRUE MAINTAINER_MODE_FALSE MAINT CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT DEPDIR am__include am__quote AMDEP_TRUE AMDEP_FALSE AMDEPBACKSLASH CCDEPMODE am__fastdepCC_TRUE am__fastdepCC_FALSE EGREP LN_S ECHO AR ac_ct_AR RANLIB ac_ct_RANLIB CPP CXX CXXFLAGS ac_ct_CXX CXXDEPMODE am__fastdepCXX_TRUE am__fastdepCXX_FALSE CXXCPP F77 FFLAGS ac_ct_F77 LIBTOOL RM CP MV TAR HELP2MAN MAN2HTML U ANSI2KNR INSTALL_LTDL_TRUE INSTALL_LTDL_FALSE CONVENIENCE_LTDL_TRUE CONVENIENCE_LTDL_FALSE LIBADD_DL PKG_CONFIG_ENABLED PKG_CONFIG LIBXML_CFLAGS LIBXML_LIBS LIBXML262_CFLAGS LIBXML262_LIBS LIBXML_CONFIG LIBXML_MIN_VERSION LIBXSLT_CFLAGS LIBXSLT_LIBS XMLSEC_NO_LIBXSLT LIBXSLT_CONFIG LIBXSLT_MIN_VERSION OPENSSL_CFLAGS OPENSSL_LIBS OPENSSL097_CFLAGS OPENSSL097_LIBS XMLSEC_NO_OPENSSL_TRUE XMLSEC_NO_OPENSSL_FALSE XMLSEC_NO_OPENSSL OPENSSL_CRYPTO_LIB OPENSSL_MIN_VERSION GNUTLS_CFLAGS GNUTLS_LIBS XMLSEC_NO_GNUTLS_TRUE XMLSEC_NO_GNUTLS_FALSE XMLSEC_NO_GNUTLS GNUTLS_CRYPTO_LIB GNUTLS_MIN_VERSION NSS_CFLAGS NSS_LIBS XMLSEC_NO_NSS_TRUE XMLSEC_NO_NSS_FALSE XMLSEC_NO_NSS NSS_CRYPTO_LIB NSS_MIN_VERSION NSPR_MIN_VERSION MOZILLA_MIN_VERSION MSCRYPTO_CFLAGS MSCRYPTO_LIBS XMLSEC_NO_SHA1_TRUE XMLSEC_NO_SHA1_FALSE XMLSEC_NO_SHA1 XMLSEC_NO_RIPEMD160_TRUE XMLSEC_NO_RIPEMD160_FALSE XMLSEC_NO_RIPEMD160 XMLSEC_NO_HMAC_TRUE XMLSEC_NO_HMAC_FALSE XMLSEC_NO_HMAC XMLSEC_NO_DSA_TRUE XMLSEC_NO_DSA_FALSE XMLSEC_NO_DSA XMLSEC_NO_RSA_TRUE XMLSEC_NO_RSA_FALSE XMLSEC_NO_RSA XMLSEC_NO_X509_TRUE XMLSEC_NO_X509_FALSE XMLSEC_NO_X509 XMLSEC_NO_DES_TRUE XMLSEC_NO_DES_FALSE XMLSEC_NO_DES XMLSEC_NO_AES_TRUE XMLSEC_NO_AES_FALSE XMLSEC_NO_AES XMLSEC_NO_XMLDSIG_TRUE XMLSEC_NO_XMLDSIG_FALSE XMLSEC_NO_XMLDSIG XMLSEC_NO_XMLENC_TRUE XMLSEC_NO_XMLENC_FALSE XMLSEC_NO_XMLENC XMLSEC_NO_XKMS_TRUE XMLSEC_NO_XKMS_FALSE XMLSEC_NO_XKMS XMLSEC_NO_CRYPTO_DYNAMIC_LOADING_TRUE XMLSEC_NO_CRYPTO_DYNAMIC_LOADING_FALSE XMLSEC_NO_CRYPTO_DYNAMIC_LOADING XMLSEC_DL_INCLUDES XMLSEC_DL_LIBS XMLSEC_NO_APPS_CRYPTO_DYNAMIC_LOADING_TRUE XMLSEC_NO_APPS_CRYPTO_DYNAMIC_LOADING_FALSE XMLSEC_NO_APPS_CRYPTO_DYNAMIC_LOADING XMLSEC_DOCDIR XMLSEC_STATIC_BINARIES XMLSEC_CORE_CFLAGS XMLSEC_CORE_LIBS XMLSEC_LIBDIR XMLSEC_OPENSSL_CFLAGS XMLSEC_OPENSSL_LIBS XMLSEC_GNUTLS_CFLAGS XMLSEC_GNUTLS_LIBS XMLSEC_NSS_CFLAGS XMLSEC_NSS_LIBS XMLSEC_CFLAGS XMLSEC_LIBS XMLSEC_DEFINES XMLSEC_APP_DEFINES XMLSEC_CRYPTO XMLSEC_CRYPTO_LIST XMLSEC_CRYPTO_DISABLED_LIST XMLSEC_CRYPTO_LIB XMLSEC_CRYPTO_CFLAGS XMLSEC_CRYPTO_LIBS XMLSEC_CRYPTO_PC_FILES_LIST LIBOBJS LTLIBOBJS'
+ ac_subst_files=''
+
+ # Initialize some variables set by options.
+@@ -1072,6 +1072,7 @@
+ --with-nss=PFX nss location
+ --with-nspr=PFX nspr location (needed for NSS)
+ --with-mozilla-ver=VER mozilla version (alt to --with-nss, --with-nspr)
++ --with-mscrypto try to use mscrypto
+ --with-html-dir=PATH path to installed docs
+
+ Some influential environment variables:
+@@ -2045,8 +2046,8 @@
+
+ ac_ext=c
+ ac_cpp='$CPP $CPPFLAGS'
+-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
++ac_compile='$CC -c $ADDCFLAGS $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
++ac_link='$CC -o conftest$ac_exeext $ADDCFLAGS $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ ac_compiler_gnu=$ac_cv_c_compiler_gnu
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
+@@ -2698,15 +2699,15 @@
+ CFLAGS=$ac_save_CFLAGS
+ elif test $ac_cv_prog_cc_g = yes; then
+ if test "$GCC" = yes; then
+- CFLAGS="-g -O2"
++ CFLAGS="$ADDCFLAGS -g -O2"
+ else
+- CFLAGS="-g"
++ CFLAGS="$ADDCFLAGS -g"
+ fi
+ else
+ if test "$GCC" = yes; then
+- CFLAGS="-O2"
++ CFLAGS="$ADDCFLAGS -O2"
+ else
+- CFLAGS=
++ CFLAGS="$ADDCFLAGS"
+ fi
+ fi
+ echo "$as_me:$LINENO: checking for $CC option to accept ANSI C" >&5
+@@ -6350,11 +6351,11 @@
+ lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4'
+ ;;
+
+- beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
++ beos* | cygwin* | mingw* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
+ # PIC is the default for these OSes.
+ ;;
+
+- mingw* | pw32* | os2*)
++ pw32* | os2*)
+ # This hack is so that the source file can tell whether it is being
+ # built for inclusion in a dll (and should export symbols for example).
+ lt_prog_compiler_pic='-DDLL_EXPORT'
+@@ -6409,7 +6410,7 @@
+ fi
+ ;;
+
+- mingw* | pw32* | os2*)
++ pw32* | os2*)
+ # This hack is so that the source file can tell whether it is being
+ # built for inclusion in a dll (and should export symbols for example).
+ lt_prog_compiler_pic='-DDLL_EXPORT'
+@@ -6752,7 +6753,7 @@
+ export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGS] /s/.* \([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW] /s/.* //'\'' | sort | uniq > $export_symbols'
+
+ if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then
+- archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib'
++ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--exclude-libs,ALL ${wl}--out-implib,$lib'
+ # If the export-symbols file already is a .def file (1st line
+ # is EXPORTS), use it as is; otherwise, prepend...
+ archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+@@ -7778,7 +7779,7 @@
+ ;;
+
+ freebsd*)
+- objformat=`test -x /usr/bin/objformat && /usr/bin/objformat || echo aout`
++ objformat=`test -x /usr/bin/objformat && /usr/bin/objformat || echo elf`
+ version_type=freebsd-$objformat
+ case $version_type in
+ freebsd-elf*)
+@@ -9046,7 +9047,7 @@
+ ;;
+ esac
+ output_verbose_link_cmd='echo'
+- archive_cmds='$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs$compiler_flags -install_name $rpath/$soname $verstring'
++ archive_cmds='$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs$compiler_flags -install_name @executable_path/$soname $verstring'
+ module_cmds='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags'
+ # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's
+ archive_expsym_cmds='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs$compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+@@ -10088,7 +10089,7 @@
+ enable_shared_with_static_runtimes_CXX=yes
+
+ if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then
+- archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib'
++ archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--exclude-libs,ALL ${wl}--out-implib,$lib'
+ # If the export-symbols file already is a .def file (1st line
+ # is EXPORTS), use it as is; otherwise, prepend...
+ archive_expsym_cmds_CXX='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+@@ -10816,10 +10817,10 @@
+ # like `-m68040'.
+ lt_prog_compiler_pic_CXX='-m68020 -resident32 -malways-restore-a4'
+ ;;
+- beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
++ beos* | cygwin* | mingw* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
+ # PIC is the default for these OSes.
+ ;;
+- mingw* | os2* | pw32*)
++ os2* | pw32*)
+ # This hack is so that the source file can tell whether it is being
+ # built for inclusion in a dll (and should export symbols for example).
+ lt_prog_compiler_pic_CXX='-DDLL_EXPORT'
+@@ -11497,7 +11498,7 @@
+ ;;
+
+ freebsd*)
+- objformat=`test -x /usr/bin/objformat && /usr/bin/objformat || echo aout`
++ objformat=`test -x /usr/bin/objformat && /usr/bin/objformat || echo elf`
+ version_type=freebsd-$objformat
+ case $version_type in
+ freebsd-elf*)
+@@ -13259,11 +13260,11 @@
+ lt_prog_compiler_pic_F77='-m68020 -resident32 -malways-restore-a4'
+ ;;
+
+- beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
++ beos* | cygwin* | mingw* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
+ # PIC is the default for these OSes.
+ ;;
+
+- mingw* | pw32* | os2*)
++ pw32* | os2*)
+ # This hack is so that the source file can tell whether it is being
+ # built for inclusion in a dll (and should export symbols for example).
+ lt_prog_compiler_pic_F77='-DDLL_EXPORT'
+@@ -13661,7 +13662,7 @@
+ export_symbols_cmds_F77='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGS] /s/.* \([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW] /s/.* //'\'' | sort | uniq > $export_symbols'
+
+ if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then
+- archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib'
++ archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--exclude-libs,ALL ${wl}--out-implib,$lib'
+ # If the export-symbols file already is a .def file (1st line
+ # is EXPORTS), use it as is; otherwise, prepend...
+ archive_expsym_cmds_F77='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+@@ -14667,7 +14668,7 @@
+ ;;
+
+ freebsd*)
+- objformat=`test -x /usr/bin/objformat && /usr/bin/objformat || echo aout`
++ objformat=`test -x /usr/bin/objformat && /usr/bin/objformat || echo elf`
+ version_type=freebsd-$objformat
+ case $version_type in
+ freebsd-elf*)
+@@ -15607,11 +15608,11 @@
+ lt_prog_compiler_pic_GCJ='-m68020 -resident32 -malways-restore-a4'
+ ;;
+
+- beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
++ beos* | cygwin* | mingw* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
+ # PIC is the default for these OSes.
+ ;;
+
+- mingw* | pw32* | os2*)
++ pw32* | os2*)
+ # This hack is so that the source file can tell whether it is being
+ # built for inclusion in a dll (and should export symbols for example).
+ lt_prog_compiler_pic_GCJ='-DDLL_EXPORT'
+@@ -15666,7 +15667,7 @@
+ fi
+ ;;
+
+- mingw* | pw32* | os2*)
++ pw32* | os2*)
+ # This hack is so that the source file can tell whether it is being
+ # built for inclusion in a dll (and should export symbols for example).
+ lt_prog_compiler_pic_GCJ='-DDLL_EXPORT'
+@@ -16009,7 +16010,7 @@
+ export_symbols_cmds_GCJ='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGS] /s/.* \([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW] /s/.* //'\'' | sort | uniq > $export_symbols'
+
+ if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then
+- archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib'
++ archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--exclude-libs,ALL ${wl}--out-implib,$lib'
+ # If the export-symbols file already is a .def file (1st line
+ # is EXPORTS), use it as is; otherwise, prepend...
+ archive_expsym_cmds_GCJ='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+@@ -17035,7 +17036,7 @@
+ ;;
+
+ freebsd*)
+- objformat=`test -x /usr/bin/objformat && /usr/bin/objformat || echo aout`
++ objformat=`test -x /usr/bin/objformat && /usr/bin/objformat || echo elf`
+ version_type=freebsd-$objformat
+ case $version_type in
+ freebsd-elf*)
+@@ -24598,7 +24599,7 @@
+ fi
+
+ LIBXML_MIN_VERSION="2.4.2"
+-LIBXML_CONFIG="xml2-config"
++LIBXML_CONFIG="./libxml2-config"
+ LIBXML_CFLAGS=""
+ LIBXML_LIBS=""
+ LIBXML_FOUND="no"
+@@ -25678,12 +25679,26 @@
+
+ XMLSEC_NO_NSS="1"
+ MOZILLA_MIN_VERSION="1.4"
++if test "z$MOZ_FLAVOUR" = "zfirefox" ; then
++ MOZILLA_MIN_VERSION="1.0"
++fi
+ NSS_MIN_VERSION="3.2"
+ NSPR_MIN_VERSION="4.0"
+ NSS_CFLAGS=""
+ NSS_LIBS=""
+-NSS_LIBS_LIST="-lnss3 -lsmime3"
+-NSPR_LIBS_LIST="-lnspr4 -lplds4 -lplc4"
++
++case $host_os in
++cygwin* | mingw* | pw32*)
++ NSS_LIBS_LIST="-lnss3 -lsmime3"
++ NSPR_LIBS_LIST="-lnspr4"
++ ;;
++
++*)
++ NSS_LIBS_LIST="-lnss3 -lsoftokn3 -lsmime3"
++ NSPR_LIBS_LIST="-lnspr4 -lplds4 -lplc4"
++ ;;
++esac
++
+ NSS_CRYPTO_LIB="$PACKAGE-nss"
+ NSS_FOUND="no"
+
+@@ -25766,23 +25781,122 @@
+ else
+ PKG_CONFIG_MIN_VERSION=0.9.0
+ if $PKG_CONFIG --atleast-pkgconfig-version $PKG_CONFIG_MIN_VERSION; then
+- echo "$as_me:$LINENO: checking for mozilla-nspr >= $MOZILLA_MIN_VERSION mozilla-nss >= $MOZILLA_MIN_VERSION" >&5
+-echo $ECHO_N "checking for mozilla-nspr >= $MOZILLA_MIN_VERSION mozilla-nss >= $MOZILLA_MIN_VERSION... $ECHO_C" >&6
++ echo "$as_me:$LINENO: checking for $MOZ_FLAVOUR-nspr >= $MOZILLA_MIN_VERSION $MOZ_FLAVOUR-nss >= $MOZILLA_MIN_VERSION" >&5
++echo $ECHO_N "checking for $MOZ_FLAVOUR-nspr >= $MOZILLA_MIN_VERSION $MOZ_FLAVOUR-nss >= $MOZILLA_MIN_VERSION... $ECHO_C" >&6
++
++ if $PKG_CONFIG --exists "$MOZ_FLAVOUR-nspr >= $MOZILLA_MIN_VERSION $MOZ_FLAVOUR-nss >= $MOZILLA_MIN_VERSION" ; then
++ echo "$as_me:$LINENO: result: yes" >&5
++echo "${ECHO_T}yes" >&6
++ succeeded=yes
++
++ echo "$as_me:$LINENO: checking NSS_CFLAGS" >&5
++echo $ECHO_N "checking NSS_CFLAGS... $ECHO_C" >&6
++ NSS_CFLAGS=`$PKG_CONFIG --cflags "$MOZ_FLAVOUR-nspr >= $MOZILLA_MIN_VERSION $MOZ_FLAVOUR-nss >= $MOZILLA_MIN_VERSION"`
++ echo "$as_me:$LINENO: result: $NSS_CFLAGS" >&5
++echo "${ECHO_T}$NSS_CFLAGS" >&6
++
++ echo "$as_me:$LINENO: checking NSS_LIBS" >&5
++echo $ECHO_N "checking NSS_LIBS... $ECHO_C" >&6
++ NSS_LIBS=`$PKG_CONFIG --libs "$MOZ_FLAVOUR-nspr >= $MOZILLA_MIN_VERSION $MOZ_FLAVOUR-nss >= $MOZILLA_MIN_VERSION"`
++ echo "$as_me:$LINENO: result: $NSS_LIBS" >&5
++echo "${ECHO_T}$NSS_LIBS" >&6
++ else
++ NSS_CFLAGS=""
++ NSS_LIBS=""
++ ## If we have a custom action on failure, don't print errors, but
++ ## do set a variable so people can do so.
++ NSS_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "$MOZ_FLAVOUR-nspr >= $MOZILLA_MIN_VERSION $MOZ_FLAVOUR-nss >= $MOZILLA_MIN_VERSION"`
++
++ fi
++
++
++
+ else
-+ ac_dir=`(dirname "$ac_file") 2>/dev/null ||
-+ $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
-+ X"$ac_file" : 'X\(//\)[^/]' \| \
-+ X"$ac_file" : 'X\(//\)$' \| \
-+ X"$ac_file" : 'X\(/\)' \| \
-+ . : '\(.\)' 2>/dev/null ||
-+ echo X"$ac_file" |
-+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
-+ /^X\(\/\/\)[^/].*/{ s//\1/; q; }
-+ /^X\(\/\/\)$/{ s//\1/; q; }
-+ /^X\(\/\).*/{ s//\1/; q; }
-+ s/.*/./; q'`
-+ { if $as_mkdir_p; then
-+ mkdir -p "$ac_dir"
-+ else
-+ as_dir="$ac_dir"
-+ as_dirs=
-+ while test ! -d "$as_dir"; do
-+ as_dirs="$as_dir $as_dirs"
-+ as_dir=`(dirname "$as_dir") 2>/dev/null ||
-+ $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
-+ X"$as_dir" : 'X\(//\)[^/]' \| \
-+ X"$as_dir" : 'X\(//\)$' \| \
-+ X"$as_dir" : 'X\(/\)' \| \
-+ . : '\(.\)' 2>/dev/null ||
-+ echo X"$as_dir" |
-+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
-+ /^X\(\/\/\)[^/].*/{ s//\1/; q; }
-+ /^X\(\/\/\)$/{ s//\1/; q; }
-+ /^X\(\/\).*/{ s//\1/; q; }
-+ s/.*/./; q'`
-+ done
-+ test ! -n "$as_dirs" || mkdir $as_dirs
-+ fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5
-+ echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;}
-+ { (exit 1); exit 1; }; }; }
-+
-+ rm -f $ac_file
-+ mv $tmp/config.h $ac_file
++ echo "*** Your version of pkg-config is too old. You need version $PKG_CONFIG_MIN_VERSION or newer."
++ echo "*** See http://www.freedesktop.org/software/pkgconfig"
+ fi
-+ else
-+ cat $tmp/config.h
-+ rm -f $tmp/config.h
-+ fi
-+ # Compute $ac_file's index in $config_headers.
-+ _am_stamp_count=1
-+ for _am_header in $config_headers :; do
-+ case $_am_header in
-+ $ac_file | $ac_file:* )
-+ break ;;
-+ * )
-+ _am_stamp_count=`expr $_am_stamp_count + 1` ;;
-+ esac
-+ done
-+ echo "timestamp for $ac_file" >`(dirname $ac_file) 2>/dev/null ||
-+ $as_expr X$ac_file : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
-+ X$ac_file : 'X\(//\)[^/]' \| \
-+ X$ac_file : 'X\(//\)$' \| \
-+ X$ac_file : 'X\(/\)' \| \
-+ . : '\(.\)' 2>/dev/null ||
-+ echo X$ac_file |
-+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
-+ /^X\(\/\/\)[^/].*/{ s//\1/; q; }
-+ /^X\(\/\/\)$/{ s//\1/; q; }
-+ /^X\(\/\).*/{ s//\1/; q; }
-+ s/.*/./; q'`/stamp-h$_am_stamp_count
-+ done
-+ _ACEOF
-+ cat >>$CONFIG_STATUS <<\_ACEOF
-+
-+ #
-+ # CONFIG_COMMANDS section.
-+ #
-+ for ac_file in : $CONFIG_COMMANDS; do test "x$ac_file" = x: && continue
-+ ac_dest=`echo "$ac_file" | sed 's,:.*,,'`
-+ ac_source=`echo "$ac_file" | sed 's,[^:]*:,,'`
-+ ac_dir=`(dirname "$ac_dest") 2>/dev/null ||
-+ $as_expr X"$ac_dest" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
-+ X"$ac_dest" : 'X\(//\)[^/]' \| \
-+ X"$ac_dest" : 'X\(//\)$' \| \
-+ X"$ac_dest" : 'X\(/\)' \| \
-+ . : '\(.\)' 2>/dev/null ||
-+ echo X"$ac_dest" |
-+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
-+ /^X\(\/\/\)[^/].*/{ s//\1/; q; }
-+ /^X\(\/\/\)$/{ s//\1/; q; }
-+ /^X\(\/\).*/{ s//\1/; q; }
-+ s/.*/./; q'`
-+ { if $as_mkdir_p; then
-+ mkdir -p "$ac_dir"
-+ else
-+ as_dir="$ac_dir"
-+ as_dirs=
-+ while test ! -d "$as_dir"; do
-+ as_dirs="$as_dir $as_dirs"
-+ as_dir=`(dirname "$as_dir") 2>/dev/null ||
-+ $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
-+ X"$as_dir" : 'X\(//\)[^/]' \| \
-+ X"$as_dir" : 'X\(//\)$' \| \
-+ X"$as_dir" : 'X\(/\)' \| \
-+ . : '\(.\)' 2>/dev/null ||
-+ echo X"$as_dir" |
-+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
-+ /^X\(\/\/\)[^/].*/{ s//\1/; q; }
-+ /^X\(\/\/\)$/{ s//\1/; q; }
-+ /^X\(\/\).*/{ s//\1/; q; }
-+ s/.*/./; q'`
-+ done
-+ test ! -n "$as_dirs" || mkdir $as_dirs
-+ fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5
-+ echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;}
-+ { (exit 1); exit 1; }; }; }
-+
-+ ac_builddir=.
-+
-+ if test "$ac_dir" != .; then
-+ ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
-+ # A "../" for each directory in $ac_dir_suffix.
-+ ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'`
-+ else
-+ ac_dir_suffix= ac_top_builddir=
-+ fi
-+
-+ case $srcdir in
-+ .) # No --srcdir option. We are building in place.
-+ ac_srcdir=.
-+ if test -z "$ac_top_builddir"; then
-+ ac_top_srcdir=.
-+ else
-+ ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'`
-+ fi ;;
-+ [\\/]* | ?:[\\/]* ) # Absolute path.
-+ ac_srcdir=$srcdir$ac_dir_suffix;
-+ ac_top_srcdir=$srcdir ;;
-+ *) # Relative path.
-+ ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix
-+ ac_top_srcdir=$ac_top_builddir$srcdir ;;
-+ esac
-+
-+ # Do not use `cd foo && pwd` to compute absolute paths, because
-+ # the directories may not exist.
-+ case `pwd` in
-+ .) ac_abs_builddir="$ac_dir";;
-+ *)
-+ case "$ac_dir" in
-+ .) ac_abs_builddir=`pwd`;;
-+ [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";;
-+ *) ac_abs_builddir=`pwd`/"$ac_dir";;
-+ esac;;
-+ esac
-+ case $ac_abs_builddir in
-+ .) ac_abs_top_builddir=${ac_top_builddir}.;;
-+ *)
-+ case ${ac_top_builddir}. in
-+ .) ac_abs_top_builddir=$ac_abs_builddir;;
-+ [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;;
-+ *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;;
-+ esac;;
-+ esac
-+ case $ac_abs_builddir in
-+ .) ac_abs_srcdir=$ac_srcdir;;
-+ *)
-+ case $ac_srcdir in
-+ .) ac_abs_srcdir=$ac_abs_builddir;;
-+ [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;;
-+ *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;;
-+ esac;;
-+ esac
-+ case $ac_abs_builddir in
-+ .) ac_abs_top_srcdir=$ac_top_srcdir;;
-+ *)
-+ case $ac_top_srcdir in
-+ .) ac_abs_top_srcdir=$ac_abs_builddir;;
-+ [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;;
-+ *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;;
-+ esac;;
-+ esac
-+
-+
-+ { echo "$as_me:$LINENO: executing $ac_dest commands" >&5
-+ echo "$as_me: executing $ac_dest commands" >&6;}
-+ case $ac_dest in
-+ depfiles ) test x"$AMDEP_TRUE" != x"" || for mf in $CONFIG_FILES; do
-+ # Strip MF so we end up with the name of the file.
-+ mf=`echo "$mf" | sed -e 's/:.*$//'`
-+ # Check whether this is an Automake generated Makefile or not.
-+ # We used to match only the files named `Makefile.in', but
-+ # some people rename them; so instead we look at the file content.
-+ # Grep'ing the first line is not enough: some people post-process
-+ # each Makefile.in and add a new line on top of each file to say so.
-+ # So let's grep whole file.
-+ if grep '^#.*generated by automake' $mf > /dev/null 2>&1; then
-+ dirpart=`(dirname "$mf") 2>/dev/null ||
-+ $as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
-+ X"$mf" : 'X\(//\)[^/]' \| \
-+ X"$mf" : 'X\(//\)$' \| \
-+ X"$mf" : 'X\(/\)' \| \
-+ . : '\(.\)' 2>/dev/null ||
-+ echo X"$mf" |
-+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
-+ /^X\(\/\/\)[^/].*/{ s//\1/; q; }
-+ /^X\(\/\/\)$/{ s//\1/; q; }
-+ /^X\(\/\).*/{ s//\1/; q; }
-+ s/.*/./; q'`
-+ else
-+ continue
-+ fi
-+ grep '^DEP_FILES *= *[^ #]' < "$mf" > /dev/null || continue
-+ # Extract the definition of DEP_FILES from the Makefile without
-+ # running `make'.
-+ DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
-+ test -z "$DEPDIR" && continue
-+ # When using ansi2knr, U may be empty or an underscore; expand it
-+ U=`sed -n 's/^U = //p' < "$mf"`
-+ test -d "$dirpart/$DEPDIR" || mkdir "$dirpart/$DEPDIR"
-+ # We invoke sed twice because it is the simplest approach to
-+ # changing $(DEPDIR) to its actual value in the expansion.
-+ for file in `sed -n '
-+ /^DEP_FILES = .*\\\\$/ {
-+ s/^DEP_FILES = //
-+ :loop
-+ s/\\\\$//
-+ p
-+ n
-+ /\\\\$/ b loop
-+ p
-+ }
-+ /^DEP_FILES = / s/^DEP_FILES = //p' < "$mf" | \
-+ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do
-+ # Make sure the directory exists.
-+ test -f "$dirpart/$file" && continue
-+ fdir=`(dirname "$file") 2>/dev/null ||
-+ $as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
-+ X"$file" : 'X\(//\)[^/]' \| \
-+ X"$file" : 'X\(//\)$' \| \
-+ X"$file" : 'X\(/\)' \| \
-+ . : '\(.\)' 2>/dev/null ||
-+ echo X"$file" |
-+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
-+ /^X\(\/\/\)[^/].*/{ s//\1/; q; }
-+ /^X\(\/\/\)$/{ s//\1/; q; }
-+ /^X\(\/\).*/{ s//\1/; q; }
-+ s/.*/./; q'`
-+ { if $as_mkdir_p; then
-+ mkdir -p $dirpart/$fdir
-+ else
-+ as_dir=$dirpart/$fdir
-+ as_dirs=
-+ while test ! -d "$as_dir"; do
-+ as_dirs="$as_dir $as_dirs"
-+ as_dir=`(dirname "$as_dir") 2>/dev/null ||
-+ $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
-+ X"$as_dir" : 'X\(//\)[^/]' \| \
-+ X"$as_dir" : 'X\(//\)$' \| \
-+ X"$as_dir" : 'X\(/\)' \| \
-+ . : '\(.\)' 2>/dev/null ||
-+ echo X"$as_dir" |
-+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
-+ /^X\(\/\/\)[^/].*/{ s//\1/; q; }
-+ /^X\(\/\/\)$/{ s//\1/; q; }
-+ /^X\(\/\).*/{ s//\1/; q; }
-+ s/.*/./; q'`
-+ done
-+ test ! -n "$as_dirs" || mkdir $as_dirs
-+ fi || { { echo "$as_me:$LINENO: error: cannot create directory $dirpart/$fdir" >&5
-+ echo "$as_me: error: cannot create directory $dirpart/$fdir" >&2;}
-+ { (exit 1); exit 1; }; }; }
-+
-+ # echo "creating $dirpart/$file"
-+ echo '# dummy' > "$dirpart/$file"
-+ done
-+ done
++ fi
++
++ if test $succeeded = yes; then
++ NSS_FOUND=yes
++ else
++ NSS_FOUND=no
++ fi
++
++ echo "$as_me:$LINENO: result: $NSS_FOUND" >&5
++echo "${ECHO_T}$NSS_FOUND" >&6
++ if test "z$NSS_FOUND" = "zno" ; then
++
++ succeeded=no
++
++ if test -z "$PKG_CONFIG"; then
++ # Extract the first word of "pkg-config", so it can be a program name with args.
++set dummy pkg-config; ac_word=$2
++echo "$as_me:$LINENO: checking for $ac_word" >&5
++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
++if test "${ac_cv_path_PKG_CONFIG+set}" = set; then
++ echo $ECHO_N "(cached) $ECHO_C" >&6
++else
++ case $PKG_CONFIG in
++ [\\/]* | ?:[\\/]*)
++ ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path.
+ ;;
-+ esac
-+ done
-+ _ACEOF
-+
-+ cat >>$CONFIG_STATUS <<\_ACEOF
-+
-+ { (exit 0); exit 0; }
-+ _ACEOF
-+ chmod +x $CONFIG_STATUS
-+ ac_clean_files=$ac_clean_files_save
-+
-+
-+ # configure is writing to config.log, and then calls config.status.
-+ # config.status does its own redirection, appending to config.log.
-+ # Unfortunately, on DOS this fails, as config.log is still kept open
-+ # by configure, so config.status won't be able to write to it; its
-+ # output is simply discarded. So we exec the FD to /dev/null,
-+ # effectively closing config.log, so it can be properly (re)opened and
-+ # appended to by config.status. When coming back to configure, we
-+ # need to make the FD available again.
-+ if test "$no_create" != yes; then
-+ ac_cs_success=:
-+ ac_config_status_args=
-+ test "$silent" = yes &&
-+ ac_config_status_args="$ac_config_status_args --quiet"
-+ exec 5>/dev/null
-+ $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false
-+ exec 5>>config.log
-+ # Use ||, not &&, to avoid exiting from the if with $? = 1, which
-+ # would make configure fail if this is the last instruction.
-+ $ac_cs_success || { (exit 1); exit 1; }
-+ fi
-+
-+ fi
-+
-+ if test "z$MSCRYPTO_FOUND" = "zyes" ; then
-+ ac_config_files="$ac_config_files include/xmlsec/mscrypto/Makefile src/mscrypto/Makefile"
-+ cat >confcache <<\_ACEOF
-+ # This file is a shell script that caches the results of configure
-+ # tests run on this system so they can be shared between configure
-+ # scripts and configure runs, see configure's option --config-cache.
-+ # It is not useful on other systems. If it contains results you don't
-+ # want to keep, you may remove or edit it.
-+ #
-+ # config.status only pays attention to the cache file if you give it
-+ # the --recheck option to rerun configure.
-+ #
-+ # `ac_cv_env_foo' variables (set or unset) will be overridden when
-+ # loading this file, other *unset* `ac_cv_foo' will be assigned the
-+ # following values.
-+
-+ _ACEOF
-+
-+ # The following way of writing the cache mishandles newlines in values,
-+ # but we know of no workaround that is simple, portable, and efficient.
-+ # So, don't put newlines in cache variables' values.
-+ # Ultrix sh set writes to stderr and can't be redirected directly,
-+ # and sets the high bit in the cache file unless we assign to the vars.
-+ {
-+ (set) 2>&1 |
-+ case `(ac_space=' '; set | grep ac_space) 2>&1` in
-+ *ac_space=\ *)
-+ # `set' does not quote correctly, so add quotes (double-quote
-+ # substitution turns \\\\ into \\, and sed turns \\ into \).
-+ sed -n \
-+ "s/'/'\\\\''/g;
-+ s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p"
-+ ;;
-+ *)
-+ # `set' quotes correctly as required by POSIX, so do not add quotes.
-+ sed -n \
-+ "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p"
-+ ;;
-+ esac;
-+ } |
-+ sed '
-+ t clear
-+ : clear
-+ s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
-+ t end
-+ /^ac_cv_env/!s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
-+ : end' >>confcache
-+ if diff $cache_file confcache >/dev/null 2>&1; then :; else
-+ if test -w $cache_file; then
-+ test "x$cache_file" != "x/dev/null" && echo "updating cache $cache_file"
-+ cat confcache >$cache_file
-+ else
-+ echo "not updating unwritable cache $cache_file"
-+ fi
-+ fi
-+ rm -f confcache
-+
-+ test "x$prefix" = xNONE && prefix=$ac_default_prefix
-+ # Let make expand exec_prefix.
-+ test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
-+
-+ # VPATH may cause trouble with some makes, so we remove $(srcdir),
-+ # ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and
-+ # trailing colons and then remove the whole line if VPATH becomes empty
-+ # (actually we leave an empty line to preserve line numbers).
-+ if test "x$srcdir" = x.; then
-+ ac_vpsub='/^[ ]*VPATH[ ]*=/{
-+ s/:*\$(srcdir):*/:/;
-+ s/:*\${srcdir}:*/:/;
-+ s/:*@srcdir@:*/:/;
-+ s/^\([^=]*=[ ]*\):*/\1/;
-+ s/:*$//;
-+ s/^[^=]*=[ ]*$//;
-+ }'
-+ fi
-+
-+ DEFS=-DHAVE_CONFIG_H
-+
-+ ac_libobjs=
-+ ac_ltlibobjs=
-+ for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
-+ # 1. Remove the extension, and $U if already installed.
-+ ac_i=`echo "$ac_i" |
-+ sed 's/\$U\././;s/\.o$//;s/\.obj$//'`
-+ # 2. Add them.
-+ ac_libobjs="$ac_libobjs $ac_i\$U.$ac_objext"
-+ ac_ltlibobjs="$ac_ltlibobjs $ac_i"'$U.lo'
-+ done
-+ LIBOBJS=$ac_libobjs
-+
-+ LTLIBOBJS=$ac_ltlibobjs
-+
-+
-+ if test -z "${MAINTAINER_MODE_TRUE}" && test -z "${MAINTAINER_MODE_FALSE}"; then
-+ { { echo "$as_me:$LINENO: error: conditional \"MAINTAINER_MODE\" was never defined.
-+ Usually this means the macro was only invoked conditionally." >&5
-+ echo "$as_me: error: conditional \"MAINTAINER_MODE\" was never defined.
-+ Usually this means the macro was only invoked conditionally." >&2;}
-+ { (exit 1); exit 1; }; }
-+ fi
-+ if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then
-+ { { echo "$as_me:$LINENO: error: conditional \"AMDEP\" was never defined.
-+ Usually this means the macro was only invoked conditionally." >&5
-+ echo "$as_me: error: conditional \"AMDEP\" was never defined.
-+ Usually this means the macro was only invoked conditionally." >&2;}
-+ { (exit 1); exit 1; }; }
-+ fi
-+ if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then
-+ { { echo "$as_me:$LINENO: error: conditional \"am__fastdepCC\" was never defined.
-+ Usually this means the macro was only invoked conditionally." >&5
-+ echo "$as_me: error: conditional \"am__fastdepCC\" was never defined.
-+ Usually this means the macro was only invoked conditionally." >&2;}
-+ { (exit 1); exit 1; }; }
-+ fi
-+ if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then
-+ { { echo "$as_me:$LINENO: error: conditional \"am__fastdepCXX\" was never defined.
-+ Usually this means the macro was only invoked conditionally." >&5
-+ echo "$as_me: error: conditional \"am__fastdepCXX\" was never defined.
-+ Usually this means the macro was only invoked conditionally." >&2;}
-+ { (exit 1); exit 1; }; }
-+ fi
-+ if test -z "${INSTALL_LTDL_TRUE}" && test -z "${INSTALL_LTDL_FALSE}"; then
-+ { { echo "$as_me:$LINENO: error: conditional \"INSTALL_LTDL\" was never defined.
-+ Usually this means the macro was only invoked conditionally." >&5
-+ echo "$as_me: error: conditional \"INSTALL_LTDL\" was never defined.
-+ Usually this means the macro was only invoked conditionally." >&2;}
-+ { (exit 1); exit 1; }; }
-+ fi
-+ if test -z "${CONVENIENCE_LTDL_TRUE}" && test -z "${CONVENIENCE_LTDL_FALSE}"; then
-+ { { echo "$as_me:$LINENO: error: conditional \"CONVENIENCE_LTDL\" was never defined.
-+ Usually this means the macro was only invoked conditionally." >&5
-+ echo "$as_me: error: conditional \"CONVENIENCE_LTDL\" was never defined.
-+ Usually this means the macro was only invoked conditionally." >&2;}
-+ { (exit 1); exit 1; }; }
-+ fi
-+ if test -z "${XMLSEC_NO_OPENSSL_TRUE}" && test -z "${XMLSEC_NO_OPENSSL_FALSE}"; then
-+ { { echo "$as_me:$LINENO: error: conditional \"XMLSEC_NO_OPENSSL\" was never defined.
-+ Usually this means the macro was only invoked conditionally." >&5
-+ echo "$as_me: error: conditional \"XMLSEC_NO_OPENSSL\" was never defined.
-+ Usually this means the macro was only invoked conditionally." >&2;}
-+ { (exit 1); exit 1; }; }
-+ fi
-+ if test -z "${XMLSEC_NO_GNUTLS_TRUE}" && test -z "${XMLSEC_NO_GNUTLS_FALSE}"; then
-+ { { echo "$as_me:$LINENO: error: conditional \"XMLSEC_NO_GNUTLS\" was never defined.
-+ Usually this means the macro was only invoked conditionally." >&5
-+ echo "$as_me: error: conditional \"XMLSEC_NO_GNUTLS\" was never defined.
-+ Usually this means the macro was only invoked conditionally." >&2;}
-+ { (exit 1); exit 1; }; }
-+ fi
-+ if test -z "${XMLSEC_NO_NSS_TRUE}" && test -z "${XMLSEC_NO_NSS_FALSE}"; then
-+ { { echo "$as_me:$LINENO: error: conditional \"XMLSEC_NO_NSS\" was never defined.
-+ Usually this means the macro was only invoked conditionally." >&5
-+ echo "$as_me: error: conditional \"XMLSEC_NO_NSS\" was never defined.
-+ Usually this means the macro was only invoked conditionally." >&2;}
-+ { (exit 1); exit 1; }; }
-+ fi
-+ if test -z "${XMLSEC_NO_SHA1_TRUE}" && test -z "${XMLSEC_NO_SHA1_FALSE}"; then
-+ { { echo "$as_me:$LINENO: error: conditional \"XMLSEC_NO_SHA1\" was never defined.
-+ Usually this means the macro was only invoked conditionally." >&5
-+ echo "$as_me: error: conditional \"XMLSEC_NO_SHA1\" was never defined.
-+ Usually this means the macro was only invoked conditionally." >&2;}
-+ { (exit 1); exit 1; }; }
-+ fi
-+ if test -z "${XMLSEC_NO_RIPEMD160_TRUE}" && test -z "${XMLSEC_NO_RIPEMD160_FALSE}"; then
-+ { { echo "$as_me:$LINENO: error: conditional \"XMLSEC_NO_RIPEMD160\" was never defined.
-+ Usually this means the macro was only invoked conditionally." >&5
-+ echo "$as_me: error: conditional \"XMLSEC_NO_RIPEMD160\" was never defined.
-+ Usually this means the macro was only invoked conditionally." >&2;}
-+ { (exit 1); exit 1; }; }
-+ fi
-+ if test -z "${XMLSEC_NO_HMAC_TRUE}" && test -z "${XMLSEC_NO_HMAC_FALSE}"; then
-+ { { echo "$as_me:$LINENO: error: conditional \"XMLSEC_NO_HMAC\" was never defined.
-+ Usually this means the macro was only invoked conditionally." >&5
-+ echo "$as_me: error: conditional \"XMLSEC_NO_HMAC\" was never defined.
-+ Usually this means the macro was only invoked conditionally." >&2;}
-+ { (exit 1); exit 1; }; }
-+ fi
-+ if test -z "${XMLSEC_NO_DSA_TRUE}" && test -z "${XMLSEC_NO_DSA_FALSE}"; then
-+ { { echo "$as_me:$LINENO: error: conditional \"XMLSEC_NO_DSA\" was never defined.
-+ Usually this means the macro was only invoked conditionally." >&5
-+ echo "$as_me: error: conditional \"XMLSEC_NO_DSA\" was never defined.
-+ Usually this means the macro was only invoked conditionally." >&2;}
-+ { (exit 1); exit 1; }; }
-+ fi
-+ if test -z "${XMLSEC_NO_RSA_TRUE}" && test -z "${XMLSEC_NO_RSA_FALSE}"; then
-+ { { echo "$as_me:$LINENO: error: conditional \"XMLSEC_NO_RSA\" was never defined.
-+ Usually this means the macro was only invoked conditionally." >&5
-+ echo "$as_me: error: conditional \"XMLSEC_NO_RSA\" was never defined.
-+ Usually this means the macro was only invoked conditionally." >&2;}
-+ { (exit 1); exit 1; }; }
-+ fi
-+ if test -z "${XMLSEC_NO_X509_TRUE}" && test -z "${XMLSEC_NO_X509_FALSE}"; then
-+ { { echo "$as_me:$LINENO: error: conditional \"XMLSEC_NO_X509\" was never defined.
-+ Usually this means the macro was only invoked conditionally." >&5
-+ echo "$as_me: error: conditional \"XMLSEC_NO_X509\" was never defined.
-+ Usually this means the macro was only invoked conditionally." >&2;}
-+ { (exit 1); exit 1; }; }
-+ fi
-+ if test -z "${XMLSEC_NO_DES_TRUE}" && test -z "${XMLSEC_NO_DES_FALSE}"; then
-+ { { echo "$as_me:$LINENO: error: conditional \"XMLSEC_NO_DES\" was never defined.
-+ Usually this means the macro was only invoked conditionally." >&5
-+ echo "$as_me: error: conditional \"XMLSEC_NO_DES\" was never defined.
-+ Usually this means the macro was only invoked conditionally." >&2;}
-+ { (exit 1); exit 1; }; }
-+ fi
-+ if test -z "${XMLSEC_NO_AES_TRUE}" && test -z "${XMLSEC_NO_AES_FALSE}"; then
-+ { { echo "$as_me:$LINENO: error: conditional \"XMLSEC_NO_AES\" was never defined.
-+ Usually this means the macro was only invoked conditionally." >&5
-+ echo "$as_me: error: conditional \"XMLSEC_NO_AES\" was never defined.
-+ Usually this means the macro was only invoked conditionally." >&2;}
-+ { (exit 1); exit 1; }; }
-+ fi
-+ if test -z "${XMLSEC_NO_XMLDSIG_TRUE}" && test -z "${XMLSEC_NO_XMLDSIG_FALSE}"; then
-+ { { echo "$as_me:$LINENO: error: conditional \"XMLSEC_NO_XMLDSIG\" was never defined.
-+ Usually this means the macro was only invoked conditionally." >&5
-+ echo "$as_me: error: conditional \"XMLSEC_NO_XMLDSIG\" was never defined.
-+ Usually this means the macro was only invoked conditionally." >&2;}
-+ { (exit 1); exit 1; }; }
-+ fi
-+ if test -z "${XMLSEC_NO_XMLENC_TRUE}" && test -z "${XMLSEC_NO_XMLENC_FALSE}"; then
-+ { { echo "$as_me:$LINENO: error: conditional \"XMLSEC_NO_XMLENC\" was never defined.
-+ Usually this means the macro was only invoked conditionally." >&5
-+ echo "$as_me: error: conditional \"XMLSEC_NO_XMLENC\" was never defined.
-+ Usually this means the macro was only invoked conditionally." >&2;}
-+ { (exit 1); exit 1; }; }
-+ fi
-+ if test -z "${XMLSEC_NO_XKMS_TRUE}" && test -z "${XMLSEC_NO_XKMS_FALSE}"; then
-+ { { echo "$as_me:$LINENO: error: conditional \"XMLSEC_NO_XKMS\" was never defined.
-+ Usually this means the macro was only invoked conditionally." >&5
-+ echo "$as_me: error: conditional \"XMLSEC_NO_XKMS\" was never defined.
-+ Usually this means the macro was only invoked conditionally." >&2;}
-+ { (exit 1); exit 1; }; }
-+ fi
-+ if test -z "${XMLSEC_NO_CRYPTO_DYNAMIC_LOADING_TRUE}" && test -z "${XMLSEC_NO_CRYPTO_DYNAMIC_LOADING_FALSE}"; then
-+ { { echo "$as_me:$LINENO: error: conditional \"XMLSEC_NO_CRYPTO_DYNAMIC_LOADING\" was never defined.
-+ Usually this means the macro was only invoked conditionally." >&5
-+ echo "$as_me: error: conditional \"XMLSEC_NO_CRYPTO_DYNAMIC_LOADING\" was never defined.
-+ Usually this means the macro was only invoked conditionally." >&2;}
-+ { (exit 1); exit 1; }; }
-+ fi
-+ if test -z "${XMLSEC_NO_APPS_CRYPTO_DYNAMIC_LOADING_TRUE}" && test -z "${XMLSEC_NO_APPS_CRYPTO_DYNAMIC_LOADING_FALSE}"; then
-+ { { echo "$as_me:$LINENO: error: conditional \"XMLSEC_NO_APPS_CRYPTO_DYNAMIC_LOADING\" was never defined.
-+ Usually this means the macro was only invoked conditionally." >&5
-+ echo "$as_me: error: conditional \"XMLSEC_NO_APPS_CRYPTO_DYNAMIC_LOADING\" was never defined.
-+ Usually this means the macro was only invoked conditionally." >&2;}
-+ { (exit 1); exit 1; }; }
-+ fi
-+
-+ : ${CONFIG_STATUS=./config.status}
-+ ac_clean_files_save=$ac_clean_files
-+ ac_clean_files="$ac_clean_files $CONFIG_STATUS"
-+ { echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5
-+ echo "$as_me: creating $CONFIG_STATUS" >&6;}
-+ cat >$CONFIG_STATUS <<_ACEOF
-+ #! $SHELL
-+ # Generated by $as_me.
-+ # Run this file to recreate the current configuration.
-+ # Compiler output produced by configure, useful for debugging
-+ # configure, is in config.log if it exists.
-+
-+ debug=false
-+ ac_cs_recheck=false
-+ ac_cs_silent=false
-+ SHELL=\${CONFIG_SHELL-$SHELL}
-+ _ACEOF
-+
-+ cat >>$CONFIG_STATUS <<\_ACEOF
-+ ## --------------------- ##
-+ ## M4sh Initialization. ##
-+ ## --------------------- ##
-+
-+ # Be Bourne compatible
-+ if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
-+ emulate sh
-+ NULLCMD=:
-+ # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
-+ # is contrary to our usage. Disable this feature.
-+ alias -g '${1+"$@"}'='"$@"'
-+ elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then
-+ set -o posix
-+ fi
-+ DUALCASE=1; export DUALCASE # for MKS sh
-+
-+ # Support unset when possible.
-+ if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
-+ as_unset=unset
-+ else
-+ as_unset=false
-+ fi
-+
-+
-+ # Work around bugs in pre-3.0 UWIN ksh.
-+ $as_unset ENV MAIL MAILPATH
-+ PS1='$ '
-+ PS2='> '
-+ PS4='+ '
-+
-+ # NLS nuisances.
-+ for as_var in \
-+ LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \
-+ LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \
-+ LC_TELEPHONE LC_TIME
-+ do
-+ if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then
-+ eval $as_var=C; export $as_var
-+ else
-+ $as_unset $as_var
-+ fi
-+ done
-+
-+ # Required to use basename.
-+ if expr a : '\(a\)' >/dev/null 2>&1; then
-+ as_expr=expr
-+ else
-+ as_expr=false
-+ fi
-+
-+ if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then
-+ as_basename=basename
-+ else
-+ as_basename=false
-+ fi
-+
-+
-+ # Name of the executable.
-+ as_me=`$as_basename "$0" ||
-+ $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
-+ X"$0" : 'X\(//\)$' \| \
-+ X"$0" : 'X\(/\)$' \| \
-+ . : '\(.\)' 2>/dev/null ||
-+ echo X/"$0" |
-+ sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; }
-+ /^X\/\(\/\/\)$/{ s//\1/; q; }
-+ /^X\/\(\/\).*/{ s//\1/; q; }
-+ s/.*/./; q'`
-+
-+
-+ # PATH needs CR, and LINENO needs CR and PATH.
-+ # Avoid depending upon Character Ranges.
-+ as_cr_letters='abcdefghijklmnopqrstuvwxyz'
-+ as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
-+ as_cr_Letters=$as_cr_letters$as_cr_LETTERS
-+ as_cr_digits='0123456789'
-+ as_cr_alnum=$as_cr_Letters$as_cr_digits
-+
-+ # The user is always right.
-+ if test "${PATH_SEPARATOR+set}" != set; then
-+ echo "#! /bin/sh" >conf$$.sh
-+ echo "exit 0" >>conf$$.sh
-+ chmod +x conf$$.sh
-+ if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
-+ PATH_SEPARATOR=';'
-+ else
-+ PATH_SEPARATOR=:
-+ fi
-+ rm -f conf$$.sh
-+ fi
-+
-+
-+ as_lineno_1=$LINENO
-+ as_lineno_2=$LINENO
-+ as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
-+ test "x$as_lineno_1" != "x$as_lineno_2" &&
-+ test "x$as_lineno_3" = "x$as_lineno_2" || {
-+ # Find who we are. Look in the path if we contain no path at all
-+ # relative or not.
-+ case $0 in
-+ *[\\/]* ) as_myself=$0 ;;
-+ *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-+ for as_dir in $PATH
-+ do
-+ IFS=$as_save_IFS
-+ test -z "$as_dir" && as_dir=.
-+ test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
-+ done
-+
-+ ;;
-+ esac
-+ # We did not find ourselves, most probably we were run as `sh COMMAND'
-+ # in which case we are not to be found in the path.
-+ if test "x$as_myself" = x; then
-+ as_myself=$0
-+ fi
-+ if test ! -f "$as_myself"; then
-+ { { echo "$as_me:$LINENO: error: cannot find myself; rerun with an absolute path" >&5
-+ echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2;}
-+ { (exit 1); exit 1; }; }
-+ fi
-+ case $CONFIG_SHELL in
-+ '')
-+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-+ for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
-+ do
-+ IFS=$as_save_IFS
-+ test -z "$as_dir" && as_dir=.
-+ for as_base in sh bash ksh sh5; do
-+ case $as_dir in
-+ /*)
-+ if ("$as_dir/$as_base" -c '
-+ as_lineno_1=$LINENO
-+ as_lineno_2=$LINENO
-+ as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
-+ test "x$as_lineno_1" != "x$as_lineno_2" &&
-+ test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then
-+ $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; }
-+ $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; }
-+ CONFIG_SHELL=$as_dir/$as_base
-+ export CONFIG_SHELL
-+ exec "$CONFIG_SHELL" "$0" ${1+"$@"}
-+ fi;;
-+ esac
++ *)
++ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++ IFS=$as_save_IFS
++ test -z "$as_dir" && as_dir=.
++ for ac_exec_ext in '' $ac_executable_extensions; do
++ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
++ ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext"
++ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
++ break 2
++ fi
++done
++done
++
++ test -z "$ac_cv_path_PKG_CONFIG" && ac_cv_path_PKG_CONFIG="no"
++ ;;
++esac
++fi
++PKG_CONFIG=$ac_cv_path_PKG_CONFIG
++
++if test -n "$PKG_CONFIG"; then
++ echo "$as_me:$LINENO: result: $PKG_CONFIG" >&5
++echo "${ECHO_T}$PKG_CONFIG" >&6
++else
++ echo "$as_me:$LINENO: result: no" >&5
++echo "${ECHO_T}no" >&6
++fi
++
++ fi
++
++ if test "$PKG_CONFIG" = "no" ; then
++ echo "*** The pkg-config script could not be found. Make sure it is"
++ echo "*** in your path, or set the PKG_CONFIG environment variable"
++ echo "*** to the full path to pkg-config."
++ echo "*** Or see http://www.freedesktop.org/software/pkgconfig to get pkg-config."
++ else
++ PKG_CONFIG_MIN_VERSION=0.9.0
++ if $PKG_CONFIG --atleast-pkgconfig-version $PKG_CONFIG_MIN_VERSION; then
++ echo "$as_me:$LINENO: checking for nspr >= $NSPR_MIN_VERSION nss >= $NSS_MIN_VERSION" >&5
++echo $ECHO_N "checking for nspr >= $NSPR_MIN_VERSION nss >= $NSS_MIN_VERSION... $ECHO_C" >&6
+
+- if $PKG_CONFIG --exists "mozilla-nspr >= $MOZILLA_MIN_VERSION mozilla-nss >= $MOZILLA_MIN_VERSION" ; then
++ if $PKG_CONFIG --exists "nspr >= $NSPR_MIN_VERSION nss >= $NSS_MIN_VERSION" ; then
+ echo "$as_me:$LINENO: result: yes" >&5
+ echo "${ECHO_T}yes" >&6
+ succeeded=yes
+
+ echo "$as_me:$LINENO: checking NSS_CFLAGS" >&5
+ echo $ECHO_N "checking NSS_CFLAGS... $ECHO_C" >&6
+- NSS_CFLAGS=`$PKG_CONFIG --cflags "mozilla-nspr >= $MOZILLA_MIN_VERSION mozilla-nss >= $MOZILLA_MIN_VERSION"`
++ NSS_CFLAGS=`$PKG_CONFIG --cflags "nspr >= $NSPR_MIN_VERSION nss >= $NSS_MIN_VERSION"`
+ echo "$as_me:$LINENO: result: $NSS_CFLAGS" >&5
+ echo "${ECHO_T}$NSS_CFLAGS" >&6
+
+ echo "$as_me:$LINENO: checking NSS_LIBS" >&5
+ echo $ECHO_N "checking NSS_LIBS... $ECHO_C" >&6
+- NSS_LIBS=`$PKG_CONFIG --libs "mozilla-nspr >= $MOZILLA_MIN_VERSION mozilla-nss >= $MOZILLA_MIN_VERSION"`
++ NSS_LIBS=`$PKG_CONFIG --libs "nspr >= $NSPR_MIN_VERSION nss >= $NSS_MIN_VERSION"`
+ echo "$as_me:$LINENO: result: $NSS_LIBS" >&5
+ echo "${ECHO_T}$NSS_LIBS" >&6
+ else
+@@ -25790,7 +25904,7 @@
+ NSS_LIBS=""
+ ## If we have a custom action on failure, don't print errors, but
+ ## do set a variable so people can do so.
+- NSS_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "mozilla-nspr >= $MOZILLA_MIN_VERSION mozilla-nss >= $MOZILLA_MIN_VERSION"`
++ NSS_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "nspr >= $NSPR_MIN_VERSION nss >= $NSS_MIN_VERSION"`
+
+ fi
+
+@@ -25808,6 +25922,9 @@
+ NSS_FOUND=no
+ fi
+
++ echo "$as_me:$LINENO: result: $NSS_FOUND" >&5
++echo "${ECHO_T}$NSS_FOUND" >&6
++ fi
+ fi
+
+ if test "z$NSS_FOUND" = "zno" ; then
+@@ -25817,8 +25934,8 @@
+ ac_mozilla_name=mozilla-$MOZILLA_MIN_VERSION
+ fi
+
+- ac_nss_lib_dir="/usr/lib /usr/lib64 /usr/local/lib /usr/lib/$ac_mozilla_name /usr/local/lib/$ac_mozilla_name"
+- ac_nss_inc_dir="/usr/include /usr/include/mozilla /usr/local/include /usr/local/include/mozilla /usr/include/$ac_mozilla_name /usr/local/include/$ac_mozilla_name"
++ ac_nss_lib_dir="${SOLARVERSION}/${INPATH}/lib${UPDMINOREXT}"
++ ac_nss_inc_dir="${SOLARVERSION}/${INPATH}/inc${UPDMINOREXT}/mozilla"
+
+ echo "$as_me:$LINENO: checking for nspr libraries >= $NSPR_MIN_VERSION" >&5
+ echo $ECHO_N "checking for nspr libraries >= $NSPR_MIN_VERSION... $ECHO_C" >&6
+@@ -25853,8 +25970,11 @@
+ done
+
+ for dir in $ac_nss_lib_dir ; do
+- if test -f $dir/libnspr4.so ; then
+- if test "z$dir" = "z/usr/lib" ; then
++ case $host_os in
++ cygwin* | mingw* | pw32*)
++ if test -f $dir/libnspr4.so -o -f $dir/libnspr4.dylib -o -f $dir/libnspr4.a ; then
++ # do not add -L/usr/lib because compiler does it anyway
++ if test "z$dir" = "z/usr/lib" ; then
+ NSPR_LIBS="$NSPR_LIBS_LIST"
+ else
+ if test "z$with_gnu_ld" = "zyes" ; then
+@@ -25865,7 +25985,26 @@
+ fi
+ NSPR_LIBS_FOUND="yes"
+ break
+- fi
++ fi
++ ;;
++
++ *)
++ if test -f $dir/libnspr4.so -o -f $dir/libnspr4.dylib ; then
++ # do not add -L/usr/lib because compiler does it anyway
++ if test "z$dir" = "z/usr/lib" ; then
++ NSPR_LIBS="$NSPR_LIBS_LIST"
++ else
++ if test "z$with_gnu_ld" = "zyes" ; then
++ NSPR_LIBS="-Wl,-rpath-link -Wl,$dir -L$dir $NSPR_LIBS_LIST"
++ else
++ NSPR_LIBS="-L$dir $NSPR_LIBS_LIST"
++ fi
++ fi
++ NSPR_LIBS_FOUND="yes"
++ break
++ fi
++ ;;
++ esac
+ done
+ fi
+
+@@ -25939,8 +26078,11 @@
+ done
+
+ for dir in $ac_nss_lib_dir ; do
+- if test -f $dir/libnss3.so ; then
+- if test "z$dir" = "z/usr/lib" ; then
++ case $host_os in
++ cygwin* | mingw* | pw32*)
++ if test -f $dir/libnss3.so -o -f $dir/libnss3.dylib -o -f $dir/libnss3.a ; then
++ # do not add -L/usr/lib because compiler does it anyway
++ if test "z$dir" = "z/usr/lib" ; then
+ NSS_LIBS="$NSS_LIBS_LIST"
+ else
+ if test "z$with_gnu_ld" = "zyes" ; then
+@@ -25951,7 +26093,26 @@
+ fi
+ NSS_LIBS_FOUND="yes"
+ break
+- fi
++ fi
++ ;;
++
++ *)
++ if test -f $dir/libnss3.so -o -f $dir/libnss3.dylib ; then
++ # do not add -L/usr/lib because compiler does it anyway
++ if test "z$dir" = "z/usr/lib" ; then
++ NSS_LIBS="$NSS_LIBS_LIST"
++ else
++ if test "z$with_gnu_ld" = "zyes" ; then
++ NSS_LIBS="-Wl,-rpath-link -Wl,$dir -L$dir $NSS_LIBS_LIST"
++ else
++ NSS_LIBS="-L$dir $NSS_LIBS_LIST"
++ fi
++ fi
++ NSS_LIBS_FOUND="yes"
++ break
++ fi
++ ;;
++ esac
+ done
+ fi
+
+@@ -26004,6 +26165,12 @@
+ fi
+ fi
+
++case $host_os in
++darwin*)
++ NSS_LIBS="$NSS_LIBS "`"$PERL" "$SOLARENV/bin/macosx-dylib-link-list.pl" $NSS_LIBS`
++ ;;
++esac
++
+ if test "z$NSS_FOUND" = "zyes" ; then
+ XMLSEC_NO_NSS="0"
+ NSS_CFLAGS="$NSS_CFLAGS -DXMLSEC_CRYPTO_NSS=1"
+@@ -26037,6 +26204,109 @@
+
+
+
++MSCRYPTO_CFLAGS=""
++MSCRYPTO_LIBS=""
++MSCRYPTO_FOUND="no"
++
++
++# Check whether --with-mscrypto or --without-mscrypto was given.
++if test "${with_mscrypto+set}" = set; then
++ withval="$with_mscrypto"
++
++fi;
++if test "z$with_mscrypto" = "zno" ; then
++ echo "$as_me:$LINENO: checking for MSCRYPTO libraries" >&5
++echo $ECHO_N "checking for MSCRYPTO libraries... $ECHO_C" >&6
++ echo "$as_me:$LINENO: result: no" >&5
++echo "${ECHO_T}no" >&6
++ MSCRYPTO_FOUND="without"
++else
++ ac_mscrypto_lib_dir="${PSDK_HOME}/lib"
++ ac_mscrypto_inc_dir="${SOLARVERSION}/${INPATH}/inc${UPDMINOREXT}/external/mingw/include ${COMPATH}/include ${COMPATH}/include/w32api"
++ echo "$as_me:$LINENO: checking for mscrypto libraries" >&5
++echo $ECHO_N "checking for mscrypto libraries... $ECHO_C" >&6
++ MSCRYPTO_INCLUDES_FOUND="no"
++ MSCRYPTO_LIBS_FOUND="no"
++ WINCRYPT_H=""
++
++ for dir in $ac_mscrypto_inc_dir ; do
++ if test -f $dir/wincrypt.h ; then
++ MSCRYPTO_CFLAGS="$MSCRYPTO_CFLAGS -I$dir"
++ MSCRYPTO_INCLUDES_FOUND="yes"
++ WINCRYPT_H="$dir/wincrypt.h"
++ break
++ fi
+ done
-+ done
++
++ for dir in $ac_mscrypto_lib_dir ; do
++ if test -f $dir/crypt32.lib ; then
++ if test "z$with_gnu_ld" = "zyes" ; then
++ MSCRYPTO_LIBS="-Wl,-rpath-link -Wl,$dir -L$dir $dir/crypt32.lib"
++ else
++ MSCRYPTO_LIBS="-L$dir $dir/crypt32.lib"
++ fi
++ MSCRYPTO_LIBS_FOUND="yes"
++ break
++ fi
++ done
++
++ if test "z$MSCRYPTO_INCLUDES_FOUND" = "zyes" -a "z$MSCRYPTO_LIBS_FOUND" = "zyes" ; then
++ OLD_CPPFLAGS=$CPPFLAGS
++ CPPFLAGS="$MSCRYPTO_CFLAGS"
++ cat >conftest.$ac_ext <<_ACEOF
++/* confdefs.h. */
++_ACEOF
++cat confdefs.h >>conftest.$ac_ext
++cat >>conftest.$ac_ext <<_ACEOF
++/* end confdefs.h. */
++
++ #include <wincrypt.h>
++ #if defined(_WINCRYPT_H) || defined(__WINCRYPT_H__)
++ yes
++ #endif
++
++_ACEOF
++if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
++ $EGREP "yes" >/dev/null 2>&1; then
++
++ MSCRYPTO_FOUND=yes
++
++else
++
++ MSCRYPTO_FOUND=no
++
++fi
++rm -f conftest*
++
++ CPPFLAGS="$OLD_CPPFLAGS"
++ fi
++
++ if test "z$MSCRYPTO_FOUND" = "zyes" ; then
++ echo "$as_me:$LINENO: result: yes" >&5
++echo "${ECHO_T}yes" >&6
++ else
++ echo "$as_me:$LINENO: result: no" >&5
++echo "${ECHO_T}no" >&6
++ fi
++
++fi
++
++if test "z$MSCRYPTO_FOUND" = "zyes" ; then
++ MSCRYPTO_CFLAGS="$MSCRYPTO_CFLAGS -DXMLSEC_CRYPTO_MSCRYPTO=1"
++
++ if test "z$XMLSEC_CRYPTO" = "z" ; then
++ XMLSEC_CRYPTO="mscrypto"
++ XMLSEC_CRYPTO_LIB="$PACKAGE-mscrypto"
++ XMLSEC_CRYPTO_CFLAGS="$MSCRYPTO_CFLAGS"
++ XMLSEC_CRYPTO_LIBS="$MSCRYPTO_LIBS"
++ fi
++ XMLSEC_CRYPTO_LIST="$XMLSEC_CRYPTO_LIST mscrypto"
++else
++ XMLSEC_CRYPTO_DISABLED_LIST="$XMLSEC_CRYPTO_DISABLED_LIST mscrypto"
++fi
++
++
++
+ echo "$as_me:$LINENO: checking for crypto library" >&5
+ echo $ECHO_N "checking for crypto library... $ECHO_C" >&6
+ if test "z$XMLSEC_CRYPTO" = "z" ; then
+@@ -26604,7 +26874,7 @@
+ done
+
+
+- ac_config_files="$ac_config_files include/xmlsec/version.h Makefile include/Makefile include/xmlsec/Makefile include/xmlsec/private/Makefile src/Makefile apps/Makefile docs/Makefile docs/api/Makefile man/Makefile xmlsec1Conf.sh:xmlsecConf.sh.in xmlsec1-config:xmlsec-config.in xmlsec1-openssl.pc:xmlsec-openssl.pc.in xmlsec1-gnutls.pc:xmlsec-gnutls.pc.in xmlsec1-nss.pc:xmlsec-nss.pc.in xmlsec1.spec:xmlsec.spec.in"
++ ac_config_files="$ac_config_files include/xmlsec/version.h Makefile include/Makefile include/xmlsec/Makefile include/xmlsec/private/Makefile src/Makefile apps/Makefile docs/Makefile docs/api/Makefile man/Makefile xmlsec1Conf.sh:xmlsecConf.sh.in xmlsec1-config:xmlsec-config.in xmlsec1-openssl.pc:xmlsec-openssl.pc.in xmlsec1-gnutls.pc:xmlsec-gnutls.pc.in xmlsec1-nss.pc:xmlsec-nss.pc.in xmlsec1-mscrypto.pc:xmlsec-mscrypto.pc.in xmlsec1.spec:xmlsec.spec.in"
+ cat >confcache <<\_ACEOF
+ # This file is a shell script that caches the results of configure
+ # tests run on this system so they can be shared between configure
+@@ -27521,6 +27791,8 @@
+ s,@NSS_MIN_VERSION@,$NSS_MIN_VERSION,;t t
+ s,@NSPR_MIN_VERSION@,$NSPR_MIN_VERSION,;t t
+ s,@MOZILLA_MIN_VERSION@,$MOZILLA_MIN_VERSION,;t t
++s,@MSCRYPTO_CFLAGS@,$MSCRYPTO_CFLAGS,;t t
++s,@MSCRYPTO_LIBS@,$MSCRYPTO_LIBS,;t t
+ s,@XMLSEC_NO_SHA1_TRUE@,$XMLSEC_NO_SHA1_TRUE,;t t
+ s,@XMLSEC_NO_SHA1_FALSE@,$XMLSEC_NO_SHA1_FALSE,;t t
+ s,@XMLSEC_NO_SHA1@,$XMLSEC_NO_SHA1,;t t
+@@ -29231,6 +29503,8 @@
+ s,@NSS_MIN_VERSION@,$NSS_MIN_VERSION,;t t
+ s,@NSPR_MIN_VERSION@,$NSPR_MIN_VERSION,;t t
+ s,@MOZILLA_MIN_VERSION@,$MOZILLA_MIN_VERSION,;t t
++s,@MSCRYPTO_CFLAGS@,$MSCRYPTO_CFLAGS,;t t
++s,@MSCRYPTO_LIBS@,$MSCRYPTO_LIBS,;t t
+ s,@XMLSEC_NO_SHA1_TRUE@,$XMLSEC_NO_SHA1_TRUE,;t t
+ s,@XMLSEC_NO_SHA1_FALSE@,$XMLSEC_NO_SHA1_FALSE,;t t
+ s,@XMLSEC_NO_SHA1@,$XMLSEC_NO_SHA1,;t t
+@@ -30941,6 +31215,8 @@
+ s,@NSS_MIN_VERSION@,$NSS_MIN_VERSION,;t t
+ s,@NSPR_MIN_VERSION@,$NSPR_MIN_VERSION,;t t
+ s,@MOZILLA_MIN_VERSION@,$MOZILLA_MIN_VERSION,;t t
++s,@MSCRYPTO_CFLAGS@,$MSCRYPTO_CFLAGS,;t t
++s,@MSCRYPTO_LIBS@,$MSCRYPTO_LIBS,;t t
+ s,@XMLSEC_NO_SHA1_TRUE@,$XMLSEC_NO_SHA1_TRUE,;t t
+ s,@XMLSEC_NO_SHA1_FALSE@,$XMLSEC_NO_SHA1_FALSE,;t t
+ s,@XMLSEC_NO_SHA1@,$XMLSEC_NO_SHA1,;t t
+@@ -32653,6 +32929,1724 @@
+ s,@NSS_MIN_VERSION@,$NSS_MIN_VERSION,;t t
+ s,@NSPR_MIN_VERSION@,$NSPR_MIN_VERSION,;t t
+ s,@MOZILLA_MIN_VERSION@,$MOZILLA_MIN_VERSION,;t t
++s,@MSCRYPTO_CFLAGS@,$MSCRYPTO_CFLAGS,;t t
++s,@MSCRYPTO_LIBS@,$MSCRYPTO_LIBS,;t t
++s,@XMLSEC_NO_SHA1_TRUE@,$XMLSEC_NO_SHA1_TRUE,;t t
++s,@XMLSEC_NO_SHA1_FALSE@,$XMLSEC_NO_SHA1_FALSE,;t t
++s,@XMLSEC_NO_SHA1@,$XMLSEC_NO_SHA1,;t t
++s,@XMLSEC_NO_RIPEMD160_TRUE@,$XMLSEC_NO_RIPEMD160_TRUE,;t t
++s,@XMLSEC_NO_RIPEMD160_FALSE@,$XMLSEC_NO_RIPEMD160_FALSE,;t t
++s,@XMLSEC_NO_RIPEMD160@,$XMLSEC_NO_RIPEMD160,;t t
++s,@XMLSEC_NO_HMAC_TRUE@,$XMLSEC_NO_HMAC_TRUE,;t t
++s,@XMLSEC_NO_HMAC_FALSE@,$XMLSEC_NO_HMAC_FALSE,;t t
++s,@XMLSEC_NO_HMAC@,$XMLSEC_NO_HMAC,;t t
++s,@XMLSEC_NO_DSA_TRUE@,$XMLSEC_NO_DSA_TRUE,;t t
++s,@XMLSEC_NO_DSA_FALSE@,$XMLSEC_NO_DSA_FALSE,;t t
++s,@XMLSEC_NO_DSA@,$XMLSEC_NO_DSA,;t t
++s,@XMLSEC_NO_RSA_TRUE@,$XMLSEC_NO_RSA_TRUE,;t t
++s,@XMLSEC_NO_RSA_FALSE@,$XMLSEC_NO_RSA_FALSE,;t t
++s,@XMLSEC_NO_RSA@,$XMLSEC_NO_RSA,;t t
++s,@XMLSEC_NO_X509_TRUE@,$XMLSEC_NO_X509_TRUE,;t t
++s,@XMLSEC_NO_X509_FALSE@,$XMLSEC_NO_X509_FALSE,;t t
++s,@XMLSEC_NO_X509@,$XMLSEC_NO_X509,;t t
++s,@XMLSEC_NO_DES_TRUE@,$XMLSEC_NO_DES_TRUE,;t t
++s,@XMLSEC_NO_DES_FALSE@,$XMLSEC_NO_DES_FALSE,;t t
++s,@XMLSEC_NO_DES@,$XMLSEC_NO_DES,;t t
++s,@XMLSEC_NO_AES_TRUE@,$XMLSEC_NO_AES_TRUE,;t t
++s,@XMLSEC_NO_AES_FALSE@,$XMLSEC_NO_AES_FALSE,;t t
++s,@XMLSEC_NO_AES@,$XMLSEC_NO_AES,;t t
++s,@XMLSEC_NO_XMLDSIG_TRUE@,$XMLSEC_NO_XMLDSIG_TRUE,;t t
++s,@XMLSEC_NO_XMLDSIG_FALSE@,$XMLSEC_NO_XMLDSIG_FALSE,;t t
++s,@XMLSEC_NO_XMLDSIG@,$XMLSEC_NO_XMLDSIG,;t t
++s,@XMLSEC_NO_XMLENC_TRUE@,$XMLSEC_NO_XMLENC_TRUE,;t t
++s,@XMLSEC_NO_XMLENC_FALSE@,$XMLSEC_NO_XMLENC_FALSE,;t t
++s,@XMLSEC_NO_XMLENC@,$XMLSEC_NO_XMLENC,;t t
++s,@XMLSEC_NO_XKMS_TRUE@,$XMLSEC_NO_XKMS_TRUE,;t t
++s,@XMLSEC_NO_XKMS_FALSE@,$XMLSEC_NO_XKMS_FALSE,;t t
++s,@XMLSEC_NO_XKMS@,$XMLSEC_NO_XKMS,;t t
++s,@XMLSEC_NO_CRYPTO_DYNAMIC_LOADING_TRUE@,$XMLSEC_NO_CRYPTO_DYNAMIC_LOADING_TRUE,;t t
++s,@XMLSEC_NO_CRYPTO_DYNAMIC_LOADING_FALSE@,$XMLSEC_NO_CRYPTO_DYNAMIC_LOADING_FALSE,;t t
++s,@XMLSEC_NO_CRYPTO_DYNAMIC_LOADING@,$XMLSEC_NO_CRYPTO_DYNAMIC_LOADING,;t t
++s,@XMLSEC_DL_INCLUDES@,$XMLSEC_DL_INCLUDES,;t t
++s,@XMLSEC_DL_LIBS@,$XMLSEC_DL_LIBS,;t t
++s,@XMLSEC_NO_APPS_CRYPTO_DYNAMIC_LOADING_TRUE@,$XMLSEC_NO_APPS_CRYPTO_DYNAMIC_LOADING_TRUE,;t t
++s,@XMLSEC_NO_APPS_CRYPTO_DYNAMIC_LOADING_FALSE@,$XMLSEC_NO_APPS_CRYPTO_DYNAMIC_LOADING_FALSE,;t t
++s,@XMLSEC_NO_APPS_CRYPTO_DYNAMIC_LOADING@,$XMLSEC_NO_APPS_CRYPTO_DYNAMIC_LOADING,;t t
++s,@XMLSEC_DOCDIR@,$XMLSEC_DOCDIR,;t t
++s,@XMLSEC_STATIC_BINARIES@,$XMLSEC_STATIC_BINARIES,;t t
++s,@XMLSEC_CORE_CFLAGS@,$XMLSEC_CORE_CFLAGS,;t t
++s,@XMLSEC_CORE_LIBS@,$XMLSEC_CORE_LIBS,;t t
++s,@XMLSEC_LIBDIR@,$XMLSEC_LIBDIR,;t t
++s,@XMLSEC_OPENSSL_CFLAGS@,$XMLSEC_OPENSSL_CFLAGS,;t t
++s,@XMLSEC_OPENSSL_LIBS@,$XMLSEC_OPENSSL_LIBS,;t t
++s,@XMLSEC_GNUTLS_CFLAGS@,$XMLSEC_GNUTLS_CFLAGS,;t t
++s,@XMLSEC_GNUTLS_LIBS@,$XMLSEC_GNUTLS_LIBS,;t t
++s,@XMLSEC_NSS_CFLAGS@,$XMLSEC_NSS_CFLAGS,;t t
++s,@XMLSEC_NSS_LIBS@,$XMLSEC_NSS_LIBS,;t t
++s,@XMLSEC_CFLAGS@,$XMLSEC_CFLAGS,;t t
++s,@XMLSEC_LIBS@,$XMLSEC_LIBS,;t t
++s,@XMLSEC_DEFINES@,$XMLSEC_DEFINES,;t t
++s,@XMLSEC_APP_DEFINES@,$XMLSEC_APP_DEFINES,;t t
++s,@XMLSEC_CRYPTO@,$XMLSEC_CRYPTO,;t t
++s,@XMLSEC_CRYPTO_LIST@,$XMLSEC_CRYPTO_LIST,;t t
++s,@XMLSEC_CRYPTO_DISABLED_LIST@,$XMLSEC_CRYPTO_DISABLED_LIST,;t t
++s,@XMLSEC_CRYPTO_LIB@,$XMLSEC_CRYPTO_LIB,;t t
++s,@XMLSEC_CRYPTO_CFLAGS@,$XMLSEC_CRYPTO_CFLAGS,;t t
++s,@XMLSEC_CRYPTO_LIBS@,$XMLSEC_CRYPTO_LIBS,;t t
++s,@XMLSEC_CRYPTO_PC_FILES_LIST@,$XMLSEC_CRYPTO_PC_FILES_LIST,;t t
++s,@LIBOBJS@,$LIBOBJS,;t t
++s,@LTLIBOBJS@,$LTLIBOBJS,;t t
++CEOF
++
++_ACEOF
++
++ cat >>$CONFIG_STATUS <<\_ACEOF
++ # Split the substitutions into bite-sized pieces for seds with
++ # small command number limits, like on Digital OSF/1 and HP-UX.
++ ac_max_sed_lines=48
++ ac_sed_frag=1 # Number of current file.
++ ac_beg=1 # First line for current file.
++ ac_end=$ac_max_sed_lines # Line after last line for current file.
++ ac_more_lines=:
++ ac_sed_cmds=
++ while $ac_more_lines; do
++ if test $ac_beg -gt 1; then
++ sed "1,${ac_beg}d; ${ac_end}q" $tmp/subs.sed >$tmp/subs.frag
++ else
++ sed "${ac_end}q" $tmp/subs.sed >$tmp/subs.frag
++ fi
++ if test ! -s $tmp/subs.frag; then
++ ac_more_lines=false
++ else
++ # The purpose of the label and of the branching condition is to
++ # speed up the sed processing (if there are no `@' at all, there
++ # is no need to browse any of the substitutions).
++ # These are the two extra sed commands mentioned above.
++ (echo ':t
++ /@[a-zA-Z_][a-zA-Z_0-9]*@/!b' && cat $tmp/subs.frag) >$tmp/subs-$ac_sed_frag.sed
++ if test -z "$ac_sed_cmds"; then
++ ac_sed_cmds="sed -f $tmp/subs-$ac_sed_frag.sed"
++ else
++ ac_sed_cmds="$ac_sed_cmds | sed -f $tmp/subs-$ac_sed_frag.sed"
++ fi
++ ac_sed_frag=`expr $ac_sed_frag + 1`
++ ac_beg=$ac_end
++ ac_end=`expr $ac_end + $ac_max_sed_lines`
++ fi
++ done
++ if test -z "$ac_sed_cmds"; then
++ ac_sed_cmds=cat
++ fi
++fi # test -n "$CONFIG_FILES"
++
++_ACEOF
++cat >>$CONFIG_STATUS <<\_ACEOF
++for ac_file in : $CONFIG_FILES; do test "x$ac_file" = x: && continue
++ # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
++ case $ac_file in
++ - | *:- | *:-:* ) # input from stdin
++ cat >$tmp/stdin
++ ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
++ ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
++ *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
++ ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
++ * ) ac_file_in=$ac_file.in ;;
++ esac
++
++ # Compute @srcdir@, @top_srcdir@, and @INSTALL@ for subdirectories.
++ ac_dir=`(dirname "$ac_file") 2>/dev/null ||
++$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
++ X"$ac_file" : 'X\(//\)[^/]' \| \
++ X"$ac_file" : 'X\(//\)$' \| \
++ X"$ac_file" : 'X\(/\)' \| \
++ . : '\(.\)' 2>/dev/null ||
++echo X"$ac_file" |
++ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
++ /^X\(\/\/\)[^/].*/{ s//\1/; q; }
++ /^X\(\/\/\)$/{ s//\1/; q; }
++ /^X\(\/\).*/{ s//\1/; q; }
++ s/.*/./; q'`
++ { if $as_mkdir_p; then
++ mkdir -p "$ac_dir"
++ else
++ as_dir="$ac_dir"
++ as_dirs=
++ while test ! -d "$as_dir"; do
++ as_dirs="$as_dir $as_dirs"
++ as_dir=`(dirname "$as_dir") 2>/dev/null ||
++$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
++ X"$as_dir" : 'X\(//\)[^/]' \| \
++ X"$as_dir" : 'X\(//\)$' \| \
++ X"$as_dir" : 'X\(/\)' \| \
++ . : '\(.\)' 2>/dev/null ||
++echo X"$as_dir" |
++ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
++ /^X\(\/\/\)[^/].*/{ s//\1/; q; }
++ /^X\(\/\/\)$/{ s//\1/; q; }
++ /^X\(\/\).*/{ s//\1/; q; }
++ s/.*/./; q'`
++ done
++ test ! -n "$as_dirs" || mkdir $as_dirs
++ fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5
++echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;}
++ { (exit 1); exit 1; }; }; }
++
++ ac_builddir=.
++
++if test "$ac_dir" != .; then
++ ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
++ # A "../" for each directory in $ac_dir_suffix.
++ ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'`
++else
++ ac_dir_suffix= ac_top_builddir=
++fi
++
++case $srcdir in
++ .) # No --srcdir option. We are building in place.
++ ac_srcdir=.
++ if test -z "$ac_top_builddir"; then
++ ac_top_srcdir=.
++ else
++ ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'`
++ fi ;;
++ [\\/]* | ?:[\\/]* ) # Absolute path.
++ ac_srcdir=$srcdir$ac_dir_suffix;
++ ac_top_srcdir=$srcdir ;;
++ *) # Relative path.
++ ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix
++ ac_top_srcdir=$ac_top_builddir$srcdir ;;
++esac
++
++# Do not use `cd foo && pwd` to compute absolute paths, because
++# the directories may not exist.
++case `pwd` in
++.) ac_abs_builddir="$ac_dir";;
++*)
++ case "$ac_dir" in
++ .) ac_abs_builddir=`pwd`;;
++ [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";;
++ *) ac_abs_builddir=`pwd`/"$ac_dir";;
++ esac;;
++esac
++case $ac_abs_builddir in
++.) ac_abs_top_builddir=${ac_top_builddir}.;;
++*)
++ case ${ac_top_builddir}. in
++ .) ac_abs_top_builddir=$ac_abs_builddir;;
++ [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;;
++ *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;;
++ esac;;
++esac
++case $ac_abs_builddir in
++.) ac_abs_srcdir=$ac_srcdir;;
++*)
++ case $ac_srcdir in
++ .) ac_abs_srcdir=$ac_abs_builddir;;
++ [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;;
++ *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;;
++ esac;;
++esac
++case $ac_abs_builddir in
++.) ac_abs_top_srcdir=$ac_top_srcdir;;
++*)
++ case $ac_top_srcdir in
++ .) ac_abs_top_srcdir=$ac_abs_builddir;;
++ [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;;
++ *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;;
++ esac;;
++esac
++
++
++ case $INSTALL in
++ [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;;
++ *) ac_INSTALL=$ac_top_builddir$INSTALL ;;
++ esac
++
++ if test x"$ac_file" != x-; then
++ { echo "$as_me:$LINENO: creating $ac_file" >&5
++echo "$as_me: creating $ac_file" >&6;}
++ rm -f "$ac_file"
++ fi
++ # Let's still pretend it is `configure' which instantiates (i.e., don't
++ # use $as_me), people would be surprised to read:
++ # /* config.h. Generated by config.status. */
++ if test x"$ac_file" = x-; then
++ configure_input=
++ else
++ configure_input="$ac_file. "
++ fi
++ configure_input=$configure_input"Generated from `echo $ac_file_in |
++ sed 's,.*/,,'` by configure."
++
++ # First look for the input files in the build tree, otherwise in the
++ # src tree.
++ ac_file_inputs=`IFS=:
++ for f in $ac_file_in; do
++ case $f in
++ -) echo $tmp/stdin ;;
++ [\\/$]*)
++ # Absolute (can't be DOS-style, as IFS=:)
++ test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
++echo "$as_me: error: cannot find input file: $f" >&2;}
++ { (exit 1); exit 1; }; }
++ echo "$f";;
++ *) # Relative
++ if test -f "$f"; then
++ # Build tree
++ echo "$f"
++ elif test -f "$srcdir/$f"; then
++ # Source tree
++ echo "$srcdir/$f"
++ else
++ # /dev/null tree
++ { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
++echo "$as_me: error: cannot find input file: $f" >&2;}
++ { (exit 1); exit 1; }; }
++ fi;;
++ esac
++ done` || { (exit 1); exit 1; }
++_ACEOF
++cat >>$CONFIG_STATUS <<_ACEOF
++ sed "$ac_vpsub
++$extrasub
++_ACEOF
++cat >>$CONFIG_STATUS <<\_ACEOF
++:t
++/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
++s,@configure_input@,$configure_input,;t t
++s,@srcdir@,$ac_srcdir,;t t
++s,@abs_srcdir@,$ac_abs_srcdir,;t t
++s,@top_srcdir@,$ac_top_srcdir,;t t
++s,@abs_top_srcdir@,$ac_abs_top_srcdir,;t t
++s,@builddir@,$ac_builddir,;t t
++s,@abs_builddir@,$ac_abs_builddir,;t t
++s,@top_builddir@,$ac_top_builddir,;t t
++s,@abs_top_builddir@,$ac_abs_top_builddir,;t t
++s,@INSTALL@,$ac_INSTALL,;t t
++" $ac_file_inputs | (eval "$ac_sed_cmds") >$tmp/out
++ rm -f $tmp/stdin
++ if test x"$ac_file" != x-; then
++ mv $tmp/out $ac_file
++ else
++ cat $tmp/out
++ rm -f $tmp/out
++ fi
++
++done
++_ACEOF
++cat >>$CONFIG_STATUS <<\_ACEOF
++
++#
++# CONFIG_HEADER section.
++#
++
++# These sed commands are passed to sed as "A NAME B NAME C VALUE D", where
++# NAME is the cpp macro being defined and VALUE is the value it is being given.
++#
++# ac_d sets the value in "#define NAME VALUE" lines.
++ac_dA='s,^\([ ]*\)#\([ ]*define[ ][ ]*\)'
++ac_dB='[ ].*$,\1#\2'
++ac_dC=' '
++ac_dD=',;t'
++# ac_u turns "#undef NAME" without trailing blanks into "#define NAME VALUE".
++ac_uA='s,^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)'
++ac_uB='$,\1#\2define\3'
++ac_uC=' '
++ac_uD=',;t'
++
++for ac_file in : $CONFIG_HEADERS; do test "x$ac_file" = x: && continue
++ # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
++ case $ac_file in
++ - | *:- | *:-:* ) # input from stdin
++ cat >$tmp/stdin
++ ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
++ ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
++ *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
++ ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
++ * ) ac_file_in=$ac_file.in ;;
++ esac
++
++ test x"$ac_file" != x- && { echo "$as_me:$LINENO: creating $ac_file" >&5
++echo "$as_me: creating $ac_file" >&6;}
++
++ # First look for the input files in the build tree, otherwise in the
++ # src tree.
++ ac_file_inputs=`IFS=:
++ for f in $ac_file_in; do
++ case $f in
++ -) echo $tmp/stdin ;;
++ [\\/$]*)
++ # Absolute (can't be DOS-style, as IFS=:)
++ test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
++echo "$as_me: error: cannot find input file: $f" >&2;}
++ { (exit 1); exit 1; }; }
++ # Do quote $f, to prevent DOS paths from being IFS'd.
++ echo "$f";;
++ *) # Relative
++ if test -f "$f"; then
++ # Build tree
++ echo "$f"
++ elif test -f "$srcdir/$f"; then
++ # Source tree
++ echo "$srcdir/$f"
++ else
++ # /dev/null tree
++ { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
++echo "$as_me: error: cannot find input file: $f" >&2;}
++ { (exit 1); exit 1; }; }
++ fi;;
++ esac
++ done` || { (exit 1); exit 1; }
++ # Remove the trailing spaces.
++ sed 's/[ ]*$//' $ac_file_inputs >$tmp/in
++
++_ACEOF
++
++# Transform confdefs.h into two sed scripts, `conftest.defines' and
++# `conftest.undefs', that substitutes the proper values into
++# config.h.in to produce config.h. The first handles `#define'
++# templates, and the second `#undef' templates.
++# And first: Protect against being on the right side of a sed subst in
++# config.status. Protect against being in an unquoted here document
++# in config.status.
++rm -f conftest.defines conftest.undefs
++# Using a here document instead of a string reduces the quoting nightmare.
++# Putting comments in sed scripts is not portable.
++#
++# `end' is used to avoid that the second main sed command (meant for
++# 0-ary CPP macros) applies to n-ary macro definitions.
++# See the Autoconf documentation for `clear'.
++cat >confdef2sed.sed <<\_ACEOF
++s/[\\&,]/\\&/g
++s,[\\$`],\\&,g
++t clear
++: clear
++s,^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*\)\(([^)]*)\)[ ]*\(.*\)$,${ac_dA}\1${ac_dB}\1\2${ac_dC}\3${ac_dD},gp
++t end
++s,^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)$,${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD},gp
++: end
++_ACEOF
++# If some macros were called several times there might be several times
++# the same #defines, which is useless. Nevertheless, we may not want to
++# sort them, since we want the *last* AC-DEFINE to be honored.
++uniq confdefs.h | sed -n -f confdef2sed.sed >conftest.defines
++sed 's/ac_d/ac_u/g' conftest.defines >conftest.undefs
++rm -f confdef2sed.sed
++
++# This sed command replaces #undef with comments. This is necessary, for
++# example, in the case of _POSIX_SOURCE, which is predefined and required
++# on some systems where configure will not decide to define it.
++cat >>conftest.undefs <<\_ACEOF
++s,^[ ]*#[ ]*undef[ ][ ]*[a-zA-Z_][a-zA-Z_0-9]*,/* & */,
++_ACEOF
++
++# Break up conftest.defines because some shells have a limit on the size
++# of here documents, and old seds have small limits too (100 cmds).
++echo ' # Handle all the #define templates only if necessary.' >>$CONFIG_STATUS
++echo ' if grep "^[ ]*#[ ]*define" $tmp/in >/dev/null; then' >>$CONFIG_STATUS
++echo ' # If there are no defines, we may have an empty if/fi' >>$CONFIG_STATUS
++echo ' :' >>$CONFIG_STATUS
++rm -f conftest.tail
++while grep . conftest.defines >/dev/null
++do
++ # Write a limited-size here document to $tmp/defines.sed.
++ echo ' cat >$tmp/defines.sed <<CEOF' >>$CONFIG_STATUS
++ # Speed up: don't consider the non `#define' lines.
++ echo '/^[ ]*#[ ]*define/!b' >>$CONFIG_STATUS
++ # Work around the forget-to-reset-the-flag bug.
++ echo 't clr' >>$CONFIG_STATUS
++ echo ': clr' >>$CONFIG_STATUS
++ sed ${ac_max_here_lines}q conftest.defines >>$CONFIG_STATUS
++ echo 'CEOF
++ sed -f $tmp/defines.sed $tmp/in >$tmp/out
++ rm -f $tmp/in
++ mv $tmp/out $tmp/in
++' >>$CONFIG_STATUS
++ sed 1,${ac_max_here_lines}d conftest.defines >conftest.tail
++ rm -f conftest.defines
++ mv conftest.tail conftest.defines
++done
++rm -f conftest.defines
++echo ' fi # grep' >>$CONFIG_STATUS
++echo >>$CONFIG_STATUS
++
++# Break up conftest.undefs because some shells have a limit on the size
++# of here documents, and old seds have small limits too (100 cmds).
++echo ' # Handle all the #undef templates' >>$CONFIG_STATUS
++rm -f conftest.tail
++while grep . conftest.undefs >/dev/null
++do
++ # Write a limited-size here document to $tmp/undefs.sed.
++ echo ' cat >$tmp/undefs.sed <<CEOF' >>$CONFIG_STATUS
++ # Speed up: don't consider the non `#undef'
++ echo '/^[ ]*#[ ]*undef/!b' >>$CONFIG_STATUS
++ # Work around the forget-to-reset-the-flag bug.
++ echo 't clr' >>$CONFIG_STATUS
++ echo ': clr' >>$CONFIG_STATUS
++ sed ${ac_max_here_lines}q conftest.undefs >>$CONFIG_STATUS
++ echo 'CEOF
++ sed -f $tmp/undefs.sed $tmp/in >$tmp/out
++ rm -f $tmp/in
++ mv $tmp/out $tmp/in
++' >>$CONFIG_STATUS
++ sed 1,${ac_max_here_lines}d conftest.undefs >conftest.tail
++ rm -f conftest.undefs
++ mv conftest.tail conftest.undefs
++done
++rm -f conftest.undefs
++
++cat >>$CONFIG_STATUS <<\_ACEOF
++ # Let's still pretend it is `configure' which instantiates (i.e., don't
++ # use $as_me), people would be surprised to read:
++ # /* config.h. Generated by config.status. */
++ if test x"$ac_file" = x-; then
++ echo "/* Generated by configure. */" >$tmp/config.h
++ else
++ echo "/* $ac_file. Generated by configure. */" >$tmp/config.h
++ fi
++ cat $tmp/in >>$tmp/config.h
++ rm -f $tmp/in
++ if test x"$ac_file" != x-; then
++ if diff $ac_file $tmp/config.h >/dev/null 2>&1; then
++ { echo "$as_me:$LINENO: $ac_file is unchanged" >&5
++echo "$as_me: $ac_file is unchanged" >&6;}
++ else
++ ac_dir=`(dirname "$ac_file") 2>/dev/null ||
++$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
++ X"$ac_file" : 'X\(//\)[^/]' \| \
++ X"$ac_file" : 'X\(//\)$' \| \
++ X"$ac_file" : 'X\(/\)' \| \
++ . : '\(.\)' 2>/dev/null ||
++echo X"$ac_file" |
++ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
++ /^X\(\/\/\)[^/].*/{ s//\1/; q; }
++ /^X\(\/\/\)$/{ s//\1/; q; }
++ /^X\(\/\).*/{ s//\1/; q; }
++ s/.*/./; q'`
++ { if $as_mkdir_p; then
++ mkdir -p "$ac_dir"
++ else
++ as_dir="$ac_dir"
++ as_dirs=
++ while test ! -d "$as_dir"; do
++ as_dirs="$as_dir $as_dirs"
++ as_dir=`(dirname "$as_dir") 2>/dev/null ||
++$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
++ X"$as_dir" : 'X\(//\)[^/]' \| \
++ X"$as_dir" : 'X\(//\)$' \| \
++ X"$as_dir" : 'X\(/\)' \| \
++ . : '\(.\)' 2>/dev/null ||
++echo X"$as_dir" |
++ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
++ /^X\(\/\/\)[^/].*/{ s//\1/; q; }
++ /^X\(\/\/\)$/{ s//\1/; q; }
++ /^X\(\/\).*/{ s//\1/; q; }
++ s/.*/./; q'`
++ done
++ test ! -n "$as_dirs" || mkdir $as_dirs
++ fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5
++echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;}
++ { (exit 1); exit 1; }; }; }
++
++ rm -f $ac_file
++ mv $tmp/config.h $ac_file
++ fi
++ else
++ cat $tmp/config.h
++ rm -f $tmp/config.h
++ fi
++# Compute $ac_file's index in $config_headers.
++_am_stamp_count=1
++for _am_header in $config_headers :; do
++ case $_am_header in
++ $ac_file | $ac_file:* )
++ break ;;
++ * )
++ _am_stamp_count=`expr $_am_stamp_count + 1` ;;
++ esac
++done
++echo "timestamp for $ac_file" >`(dirname $ac_file) 2>/dev/null ||
++$as_expr X$ac_file : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
++ X$ac_file : 'X\(//\)[^/]' \| \
++ X$ac_file : 'X\(//\)$' \| \
++ X$ac_file : 'X\(/\)' \| \
++ . : '\(.\)' 2>/dev/null ||
++echo X$ac_file |
++ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
++ /^X\(\/\/\)[^/].*/{ s//\1/; q; }
++ /^X\(\/\/\)$/{ s//\1/; q; }
++ /^X\(\/\).*/{ s//\1/; q; }
++ s/.*/./; q'`/stamp-h$_am_stamp_count
++done
++_ACEOF
++cat >>$CONFIG_STATUS <<\_ACEOF
++
++#
++# CONFIG_COMMANDS section.
++#
++for ac_file in : $CONFIG_COMMANDS; do test "x$ac_file" = x: && continue
++ ac_dest=`echo "$ac_file" | sed 's,:.*,,'`
++ ac_source=`echo "$ac_file" | sed 's,[^:]*:,,'`
++ ac_dir=`(dirname "$ac_dest") 2>/dev/null ||
++$as_expr X"$ac_dest" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
++ X"$ac_dest" : 'X\(//\)[^/]' \| \
++ X"$ac_dest" : 'X\(//\)$' \| \
++ X"$ac_dest" : 'X\(/\)' \| \
++ . : '\(.\)' 2>/dev/null ||
++echo X"$ac_dest" |
++ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
++ /^X\(\/\/\)[^/].*/{ s//\1/; q; }
++ /^X\(\/\/\)$/{ s//\1/; q; }
++ /^X\(\/\).*/{ s//\1/; q; }
++ s/.*/./; q'`
++ { if $as_mkdir_p; then
++ mkdir -p "$ac_dir"
++ else
++ as_dir="$ac_dir"
++ as_dirs=
++ while test ! -d "$as_dir"; do
++ as_dirs="$as_dir $as_dirs"
++ as_dir=`(dirname "$as_dir") 2>/dev/null ||
++$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
++ X"$as_dir" : 'X\(//\)[^/]' \| \
++ X"$as_dir" : 'X\(//\)$' \| \
++ X"$as_dir" : 'X\(/\)' \| \
++ . : '\(.\)' 2>/dev/null ||
++echo X"$as_dir" |
++ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
++ /^X\(\/\/\)[^/].*/{ s//\1/; q; }
++ /^X\(\/\/\)$/{ s//\1/; q; }
++ /^X\(\/\).*/{ s//\1/; q; }
++ s/.*/./; q'`
++ done
++ test ! -n "$as_dirs" || mkdir $as_dirs
++ fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5
++echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;}
++ { (exit 1); exit 1; }; }; }
++
++ ac_builddir=.
++
++if test "$ac_dir" != .; then
++ ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
++ # A "../" for each directory in $ac_dir_suffix.
++ ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'`
++else
++ ac_dir_suffix= ac_top_builddir=
++fi
++
++case $srcdir in
++ .) # No --srcdir option. We are building in place.
++ ac_srcdir=.
++ if test -z "$ac_top_builddir"; then
++ ac_top_srcdir=.
++ else
++ ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'`
++ fi ;;
++ [\\/]* | ?:[\\/]* ) # Absolute path.
++ ac_srcdir=$srcdir$ac_dir_suffix;
++ ac_top_srcdir=$srcdir ;;
++ *) # Relative path.
++ ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix
++ ac_top_srcdir=$ac_top_builddir$srcdir ;;
++esac
++
++# Do not use `cd foo && pwd` to compute absolute paths, because
++# the directories may not exist.
++case `pwd` in
++.) ac_abs_builddir="$ac_dir";;
++*)
++ case "$ac_dir" in
++ .) ac_abs_builddir=`pwd`;;
++ [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";;
++ *) ac_abs_builddir=`pwd`/"$ac_dir";;
++ esac;;
++esac
++case $ac_abs_builddir in
++.) ac_abs_top_builddir=${ac_top_builddir}.;;
++*)
++ case ${ac_top_builddir}. in
++ .) ac_abs_top_builddir=$ac_abs_builddir;;
++ [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;;
++ *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;;
++ esac;;
++esac
++case $ac_abs_builddir in
++.) ac_abs_srcdir=$ac_srcdir;;
++*)
++ case $ac_srcdir in
++ .) ac_abs_srcdir=$ac_abs_builddir;;
++ [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;;
++ *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;;
++ esac;;
++esac
++case $ac_abs_builddir in
++.) ac_abs_top_srcdir=$ac_top_srcdir;;
++*)
++ case $ac_top_srcdir in
++ .) ac_abs_top_srcdir=$ac_abs_builddir;;
++ [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;;
++ *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;;
++ esac;;
++esac
++
++
++ { echo "$as_me:$LINENO: executing $ac_dest commands" >&5
++echo "$as_me: executing $ac_dest commands" >&6;}
++ case $ac_dest in
++ depfiles ) test x"$AMDEP_TRUE" != x"" || for mf in $CONFIG_FILES; do
++ # Strip MF so we end up with the name of the file.
++ mf=`echo "$mf" | sed -e 's/:.*$//'`
++ # Check whether this is an Automake generated Makefile or not.
++ # We used to match only the files named `Makefile.in', but
++ # some people rename them; so instead we look at the file content.
++ # Grep'ing the first line is not enough: some people post-process
++ # each Makefile.in and add a new line on top of each file to say so.
++ # So let's grep whole file.
++ if grep '^#.*generated by automake' $mf > /dev/null 2>&1; then
++ dirpart=`(dirname "$mf") 2>/dev/null ||
++$as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
++ X"$mf" : 'X\(//\)[^/]' \| \
++ X"$mf" : 'X\(//\)$' \| \
++ X"$mf" : 'X\(/\)' \| \
++ . : '\(.\)' 2>/dev/null ||
++echo X"$mf" |
++ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
++ /^X\(\/\/\)[^/].*/{ s//\1/; q; }
++ /^X\(\/\/\)$/{ s//\1/; q; }
++ /^X\(\/\).*/{ s//\1/; q; }
++ s/.*/./; q'`
++ else
++ continue
++ fi
++ grep '^DEP_FILES *= *[^ #]' < "$mf" > /dev/null || continue
++ # Extract the definition of DEP_FILES from the Makefile without
++ # running `make'.
++ DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
++ test -z "$DEPDIR" && continue
++ # When using ansi2knr, U may be empty or an underscore; expand it
++ U=`sed -n 's/^U = //p' < "$mf"`
++ test -d "$dirpart/$DEPDIR" || mkdir "$dirpart/$DEPDIR"
++ # We invoke sed twice because it is the simplest approach to
++ # changing $(DEPDIR) to its actual value in the expansion.
++ for file in `sed -n '
++ /^DEP_FILES = .*\\\\$/ {
++ s/^DEP_FILES = //
++ :loop
++ s/\\\\$//
++ p
++ n
++ /\\\\$/ b loop
++ p
++ }
++ /^DEP_FILES = / s/^DEP_FILES = //p' < "$mf" | \
++ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do
++ # Make sure the directory exists.
++ test -f "$dirpart/$file" && continue
++ fdir=`(dirname "$file") 2>/dev/null ||
++$as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
++ X"$file" : 'X\(//\)[^/]' \| \
++ X"$file" : 'X\(//\)$' \| \
++ X"$file" : 'X\(/\)' \| \
++ . : '\(.\)' 2>/dev/null ||
++echo X"$file" |
++ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
++ /^X\(\/\/\)[^/].*/{ s//\1/; q; }
++ /^X\(\/\/\)$/{ s//\1/; q; }
++ /^X\(\/\).*/{ s//\1/; q; }
++ s/.*/./; q'`
++ { if $as_mkdir_p; then
++ mkdir -p $dirpart/$fdir
++ else
++ as_dir=$dirpart/$fdir
++ as_dirs=
++ while test ! -d "$as_dir"; do
++ as_dirs="$as_dir $as_dirs"
++ as_dir=`(dirname "$as_dir") 2>/dev/null ||
++$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
++ X"$as_dir" : 'X\(//\)[^/]' \| \
++ X"$as_dir" : 'X\(//\)$' \| \
++ X"$as_dir" : 'X\(/\)' \| \
++ . : '\(.\)' 2>/dev/null ||
++echo X"$as_dir" |
++ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
++ /^X\(\/\/\)[^/].*/{ s//\1/; q; }
++ /^X\(\/\/\)$/{ s//\1/; q; }
++ /^X\(\/\).*/{ s//\1/; q; }
++ s/.*/./; q'`
++ done
++ test ! -n "$as_dirs" || mkdir $as_dirs
++ fi || { { echo "$as_me:$LINENO: error: cannot create directory $dirpart/$fdir" >&5
++echo "$as_me: error: cannot create directory $dirpart/$fdir" >&2;}
++ { (exit 1); exit 1; }; }; }
++
++ # echo "creating $dirpart/$file"
++ echo '# dummy' > "$dirpart/$file"
++ done
++done
+ ;;
-+ esac
-+
-+ # Create $as_me.lineno as a copy of $as_myself, but with $LINENO
-+ # uniformly replaced by the line number. The first 'sed' inserts a
-+ # line-number line before each line; the second 'sed' does the real
-+ # work. The second script uses 'N' to pair each line-number line
-+ # with the numbered line, and appends trailing '-' during
-+ # substitution so that $LINENO is not a special case at line end.
-+ # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the
-+ # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-)
-+ sed '=' <$as_myself |
-+ sed '
-+ N
-+ s,$,-,
-+ : loop
-+ s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3,
-+ t loop
-+ s,-$,,
-+ s,^['$as_cr_digits']*\n,,
-+ ' >$as_me.lineno &&
-+ chmod +x $as_me.lineno ||
-+ { { echo "$as_me:$LINENO: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&5
-+ echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2;}
-+ { (exit 1); exit 1; }; }
-+
-+ # Don't try to exec as it changes $[0], causing all sort of problems
-+ # (the dirname of $[0] is not the place where we might find the
-+ # original and so on. Autoconf is especially sensible to this).
-+ . ./$as_me.lineno
-+ # Exit status is that of the last command.
-+ exit
-+ }
-+
-+
-+ case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in
-+ *c*,-n*) ECHO_N= ECHO_C='
-+ ' ECHO_T=' ' ;;
-+ *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;;
-+ *) ECHO_N= ECHO_C='\c' ECHO_T= ;;
-+ esac
-+
-+ if expr a : '\(a\)' >/dev/null 2>&1; then
-+ as_expr=expr
-+ else
-+ as_expr=false
-+ fi
-+
-+ rm -f conf$$ conf$$.exe conf$$.file
-+ echo >conf$$.file
-+ if ln -s conf$$.file conf$$ 2>/dev/null; then
-+ # We could just check for DJGPP; but this test a) works b) is more generic
-+ # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04).
-+ if test -f conf$$.exe; then
-+ # Don't use ln at all; we don't have any links
-+ as_ln_s='cp -p'
-+ else
-+ as_ln_s='ln -s'
-+ fi
-+ elif ln conf$$.file conf$$ 2>/dev/null; then
-+ as_ln_s=ln
-+ else
-+ as_ln_s='cp -p'
-+ fi
-+ rm -f conf$$ conf$$.exe conf$$.file
-+
-+ if mkdir -p . 2>/dev/null; then
-+ as_mkdir_p=:
-+ else
-+ test -d ./-p && rmdir ./-p
-+ as_mkdir_p=false
-+ fi
-+
-+ as_executable_p="test -f"
-+
-+ # Sed expression to map a string onto a valid CPP name.
-+ as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
-+
-+ # Sed expression to map a string onto a valid variable name.
-+ as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
-+
-+
-+ # IFS
-+ # We need space, tab and new line, in precisely that order.
-+ as_nl='
-+ '
-+ IFS=" $as_nl"
-+
-+ # CDPATH.
-+ $as_unset CDPATH
-+
-+ exec 6>&1
-+
-+ # Open the log real soon, to keep \$[0] and so on meaningful, and to
-+ # report actual input values of CONFIG_FILES etc. instead of their
-+ # values after options handling. Logging --version etc. is OK.
-+ exec 5>>config.log
-+ {
-+ echo
-+ sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
-+ ## Running $as_me. ##
-+ _ASBOX
-+ } >&5
-+ cat >&5 <<_CSEOF
-+
-+ This file was extended by $as_me, which was
-+ generated by GNU Autoconf 2.59. Invocation command line was
-+
-+ CONFIG_FILES = $CONFIG_FILES
-+ CONFIG_HEADERS = $CONFIG_HEADERS
-+ CONFIG_LINKS = $CONFIG_LINKS
-+ CONFIG_COMMANDS = $CONFIG_COMMANDS
-+ $ $0 $@
-+
-+ _CSEOF
-+ echo "on `(hostname || uname -n) 2>/dev/null | sed 1q`" >&5
-+ echo >&5
-+ _ACEOF
-+
-+ # Files that config.status was made for.
-+ if test -n "$ac_config_files"; then
-+ echo "config_files=\"$ac_config_files\"" >>$CONFIG_STATUS
-+ fi
-+
-+ if test -n "$ac_config_headers"; then
-+ echo "config_headers=\"$ac_config_headers\"" >>$CONFIG_STATUS
-+ fi
-+
-+ if test -n "$ac_config_links"; then
-+ echo "config_links=\"$ac_config_links\"" >>$CONFIG_STATUS
-+ fi
-+
-+ if test -n "$ac_config_commands"; then
-+ echo "config_commands=\"$ac_config_commands\"" >>$CONFIG_STATUS
-+ fi
-+
-+ cat >>$CONFIG_STATUS <<\_ACEOF
-+
-+ ac_cs_usage="\
-+ \`$as_me' instantiates files from templates according to the
-+ current configuration.
-+
-+ Usage: $0 [OPTIONS] [FILE]...
-+
-+ -h, --help print this help, then exit
-+ -V, --version print version number, then exit
-+ -q, --quiet do not print progress messages
-+ -d, --debug don't remove temporary files
-+ --recheck update $as_me by reconfiguring in the same conditions
-+ --file=FILE[:TEMPLATE]
-+ instantiate the configuration file FILE
-+ --header=FILE[:TEMPLATE]
-+ instantiate the configuration header FILE
-+
-+ Configuration files:
-+ $config_files
-+
-+ Configuration headers:
-+ $config_headers
-+
-+ Configuration commands:
-+ $config_commands
-+
-+ Report bugs to <bug-autoconf@gnu.org>."
-+ _ACEOF
-+
-+ cat >>$CONFIG_STATUS <<_ACEOF
-+ ac_cs_version="\\
-+ config.status
-+ configured by $0, generated by GNU Autoconf 2.59,
-+ with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\"
-+
-+ Copyright (C) 2003 Free Software Foundation, Inc.
-+ This config.status script is free software; the Free Software Foundation
-+ gives unlimited permission to copy, distribute and modify it."
-+ srcdir=$srcdir
-+ INSTALL="$INSTALL"
-+ _ACEOF
-+
-+ cat >>$CONFIG_STATUS <<\_ACEOF
-+ # If no file are specified by the user, then we need to provide default
-+ # value. By we need to know if files were specified by the user.
-+ ac_need_defaults=:
-+ while test $# != 0
-+ do
-+ case $1 in
-+ --*=*)
-+ ac_option=`expr "x$1" : 'x\([^=]*\)='`
-+ ac_optarg=`expr "x$1" : 'x[^=]*=\(.*\)'`
-+ ac_shift=:
-+ ;;
-+ -*)
++ esac
++done
++_ACEOF
++
++cat >>$CONFIG_STATUS <<\_ACEOF
++
++{ (exit 0); exit 0; }
++_ACEOF
++chmod +x $CONFIG_STATUS
++ac_clean_files=$ac_clean_files_save
++
++
++# configure is writing to config.log, and then calls config.status.
++# config.status does its own redirection, appending to config.log.
++# Unfortunately, on DOS this fails, as config.log is still kept open
++# by configure, so config.status won't be able to write to it; its
++# output is simply discarded. So we exec the FD to /dev/null,
++# effectively closing config.log, so it can be properly (re)opened and
++# appended to by config.status. When coming back to configure, we
++# need to make the FD available again.
++if test "$no_create" != yes; then
++ ac_cs_success=:
++ ac_config_status_args=
++ test "$silent" = yes &&
++ ac_config_status_args="$ac_config_status_args --quiet"
++ exec 5>/dev/null
++ $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false
++ exec 5>>config.log
++ # Use ||, not &&, to avoid exiting from the if with $? = 1, which
++ # would make configure fail if this is the last instruction.
++ $ac_cs_success || { (exit 1); exit 1; }
++fi
++
++fi
++
++if test "z$MSCRYPTO_FOUND" = "zyes" ; then
++ ac_config_files="$ac_config_files include/xmlsec/mscrypto/Makefile src/mscrypto/Makefile"
++cat >confcache <<\_ACEOF
++# This file is a shell script that caches the results of configure
++# tests run on this system so they can be shared between configure
++# scripts and configure runs, see configure's option --config-cache.
++# It is not useful on other systems. If it contains results you don't
++# want to keep, you may remove or edit it.
++#
++# config.status only pays attention to the cache file if you give it
++# the --recheck option to rerun configure.
++#
++# `ac_cv_env_foo' variables (set or unset) will be overridden when
++# loading this file, other *unset* `ac_cv_foo' will be assigned the
++# following values.
++
++_ACEOF
++
++# The following way of writing the cache mishandles newlines in values,
++# but we know of no workaround that is simple, portable, and efficient.
++# So, don't put newlines in cache variables' values.
++# Ultrix sh set writes to stderr and can't be redirected directly,
++# and sets the high bit in the cache file unless we assign to the vars.
++{
++ (set) 2>&1 |
++ case `(ac_space=' '; set | grep ac_space) 2>&1` in
++ *ac_space=\ *)
++ # `set' does not quote correctly, so add quotes (double-quote
++ # substitution turns \\\\ into \\, and sed turns \\ into \).
++ sed -n \
++ "s/'/'\\\\''/g;
++ s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p"
++ ;;
++ *)
++ # `set' quotes correctly as required by POSIX, so do not add quotes.
++ sed -n \
++ "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p"
++ ;;
++ esac;
++} |
++ sed '
++ t clear
++ : clear
++ s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
++ t end
++ /^ac_cv_env/!s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
++ : end' >>confcache
++if diff $cache_file confcache >/dev/null 2>&1; then :; else
++ if test -w $cache_file; then
++ test "x$cache_file" != "x/dev/null" && echo "updating cache $cache_file"
++ cat confcache >$cache_file
++ else
++ echo "not updating unwritable cache $cache_file"
++ fi
++fi
++rm -f confcache
++
++test "x$prefix" = xNONE && prefix=$ac_default_prefix
++# Let make expand exec_prefix.
++test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
++
++# VPATH may cause trouble with some makes, so we remove $(srcdir),
++# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and
++# trailing colons and then remove the whole line if VPATH becomes empty
++# (actually we leave an empty line to preserve line numbers).
++if test "x$srcdir" = x.; then
++ ac_vpsub='/^[ ]*VPATH[ ]*=/{
++s/:*\$(srcdir):*/:/;
++s/:*\${srcdir}:*/:/;
++s/:*@srcdir@:*/:/;
++s/^\([^=]*=[ ]*\):*/\1/;
++s/:*$//;
++s/^[^=]*=[ ]*$//;
++}'
++fi
++
++DEFS=-DHAVE_CONFIG_H
++
++ac_libobjs=
++ac_ltlibobjs=
++for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
++ # 1. Remove the extension, and $U if already installed.
++ ac_i=`echo "$ac_i" |
++ sed 's/\$U\././;s/\.o$//;s/\.obj$//'`
++ # 2. Add them.
++ ac_libobjs="$ac_libobjs $ac_i\$U.$ac_objext"
++ ac_ltlibobjs="$ac_ltlibobjs $ac_i"'$U.lo'
++done
++LIBOBJS=$ac_libobjs
++
++LTLIBOBJS=$ac_ltlibobjs
++
++
++if test -z "${MAINTAINER_MODE_TRUE}" && test -z "${MAINTAINER_MODE_FALSE}"; then
++ { { echo "$as_me:$LINENO: error: conditional \"MAINTAINER_MODE\" was never defined.
++Usually this means the macro was only invoked conditionally." >&5
++echo "$as_me: error: conditional \"MAINTAINER_MODE\" was never defined.
++Usually this means the macro was only invoked conditionally." >&2;}
++ { (exit 1); exit 1; }; }
++fi
++if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then
++ { { echo "$as_me:$LINENO: error: conditional \"AMDEP\" was never defined.
++Usually this means the macro was only invoked conditionally." >&5
++echo "$as_me: error: conditional \"AMDEP\" was never defined.
++Usually this means the macro was only invoked conditionally." >&2;}
++ { (exit 1); exit 1; }; }
++fi
++if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then
++ { { echo "$as_me:$LINENO: error: conditional \"am__fastdepCC\" was never defined.
++Usually this means the macro was only invoked conditionally." >&5
++echo "$as_me: error: conditional \"am__fastdepCC\" was never defined.
++Usually this means the macro was only invoked conditionally." >&2;}
++ { (exit 1); exit 1; }; }
++fi
++if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then
++ { { echo "$as_me:$LINENO: error: conditional \"am__fastdepCXX\" was never defined.
++Usually this means the macro was only invoked conditionally." >&5
++echo "$as_me: error: conditional \"am__fastdepCXX\" was never defined.
++Usually this means the macro was only invoked conditionally." >&2;}
++ { (exit 1); exit 1; }; }
++fi
++if test -z "${INSTALL_LTDL_TRUE}" && test -z "${INSTALL_LTDL_FALSE}"; then
++ { { echo "$as_me:$LINENO: error: conditional \"INSTALL_LTDL\" was never defined.
++Usually this means the macro was only invoked conditionally." >&5
++echo "$as_me: error: conditional \"INSTALL_LTDL\" was never defined.
++Usually this means the macro was only invoked conditionally." >&2;}
++ { (exit 1); exit 1; }; }
++fi
++if test -z "${CONVENIENCE_LTDL_TRUE}" && test -z "${CONVENIENCE_LTDL_FALSE}"; then
++ { { echo "$as_me:$LINENO: error: conditional \"CONVENIENCE_LTDL\" was never defined.
++Usually this means the macro was only invoked conditionally." >&5
++echo "$as_me: error: conditional \"CONVENIENCE_LTDL\" was never defined.
++Usually this means the macro was only invoked conditionally." >&2;}
++ { (exit 1); exit 1; }; }
++fi
++if test -z "${XMLSEC_NO_OPENSSL_TRUE}" && test -z "${XMLSEC_NO_OPENSSL_FALSE}"; then
++ { { echo "$as_me:$LINENO: error: conditional \"XMLSEC_NO_OPENSSL\" was never defined.
++Usually this means the macro was only invoked conditionally." >&5
++echo "$as_me: error: conditional \"XMLSEC_NO_OPENSSL\" was never defined.
++Usually this means the macro was only invoked conditionally." >&2;}
++ { (exit 1); exit 1; }; }
++fi
++if test -z "${XMLSEC_NO_GNUTLS_TRUE}" && test -z "${XMLSEC_NO_GNUTLS_FALSE}"; then
++ { { echo "$as_me:$LINENO: error: conditional \"XMLSEC_NO_GNUTLS\" was never defined.
++Usually this means the macro was only invoked conditionally." >&5
++echo "$as_me: error: conditional \"XMLSEC_NO_GNUTLS\" was never defined.
++Usually this means the macro was only invoked conditionally." >&2;}
++ { (exit 1); exit 1; }; }
++fi
++if test -z "${XMLSEC_NO_NSS_TRUE}" && test -z "${XMLSEC_NO_NSS_FALSE}"; then
++ { { echo "$as_me:$LINENO: error: conditional \"XMLSEC_NO_NSS\" was never defined.
++Usually this means the macro was only invoked conditionally." >&5
++echo "$as_me: error: conditional \"XMLSEC_NO_NSS\" was never defined.
++Usually this means the macro was only invoked conditionally." >&2;}
++ { (exit 1); exit 1; }; }
++fi
++if test -z "${XMLSEC_NO_SHA1_TRUE}" && test -z "${XMLSEC_NO_SHA1_FALSE}"; then
++ { { echo "$as_me:$LINENO: error: conditional \"XMLSEC_NO_SHA1\" was never defined.
++Usually this means the macro was only invoked conditionally." >&5
++echo "$as_me: error: conditional \"XMLSEC_NO_SHA1\" was never defined.
++Usually this means the macro was only invoked conditionally." >&2;}
++ { (exit 1); exit 1; }; }
++fi
++if test -z "${XMLSEC_NO_RIPEMD160_TRUE}" && test -z "${XMLSEC_NO_RIPEMD160_FALSE}"; then
++ { { echo "$as_me:$LINENO: error: conditional \"XMLSEC_NO_RIPEMD160\" was never defined.
++Usually this means the macro was only invoked conditionally." >&5
++echo "$as_me: error: conditional \"XMLSEC_NO_RIPEMD160\" was never defined.
++Usually this means the macro was only invoked conditionally." >&2;}
++ { (exit 1); exit 1; }; }
++fi
++if test -z "${XMLSEC_NO_HMAC_TRUE}" && test -z "${XMLSEC_NO_HMAC_FALSE}"; then
++ { { echo "$as_me:$LINENO: error: conditional \"XMLSEC_NO_HMAC\" was never defined.
++Usually this means the macro was only invoked conditionally." >&5
++echo "$as_me: error: conditional \"XMLSEC_NO_HMAC\" was never defined.
++Usually this means the macro was only invoked conditionally." >&2;}
++ { (exit 1); exit 1; }; }
++fi
++if test -z "${XMLSEC_NO_DSA_TRUE}" && test -z "${XMLSEC_NO_DSA_FALSE}"; then
++ { { echo "$as_me:$LINENO: error: conditional \"XMLSEC_NO_DSA\" was never defined.
++Usually this means the macro was only invoked conditionally." >&5
++echo "$as_me: error: conditional \"XMLSEC_NO_DSA\" was never defined.
++Usually this means the macro was only invoked conditionally." >&2;}
++ { (exit 1); exit 1; }; }
++fi
++if test -z "${XMLSEC_NO_RSA_TRUE}" && test -z "${XMLSEC_NO_RSA_FALSE}"; then
++ { { echo "$as_me:$LINENO: error: conditional \"XMLSEC_NO_RSA\" was never defined.
++Usually this means the macro was only invoked conditionally." >&5
++echo "$as_me: error: conditional \"XMLSEC_NO_RSA\" was never defined.
++Usually this means the macro was only invoked conditionally." >&2;}
++ { (exit 1); exit 1; }; }
++fi
++if test -z "${XMLSEC_NO_X509_TRUE}" && test -z "${XMLSEC_NO_X509_FALSE}"; then
++ { { echo "$as_me:$LINENO: error: conditional \"XMLSEC_NO_X509\" was never defined.
++Usually this means the macro was only invoked conditionally." >&5
++echo "$as_me: error: conditional \"XMLSEC_NO_X509\" was never defined.
++Usually this means the macro was only invoked conditionally." >&2;}
++ { (exit 1); exit 1; }; }
++fi
++if test -z "${XMLSEC_NO_DES_TRUE}" && test -z "${XMLSEC_NO_DES_FALSE}"; then
++ { { echo "$as_me:$LINENO: error: conditional \"XMLSEC_NO_DES\" was never defined.
++Usually this means the macro was only invoked conditionally." >&5
++echo "$as_me: error: conditional \"XMLSEC_NO_DES\" was never defined.
++Usually this means the macro was only invoked conditionally." >&2;}
++ { (exit 1); exit 1; }; }
++fi
++if test -z "${XMLSEC_NO_AES_TRUE}" && test -z "${XMLSEC_NO_AES_FALSE}"; then
++ { { echo "$as_me:$LINENO: error: conditional \"XMLSEC_NO_AES\" was never defined.
++Usually this means the macro was only invoked conditionally." >&5
++echo "$as_me: error: conditional \"XMLSEC_NO_AES\" was never defined.
++Usually this means the macro was only invoked conditionally." >&2;}
++ { (exit 1); exit 1; }; }
++fi
++if test -z "${XMLSEC_NO_XMLDSIG_TRUE}" && test -z "${XMLSEC_NO_XMLDSIG_FALSE}"; then
++ { { echo "$as_me:$LINENO: error: conditional \"XMLSEC_NO_XMLDSIG\" was never defined.
++Usually this means the macro was only invoked conditionally." >&5
++echo "$as_me: error: conditional \"XMLSEC_NO_XMLDSIG\" was never defined.
++Usually this means the macro was only invoked conditionally." >&2;}
++ { (exit 1); exit 1; }; }
++fi
++if test -z "${XMLSEC_NO_XMLENC_TRUE}" && test -z "${XMLSEC_NO_XMLENC_FALSE}"; then
++ { { echo "$as_me:$LINENO: error: conditional \"XMLSEC_NO_XMLENC\" was never defined.
++Usually this means the macro was only invoked conditionally." >&5
++echo "$as_me: error: conditional \"XMLSEC_NO_XMLENC\" was never defined.
++Usually this means the macro was only invoked conditionally." >&2;}
++ { (exit 1); exit 1; }; }
++fi
++if test -z "${XMLSEC_NO_XKMS_TRUE}" && test -z "${XMLSEC_NO_XKMS_FALSE}"; then
++ { { echo "$as_me:$LINENO: error: conditional \"XMLSEC_NO_XKMS\" was never defined.
++Usually this means the macro was only invoked conditionally." >&5
++echo "$as_me: error: conditional \"XMLSEC_NO_XKMS\" was never defined.
++Usually this means the macro was only invoked conditionally." >&2;}
++ { (exit 1); exit 1; }; }
++fi
++if test -z "${XMLSEC_NO_CRYPTO_DYNAMIC_LOADING_TRUE}" && test -z "${XMLSEC_NO_CRYPTO_DYNAMIC_LOADING_FALSE}"; then
++ { { echo "$as_me:$LINENO: error: conditional \"XMLSEC_NO_CRYPTO_DYNAMIC_LOADING\" was never defined.
++Usually this means the macro was only invoked conditionally." >&5
++echo "$as_me: error: conditional \"XMLSEC_NO_CRYPTO_DYNAMIC_LOADING\" was never defined.
++Usually this means the macro was only invoked conditionally." >&2;}
++ { (exit 1); exit 1; }; }
++fi
++if test -z "${XMLSEC_NO_APPS_CRYPTO_DYNAMIC_LOADING_TRUE}" && test -z "${XMLSEC_NO_APPS_CRYPTO_DYNAMIC_LOADING_FALSE}"; then
++ { { echo "$as_me:$LINENO: error: conditional \"XMLSEC_NO_APPS_CRYPTO_DYNAMIC_LOADING\" was never defined.
++Usually this means the macro was only invoked conditionally." >&5
++echo "$as_me: error: conditional \"XMLSEC_NO_APPS_CRYPTO_DYNAMIC_LOADING\" was never defined.
++Usually this means the macro was only invoked conditionally." >&2;}
++ { (exit 1); exit 1; }; }
++fi
++
++: ${CONFIG_STATUS=./config.status}
++ac_clean_files_save=$ac_clean_files
++ac_clean_files="$ac_clean_files $CONFIG_STATUS"
++{ echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5
++echo "$as_me: creating $CONFIG_STATUS" >&6;}
++cat >$CONFIG_STATUS <<_ACEOF
++#! $SHELL
++# Generated by $as_me.
++# Run this file to recreate the current configuration.
++# Compiler output produced by configure, useful for debugging
++# configure, is in config.log if it exists.
++
++debug=false
++ac_cs_recheck=false
++ac_cs_silent=false
++SHELL=\${CONFIG_SHELL-$SHELL}
++_ACEOF
++
++cat >>$CONFIG_STATUS <<\_ACEOF
++## --------------------- ##
++## M4sh Initialization. ##
++## --------------------- ##
++
++# Be Bourne compatible
++if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
++ emulate sh
++ NULLCMD=:
++ # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
++ # is contrary to our usage. Disable this feature.
++ alias -g '${1+"$@"}'='"$@"'
++elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then
++ set -o posix
++fi
++DUALCASE=1; export DUALCASE # for MKS sh
++
++# Support unset when possible.
++if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
++ as_unset=unset
++else
++ as_unset=false
++fi
++
++
++# Work around bugs in pre-3.0 UWIN ksh.
++$as_unset ENV MAIL MAILPATH
++PS1='$ '
++PS2='> '
++PS4='+ '
++
++# NLS nuisances.
++for as_var in \
++ LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \
++ LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \
++ LC_TELEPHONE LC_TIME
++do
++ if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then
++ eval $as_var=C; export $as_var
++ else
++ $as_unset $as_var
++ fi
++done
++
++# Required to use basename.
++if expr a : '\(a\)' >/dev/null 2>&1; then
++ as_expr=expr
++else
++ as_expr=false
++fi
++
++if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then
++ as_basename=basename
++else
++ as_basename=false
++fi
++
++
++# Name of the executable.
++as_me=`$as_basename "$0" ||
++$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
++ X"$0" : 'X\(//\)$' \| \
++ X"$0" : 'X\(/\)$' \| \
++ . : '\(.\)' 2>/dev/null ||
++echo X/"$0" |
++ sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; }
++ /^X\/\(\/\/\)$/{ s//\1/; q; }
++ /^X\/\(\/\).*/{ s//\1/; q; }
++ s/.*/./; q'`
++
++
++# PATH needs CR, and LINENO needs CR and PATH.
++# Avoid depending upon Character Ranges.
++as_cr_letters='abcdefghijklmnopqrstuvwxyz'
++as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
++as_cr_Letters=$as_cr_letters$as_cr_LETTERS
++as_cr_digits='0123456789'
++as_cr_alnum=$as_cr_Letters$as_cr_digits
++
++# The user is always right.
++if test "${PATH_SEPARATOR+set}" != set; then
++ echo "#! /bin/sh" >conf$$.sh
++ echo "exit 0" >>conf$$.sh
++ chmod +x conf$$.sh
++ if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
++ PATH_SEPARATOR=';'
++ else
++ PATH_SEPARATOR=:
++ fi
++ rm -f conf$$.sh
++fi
++
++
++ as_lineno_1=$LINENO
++ as_lineno_2=$LINENO
++ as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
++ test "x$as_lineno_1" != "x$as_lineno_2" &&
++ test "x$as_lineno_3" = "x$as_lineno_2" || {
++ # Find who we are. Look in the path if we contain no path at all
++ # relative or not.
++ case $0 in
++ *[\\/]* ) as_myself=$0 ;;
++ *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++ IFS=$as_save_IFS
++ test -z "$as_dir" && as_dir=.
++ test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
++done
++
++ ;;
++ esac
++ # We did not find ourselves, most probably we were run as `sh COMMAND'
++ # in which case we are not to be found in the path.
++ if test "x$as_myself" = x; then
++ as_myself=$0
++ fi
++ if test ! -f "$as_myself"; then
++ { { echo "$as_me:$LINENO: error: cannot find myself; rerun with an absolute path" >&5
++echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2;}
++ { (exit 1); exit 1; }; }
++ fi
++ case $CONFIG_SHELL in
++ '')
++ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
++do
++ IFS=$as_save_IFS
++ test -z "$as_dir" && as_dir=.
++ for as_base in sh bash ksh sh5; do
++ case $as_dir in
++ /*)
++ if ("$as_dir/$as_base" -c '
++ as_lineno_1=$LINENO
++ as_lineno_2=$LINENO
++ as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
++ test "x$as_lineno_1" != "x$as_lineno_2" &&
++ test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then
++ $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; }
++ $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; }
++ CONFIG_SHELL=$as_dir/$as_base
++ export CONFIG_SHELL
++ exec "$CONFIG_SHELL" "$0" ${1+"$@"}
++ fi;;
++ esac
++ done
++done
++;;
++ esac
++
++ # Create $as_me.lineno as a copy of $as_myself, but with $LINENO
++ # uniformly replaced by the line number. The first 'sed' inserts a
++ # line-number line before each line; the second 'sed' does the real
++ # work. The second script uses 'N' to pair each line-number line
++ # with the numbered line, and appends trailing '-' during
++ # substitution so that $LINENO is not a special case at line end.
++ # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the
++ # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-)
++ sed '=' <$as_myself |
++ sed '
++ N
++ s,$,-,
++ : loop
++ s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3,
++ t loop
++ s,-$,,
++ s,^['$as_cr_digits']*\n,,
++ ' >$as_me.lineno &&
++ chmod +x $as_me.lineno ||
++ { { echo "$as_me:$LINENO: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&5
++echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2;}
++ { (exit 1); exit 1; }; }
++
++ # Don't try to exec as it changes $[0], causing all sort of problems
++ # (the dirname of $[0] is not the place where we might find the
++ # original and so on. Autoconf is especially sensible to this).
++ . ./$as_me.lineno
++ # Exit status is that of the last command.
++ exit
++}
++
++
++case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in
++ *c*,-n*) ECHO_N= ECHO_C='
++' ECHO_T=' ' ;;
++ *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;;
++ *) ECHO_N= ECHO_C='\c' ECHO_T= ;;
++esac
++
++if expr a : '\(a\)' >/dev/null 2>&1; then
++ as_expr=expr
++else
++ as_expr=false
++fi
++
++rm -f conf$$ conf$$.exe conf$$.file
++echo >conf$$.file
++if ln -s conf$$.file conf$$ 2>/dev/null; then
++ # We could just check for DJGPP; but this test a) works b) is more generic
++ # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04).
++ if test -f conf$$.exe; then
++ # Don't use ln at all; we don't have any links
++ as_ln_s='cp -p'
++ else
++ as_ln_s='ln -s'
++ fi
++elif ln conf$$.file conf$$ 2>/dev/null; then
++ as_ln_s=ln
++else
++ as_ln_s='cp -p'
++fi
++rm -f conf$$ conf$$.exe conf$$.file
++
++if mkdir -p . 2>/dev/null; then
++ as_mkdir_p=:
++else
++ test -d ./-p && rmdir ./-p
++ as_mkdir_p=false
++fi
++
++as_executable_p="test -f"
++
++# Sed expression to map a string onto a valid CPP name.
++as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
++
++# Sed expression to map a string onto a valid variable name.
++as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
++
++
++# IFS
++# We need space, tab and new line, in precisely that order.
++as_nl='
++'
++IFS=" $as_nl"
++
++# CDPATH.
++$as_unset CDPATH
++
++exec 6>&1
++
++# Open the log real soon, to keep \$[0] and so on meaningful, and to
++# report actual input values of CONFIG_FILES etc. instead of their
++# values after options handling. Logging --version etc. is OK.
++exec 5>>config.log
++{
++ echo
++ sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
++## Running $as_me. ##
++_ASBOX
++} >&5
++cat >&5 <<_CSEOF
++
++This file was extended by $as_me, which was
++generated by GNU Autoconf 2.59. Invocation command line was
++
++ CONFIG_FILES = $CONFIG_FILES
++ CONFIG_HEADERS = $CONFIG_HEADERS
++ CONFIG_LINKS = $CONFIG_LINKS
++ CONFIG_COMMANDS = $CONFIG_COMMANDS
++ $ $0 $@
++
++_CSEOF
++echo "on `(hostname || uname -n) 2>/dev/null | sed 1q`" >&5
++echo >&5
++_ACEOF
++
++# Files that config.status was made for.
++if test -n "$ac_config_files"; then
++ echo "config_files=\"$ac_config_files\"" >>$CONFIG_STATUS
++fi
++
++if test -n "$ac_config_headers"; then
++ echo "config_headers=\"$ac_config_headers\"" >>$CONFIG_STATUS
++fi
++
++if test -n "$ac_config_links"; then
++ echo "config_links=\"$ac_config_links\"" >>$CONFIG_STATUS
++fi
++
++if test -n "$ac_config_commands"; then
++ echo "config_commands=\"$ac_config_commands\"" >>$CONFIG_STATUS
++fi
++
++cat >>$CONFIG_STATUS <<\_ACEOF
++
++ac_cs_usage="\
++\`$as_me' instantiates files from templates according to the
++current configuration.
++
++Usage: $0 [OPTIONS] [FILE]...
++
++ -h, --help print this help, then exit
++ -V, --version print version number, then exit
++ -q, --quiet do not print progress messages
++ -d, --debug don't remove temporary files
++ --recheck update $as_me by reconfiguring in the same conditions
++ --file=FILE[:TEMPLATE]
++ instantiate the configuration file FILE
++ --header=FILE[:TEMPLATE]
++ instantiate the configuration header FILE
++
++Configuration files:
++$config_files
++
++Configuration headers:
++$config_headers
++
++Configuration commands:
++$config_commands
++
++Report bugs to <bug-autoconf@gnu.org>."
++_ACEOF
++
++cat >>$CONFIG_STATUS <<_ACEOF
++ac_cs_version="\\
++config.status
++configured by $0, generated by GNU Autoconf 2.59,
++ with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\"
++
++Copyright (C) 2003 Free Software Foundation, Inc.
++This config.status script is free software; the Free Software Foundation
++gives unlimited permission to copy, distribute and modify it."
++srcdir=$srcdir
++INSTALL="$INSTALL"
++_ACEOF
++
++cat >>$CONFIG_STATUS <<\_ACEOF
++# If no file are specified by the user, then we need to provide default
++# value. By we need to know if files were specified by the user.
++ac_need_defaults=:
++while test $# != 0
++do
++ case $1 in
++ --*=*)
++ ac_option=`expr "x$1" : 'x\([^=]*\)='`
++ ac_optarg=`expr "x$1" : 'x[^=]*=\(.*\)'`
++ ac_shift=:
++ ;;
++ -*)
++ ac_option=$1
++ ac_optarg=$2
++ ac_shift=shift
++ ;;
++ *) # This is not an option, so the user has probably given explicit
++ # arguments.
+ ac_option=$1
-+ ac_optarg=$2
-+ ac_shift=shift
-+ ;;
-+ *) # This is not an option, so the user has probably given explicit
-+ # arguments.
-+ ac_option=$1
-+ ac_need_defaults=false;;
-+ esac
-+
-+ case $ac_option in
-+ # Handling of the options.
-+ _ACEOF
-+ cat >>$CONFIG_STATUS <<\_ACEOF
-+ -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
-+ ac_cs_recheck=: ;;
-+ --version | --vers* | -V )
-+ echo "$ac_cs_version"; exit 0 ;;
-+ --he | --h)
-+ # Conflict between --help and --header
-+ { { echo "$as_me:$LINENO: error: ambiguous option: $1
-+ Try \`$0 --help' for more information." >&5
-+ echo "$as_me: error: ambiguous option: $1
-+ Try \`$0 --help' for more information." >&2;}
-+ { (exit 1); exit 1; }; };;
-+ --help | --hel | -h )
-+ echo "$ac_cs_usage"; exit 0 ;;
-+ --debug | --d* | -d )
-+ debug=: ;;
-+ --file | --fil | --fi | --f )
-+ $ac_shift
-+ CONFIG_FILES="$CONFIG_FILES $ac_optarg"
-+ ac_need_defaults=false;;
-+ --header | --heade | --head | --hea )
-+ $ac_shift
-+ CONFIG_HEADERS="$CONFIG_HEADERS $ac_optarg"
+ ac_need_defaults=false;;
-+ -q | -quiet | --quiet | --quie | --qui | --qu | --q \
-+ | -silent | --silent | --silen | --sile | --sil | --si | --s)
-+ ac_cs_silent=: ;;
-+
-+ # This is an error.
-+ -*) { { echo "$as_me:$LINENO: error: unrecognized option: $1
-+ Try \`$0 --help' for more information." >&5
-+ echo "$as_me: error: unrecognized option: $1
-+ Try \`$0 --help' for more information." >&2;}
-+ { (exit 1); exit 1; }; } ;;
-+
-+ *) ac_config_targets="$ac_config_targets $1" ;;
-+
-+ esac
-+ shift
-+ done
-+
-+ ac_configure_extra_args=
-+
-+ if $ac_cs_silent; then
-+ exec 6>/dev/null
-+ ac_configure_extra_args="$ac_configure_extra_args --silent"
-+ fi
-+
-+ _ACEOF
-+ cat >>$CONFIG_STATUS <<_ACEOF
-+ if \$ac_cs_recheck; then
-+ echo "running $SHELL $0 " $ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6
-+ exec $SHELL $0 $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
-+ fi
-+
-+ _ACEOF
-+
-+ cat >>$CONFIG_STATUS <<_ACEOF
-+ #
-+ # INIT-COMMANDS section.
-+ #
-+
-+ AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"
-+
-+ _ACEOF
-+
-+
-+
-+ cat >>$CONFIG_STATUS <<\_ACEOF
-+ for ac_config_target in $ac_config_targets
-+ do
-+ case "$ac_config_target" in
-+ # Handling of arguments.
-+ "include/xmlsec/version.h" ) CONFIG_FILES="$CONFIG_FILES include/xmlsec/version.h" ;;
-+ "Makefile" ) CONFIG_FILES="$CONFIG_FILES Makefile" ;;
-+ "include/Makefile" ) CONFIG_FILES="$CONFIG_FILES include/Makefile" ;;
-+ "include/xmlsec/Makefile" ) CONFIG_FILES="$CONFIG_FILES include/xmlsec/Makefile" ;;
-+ "include/xmlsec/private/Makefile" ) CONFIG_FILES="$CONFIG_FILES include/xmlsec/private/Makefile" ;;
-+ "src/Makefile" ) CONFIG_FILES="$CONFIG_FILES src/Makefile" ;;
-+ "apps/Makefile" ) CONFIG_FILES="$CONFIG_FILES apps/Makefile" ;;
-+ "docs/Makefile" ) CONFIG_FILES="$CONFIG_FILES docs/Makefile" ;;
-+ "docs/api/Makefile" ) CONFIG_FILES="$CONFIG_FILES docs/api/Makefile" ;;
-+ "man/Makefile" ) CONFIG_FILES="$CONFIG_FILES man/Makefile" ;;
-+ "xmlsec1Conf.sh" ) CONFIG_FILES="$CONFIG_FILES xmlsec1Conf.sh:xmlsecConf.sh.in" ;;
-+ "xmlsec1-config" ) CONFIG_FILES="$CONFIG_FILES xmlsec1-config:xmlsec-config.in" ;;
-+ "xmlsec1-openssl.pc" ) CONFIG_FILES="$CONFIG_FILES xmlsec1-openssl.pc:xmlsec-openssl.pc.in" ;;
-+ "xmlsec1-gnutls.pc" ) CONFIG_FILES="$CONFIG_FILES xmlsec1-gnutls.pc:xmlsec-gnutls.pc.in" ;;
-+ "xmlsec1-nss.pc" ) CONFIG_FILES="$CONFIG_FILES xmlsec1-nss.pc:xmlsec-nss.pc.in" ;;
-+ "xmlsec1.spec" ) CONFIG_FILES="$CONFIG_FILES xmlsec1.spec:xmlsec.spec.in" ;;
-+ "include/xmlsec/openssl/Makefile" ) CONFIG_FILES="$CONFIG_FILES include/xmlsec/openssl/Makefile" ;;
-+ "src/openssl/Makefile" ) CONFIG_FILES="$CONFIG_FILES src/openssl/Makefile" ;;
-+ "include/xmlsec/gnutls/Makefile" ) CONFIG_FILES="$CONFIG_FILES include/xmlsec/gnutls/Makefile" ;;
-+ "src/gnutls/Makefile" ) CONFIG_FILES="$CONFIG_FILES src/gnutls/Makefile" ;;
-+ "include/xmlsec/nss/Makefile" ) CONFIG_FILES="$CONFIG_FILES include/xmlsec/nss/Makefile" ;;
-+ "src/nss/Makefile" ) CONFIG_FILES="$CONFIG_FILES src/nss/Makefile" ;;
-+ "include/xmlsec/mscrypto/Makefile" ) CONFIG_FILES="$CONFIG_FILES include/xmlsec/mscrypto/Makefile" ;;
-+ "src/mscrypto/Makefile" ) CONFIG_FILES="$CONFIG_FILES src/mscrypto/Makefile" ;;
-+ "depfiles" ) CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;;
-+ "config.h" ) CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;;
-+ *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5
-+ echo "$as_me: error: invalid argument: $ac_config_target" >&2;}
-+ { (exit 1); exit 1; }; };;
-+ esac
-+ done
-+
-+ # If the user did not use the arguments to specify the items to instantiate,
-+ # then the envvar interface is used. Set only those that are not.
-+ # We use the long form for the default assignment because of an extremely
-+ # bizarre bug on SunOS 4.1.3.
-+ if $ac_need_defaults; then
-+ test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files
-+ test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers
-+ test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands
-+ fi
-+
-+ # Have a temporary directory for convenience. Make it in the build tree
-+ # simply because there is no reason to put it here, and in addition,
-+ # creating and moving files from /tmp can sometimes cause problems.
-+ # Create a temporary directory, and hook for its removal unless debugging.
-+ $debug ||
-+ {
-+ trap 'exit_status=$?; rm -rf $tmp && exit $exit_status' 0
-+ trap '{ (exit 1); exit 1; }' 1 2 13 15
-+ }
-+
-+ # Create a (secure) tmp directory for tmp files.
-+
-+ {
-+ tmp=`(umask 077 && mktemp -d -q "./confstatXXXXXX") 2>/dev/null` &&
-+ test -n "$tmp" && test -d "$tmp"
-+ } ||
-+ {
-+ tmp=./confstat$$-$RANDOM
-+ (umask 077 && mkdir $tmp)
-+ } ||
-+ {
-+ echo "$me: cannot create a temporary directory in ." >&2
-+ { (exit 1); exit 1; }
-+ }
-+
-+ _ACEOF
-+
-+ cat >>$CONFIG_STATUS <<_ACEOF
-+
-+ #
-+ # CONFIG_FILES section.
-+ #
-+
-+ # No need to generate the scripts if there are no CONFIG_FILES.
-+ # This happens for instance when ./config.status config.h
-+ if test -n "\$CONFIG_FILES"; then
-+ # Protect against being on the right side of a sed subst in config.status.
-+ sed 's/,@/@@/; s/@,/@@/; s/,;t t\$/@;t t/; /@;t t\$/s/[\\\\&,]/\\\\&/g;
-+ s/@@/,@/; s/@@/@,/; s/@;t t\$/,;t t/' >\$tmp/subs.sed <<\\CEOF
-+ s,@SHELL@,$SHELL,;t t
-+ s,@PATH_SEPARATOR@,$PATH_SEPARATOR,;t t
-+ s,@PACKAGE_NAME@,$PACKAGE_NAME,;t t
-+ s,@PACKAGE_TARNAME@,$PACKAGE_TARNAME,;t t
-+ s,@PACKAGE_VERSION@,$PACKAGE_VERSION,;t t
-+ s,@PACKAGE_STRING@,$PACKAGE_STRING,;t t
-+ s,@PACKAGE_BUGREPORT@,$PACKAGE_BUGREPORT,;t t
-+ s,@exec_prefix@,$exec_prefix,;t t
-+ s,@prefix@,$prefix,;t t
-+ s,@program_transform_name@,$program_transform_name,;t t
-+ s,@bindir@,$bindir,;t t
-+ s,@sbindir@,$sbindir,;t t
-+ s,@libexecdir@,$libexecdir,;t t
-+ s,@datadir@,$datadir,;t t
-+ s,@sysconfdir@,$sysconfdir,;t t
-+ s,@sharedstatedir@,$sharedstatedir,;t t
-+ s,@localstatedir@,$localstatedir,;t t
-+ s,@libdir@,$libdir,;t t
-+ s,@includedir@,$includedir,;t t
-+ s,@oldincludedir@,$oldincludedir,;t t
-+ s,@infodir@,$infodir,;t t
-+ s,@mandir@,$mandir,;t t
-+ s,@build_alias@,$build_alias,;t t
-+ s,@host_alias@,$host_alias,;t t
-+ s,@target_alias@,$target_alias,;t t
-+ s,@DEFS@,$DEFS,;t t
-+ s,@ECHO_C@,$ECHO_C,;t t
-+ s,@ECHO_N@,$ECHO_N,;t t
-+ s,@ECHO_T@,$ECHO_T,;t t
-+ s,@LIBS@,$LIBS,;t t
-+ s,@build@,$build,;t t
-+ s,@build_cpu@,$build_cpu,;t t
-+ s,@build_vendor@,$build_vendor,;t t
-+ s,@build_os@,$build_os,;t t
-+ s,@host@,$host,;t t
-+ s,@host_cpu@,$host_cpu,;t t
-+ s,@host_vendor@,$host_vendor,;t t
-+ s,@host_os@,$host_os,;t t
-+ s,@XMLSEC_VERSION@,$XMLSEC_VERSION,;t t
-+ s,@XMLSEC_PACKAGE@,$XMLSEC_PACKAGE,;t t
-+ s,@XMLSEC_VERSION_SAFE@,$XMLSEC_VERSION_SAFE,;t t
-+ s,@XMLSEC_VERSION_MAJOR@,$XMLSEC_VERSION_MAJOR,;t t
-+ s,@XMLSEC_VERSION_MINOR@,$XMLSEC_VERSION_MINOR,;t t
-+ s,@XMLSEC_VERSION_SUBMINOR@,$XMLSEC_VERSION_SUBMINOR,;t t
-+ s,@XMLSEC_VERSION_INFO@,$XMLSEC_VERSION_INFO,;t t
-+ s,@INSTALL_PROGRAM@,$INSTALL_PROGRAM,;t t
-+ s,@INSTALL_SCRIPT@,$INSTALL_SCRIPT,;t t
-+ s,@INSTALL_DATA@,$INSTALL_DATA,;t t
-+ s,@CYGPATH_W@,$CYGPATH_W,;t t
-+ s,@PACKAGE@,$PACKAGE,;t t
-+ s,@VERSION@,$VERSION,;t t
-+ s,@ACLOCAL@,$ACLOCAL,;t t
-+ s,@AUTOCONF@,$AUTOCONF,;t t
-+ s,@AUTOMAKE@,$AUTOMAKE,;t t
-+ s,@AUTOHEADER@,$AUTOHEADER,;t t
-+ s,@MAKEINFO@,$MAKEINFO,;t t
-+ s,@AMTAR@,$AMTAR,;t t
-+ s,@install_sh@,$install_sh,;t t
-+ s,@STRIP@,$STRIP,;t t
-+ s,@ac_ct_STRIP@,$ac_ct_STRIP,;t t
-+ s,@INSTALL_STRIP_PROGRAM@,$INSTALL_STRIP_PROGRAM,;t t
-+ s,@mkdir_p@,$mkdir_p,;t t
-+ s,@AWK@,$AWK,;t t
-+ s,@SET_MAKE@,$SET_MAKE,;t t
-+ s,@am__leading_dot@,$am__leading_dot,;t t
-+ s,@MAINTAINER_MODE_TRUE@,$MAINTAINER_MODE_TRUE,;t t
-+ s,@MAINTAINER_MODE_FALSE@,$MAINTAINER_MODE_FALSE,;t t
-+ s,@MAINT@,$MAINT,;t t
-+ s,@CC@,$CC,;t t
-+ s,@CFLAGS@,$CFLAGS,;t t
-+ s,@LDFLAGS@,$LDFLAGS,;t t
-+ s,@CPPFLAGS@,$CPPFLAGS,;t t
-+ s,@ac_ct_CC@,$ac_ct_CC,;t t
-+ s,@EXEEXT@,$EXEEXT,;t t
-+ s,@OBJEXT@,$OBJEXT,;t t
-+ s,@DEPDIR@,$DEPDIR,;t t
-+ s,@am__include@,$am__include,;t t
-+ s,@am__quote@,$am__quote,;t t
-+ s,@AMDEP_TRUE@,$AMDEP_TRUE,;t t
-+ s,@AMDEP_FALSE@,$AMDEP_FALSE,;t t
-+ s,@AMDEPBACKSLASH@,$AMDEPBACKSLASH,;t t
-+ s,@CCDEPMODE@,$CCDEPMODE,;t t
-+ s,@am__fastdepCC_TRUE@,$am__fastdepCC_TRUE,;t t
-+ s,@am__fastdepCC_FALSE@,$am__fastdepCC_FALSE,;t t
-+ s,@EGREP@,$EGREP,;t t
-+ s,@LN_S@,$LN_S,;t t
-+ s,@ECHO@,$ECHO,;t t
-+ s,@AR@,$AR,;t t
-+ s,@ac_ct_AR@,$ac_ct_AR,;t t
-+ s,@RANLIB@,$RANLIB,;t t
-+ s,@ac_ct_RANLIB@,$ac_ct_RANLIB,;t t
-+ s,@CPP@,$CPP,;t t
-+ s,@CXX@,$CXX,;t t
-+ s,@CXXFLAGS@,$CXXFLAGS,;t t
-+ s,@ac_ct_CXX@,$ac_ct_CXX,;t t
-+ s,@CXXDEPMODE@,$CXXDEPMODE,;t t
-+ s,@am__fastdepCXX_TRUE@,$am__fastdepCXX_TRUE,;t t
-+ s,@am__fastdepCXX_FALSE@,$am__fastdepCXX_FALSE,;t t
-+ s,@CXXCPP@,$CXXCPP,;t t
-+ s,@F77@,$F77,;t t
-+ s,@FFLAGS@,$FFLAGS,;t t
-+ s,@ac_ct_F77@,$ac_ct_F77,;t t
-+ s,@LIBTOOL@,$LIBTOOL,;t t
-+ s,@RM@,$RM,;t t
-+ s,@CP@,$CP,;t t
-+ s,@MV@,$MV,;t t
-+ s,@TAR@,$TAR,;t t
-+ s,@HELP2MAN@,$HELP2MAN,;t t
-+ s,@MAN2HTML@,$MAN2HTML,;t t
-+ s,@U@,$U,;t t
-+ s,@ANSI2KNR@,$ANSI2KNR,;t t
-+ s,@INSTALL_LTDL_TRUE@,$INSTALL_LTDL_TRUE,;t t
-+ s,@INSTALL_LTDL_FALSE@,$INSTALL_LTDL_FALSE,;t t
-+ s,@CONVENIENCE_LTDL_TRUE@,$CONVENIENCE_LTDL_TRUE,;t t
-+ s,@CONVENIENCE_LTDL_FALSE@,$CONVENIENCE_LTDL_FALSE,;t t
-+ s,@LIBADD_DL@,$LIBADD_DL,;t t
-+ s,@PKG_CONFIG_ENABLED@,$PKG_CONFIG_ENABLED,;t t
-+ s,@PKG_CONFIG@,$PKG_CONFIG,;t t
-+ s,@LIBXML_CFLAGS@,$LIBXML_CFLAGS,;t t
-+ s,@LIBXML_LIBS@,$LIBXML_LIBS,;t t
-+ s,@LIBXML262_CFLAGS@,$LIBXML262_CFLAGS,;t t
-+ s,@LIBXML262_LIBS@,$LIBXML262_LIBS,;t t
-+ s,@LIBXML_CONFIG@,$LIBXML_CONFIG,;t t
-+ s,@LIBXML_MIN_VERSION@,$LIBXML_MIN_VERSION,;t t
-+ s,@LIBXSLT_CFLAGS@,$LIBXSLT_CFLAGS,;t t
-+ s,@LIBXSLT_LIBS@,$LIBXSLT_LIBS,;t t
-+ s,@XMLSEC_NO_LIBXSLT@,$XMLSEC_NO_LIBXSLT,;t t
-+ s,@LIBXSLT_CONFIG@,$LIBXSLT_CONFIG,;t t
-+ s,@LIBXSLT_MIN_VERSION@,$LIBXSLT_MIN_VERSION,;t t
-+ s,@OPENSSL_CFLAGS@,$OPENSSL_CFLAGS,;t t
-+ s,@OPENSSL_LIBS@,$OPENSSL_LIBS,;t t
-+ s,@OPENSSL097_CFLAGS@,$OPENSSL097_CFLAGS,;t t
-+ s,@OPENSSL097_LIBS@,$OPENSSL097_LIBS,;t t
-+ s,@XMLSEC_NO_OPENSSL_TRUE@,$XMLSEC_NO_OPENSSL_TRUE,;t t
-+ s,@XMLSEC_NO_OPENSSL_FALSE@,$XMLSEC_NO_OPENSSL_FALSE,;t t
-+ s,@XMLSEC_NO_OPENSSL@,$XMLSEC_NO_OPENSSL,;t t
-+ s,@OPENSSL_CRYPTO_LIB@,$OPENSSL_CRYPTO_LIB,;t t
-+ s,@OPENSSL_MIN_VERSION@,$OPENSSL_MIN_VERSION,;t t
-+ s,@GNUTLS_CFLAGS@,$GNUTLS_CFLAGS,;t t
-+ s,@GNUTLS_LIBS@,$GNUTLS_LIBS,;t t
-+ s,@XMLSEC_NO_GNUTLS_TRUE@,$XMLSEC_NO_GNUTLS_TRUE,;t t
-+ s,@XMLSEC_NO_GNUTLS_FALSE@,$XMLSEC_NO_GNUTLS_FALSE,;t t
-+ s,@XMLSEC_NO_GNUTLS@,$XMLSEC_NO_GNUTLS,;t t
-+ s,@GNUTLS_CRYPTO_LIB@,$GNUTLS_CRYPTO_LIB,;t t
-+ s,@GNUTLS_MIN_VERSION@,$GNUTLS_MIN_VERSION,;t t
-+ s,@NSS_CFLAGS@,$NSS_CFLAGS,;t t
-+ s,@NSS_LIBS@,$NSS_LIBS,;t t
-+ s,@XMLSEC_NO_NSS_TRUE@,$XMLSEC_NO_NSS_TRUE,;t t
-+ s,@XMLSEC_NO_NSS_FALSE@,$XMLSEC_NO_NSS_FALSE,;t t
-+ s,@XMLSEC_NO_NSS@,$XMLSEC_NO_NSS,;t t
-+ s,@NSS_CRYPTO_LIB@,$NSS_CRYPTO_LIB,;t t
-+ s,@NSS_MIN_VERSION@,$NSS_MIN_VERSION,;t t
-+ s,@NSPR_MIN_VERSION@,$NSPR_MIN_VERSION,;t t
-+ s,@MOZILLA_MIN_VERSION@,$MOZILLA_MIN_VERSION,;t t
-+ s,@MSCRYPTO_CFLAGS@,$MSCRYPTO_CFLAGS,;t t
-+ s,@MSCRYPTO_LIBS@,$MSCRYPTO_LIBS,;t t
- s,@XMLSEC_NO_SHA1_TRUE@,$XMLSEC_NO_SHA1_TRUE,;t t
- s,@XMLSEC_NO_SHA1_FALSE@,$XMLSEC_NO_SHA1_FALSE,;t t
- s,@XMLSEC_NO_SHA1@,$XMLSEC_NO_SHA1,;t t
-***************
-*** 34368,34373 ****
---- 36260,36267 ----
- s,@NSS_MIN_VERSION@,$NSS_MIN_VERSION,;t t
- s,@NSPR_MIN_VERSION@,$NSPR_MIN_VERSION,;t t
- s,@MOZILLA_MIN_VERSION@,$MOZILLA_MIN_VERSION,;t t
-+ s,@MSCRYPTO_CFLAGS@,$MSCRYPTO_CFLAGS,;t t
-+ s,@MSCRYPTO_LIBS@,$MSCRYPTO_LIBS,;t t
- s,@XMLSEC_NO_SHA1_TRUE@,$XMLSEC_NO_SHA1_TRUE,;t t
- s,@XMLSEC_NO_SHA1_FALSE@,$XMLSEC_NO_SHA1_FALSE,;t t
- s,@XMLSEC_NO_SHA1@,$XMLSEC_NO_SHA1,;t t
-*** misc/xmlsec1-1.2.6/configure.in Thu Aug 26 04:49:24 2004
---- misc/build/xmlsec1-1.2.6/configure.in Fri May 11 14:47:19 2007
-***************
-*** 143,149 ****
- dnl find libxml
- dnl ==========================================================================
- LIBXML_MIN_VERSION="2.4.2"
-! LIBXML_CONFIG="xml2-config"
- LIBXML_CFLAGS=""
- LIBXML_LIBS=""
- LIBXML_FOUND="no"
---- 143,149 ----
- dnl find libxml
- dnl ==========================================================================
- LIBXML_MIN_VERSION="2.4.2"
-! LIBXML_CONFIG="./libxml2-config"
- LIBXML_CFLAGS=""
- LIBXML_LIBS=""
- LIBXML_FOUND="no"
-***************
-*** 503,514 ****
-
- XMLSEC_NO_NSS="1"
- MOZILLA_MIN_VERSION="1.4"
- NSS_MIN_VERSION="3.2"
- NSPR_MIN_VERSION="4.0"
- NSS_CFLAGS=""
- NSS_LIBS=""
-! NSS_LIBS_LIST="-lnss3 -lsmime3"
-! NSPR_LIBS_LIST="-lnspr4 -lplds4 -lplc4"
- NSS_CRYPTO_LIB="$PACKAGE-nss"
- NSS_FOUND="no"
-
---- 503,528 ----
-
- XMLSEC_NO_NSS="1"
- MOZILLA_MIN_VERSION="1.4"
-+ if test "z$MOZ_FLAVOUR" = "zfirefox" ; then
-+ MOZILLA_MIN_VERSION="1.0"
-+ fi
- NSS_MIN_VERSION="3.2"
- NSPR_MIN_VERSION="4.0"
- NSS_CFLAGS=""
- NSS_LIBS=""
-!
-! case $host_os in
-! cygwin* | mingw* | pw32*)
-! NSS_LIBS_LIST="-lnss3 -lsmime3"
-! NSPR_LIBS_LIST="-lnspr4"
-! ;;
-!
-! *)
-! NSS_LIBS_LIST="-lnss3 -lsoftokn3 -lsmime3"
-! NSPR_LIBS_LIST="-lnspr4 -lplds4 -lplc4"
-! ;;
-! esac
-!
- NSS_CRYPTO_LIB="$PACKAGE-nss"
- NSS_FOUND="no"
-
-***************
-*** 521,529 ****
- AC_MSG_RESULT(no)
- NSS_FOUND="without"
- elif test "z$with_nss" = "z" -a "z$with_nspr" = "z" -a "z$with_mozilla_ver" = "z" -a "z$PKG_CONFIG_ENABLED" = "zyes" ; then
-! PKG_CHECK_MODULES(NSS, mozilla-nspr >= $MOZILLA_MIN_VERSION mozilla-nss >= $MOZILLA_MIN_VERSION,
- [NSS_FOUND=yes],
- [NSS_FOUND=no])
- fi
-
- if test "z$NSS_FOUND" = "zno" ; then
---- 535,550 ----
- AC_MSG_RESULT(no)
- NSS_FOUND="without"
- elif test "z$with_nss" = "z" -a "z$with_nspr" = "z" -a "z$with_mozilla_ver" = "z" -a "z$PKG_CONFIG_ENABLED" = "zyes" ; then
-! PKG_CHECK_MODULES(NSS, $MOZ_FLAVOUR-nspr >= $MOZILLA_MIN_VERSION $MOZ_FLAVOUR-nss >= $MOZILLA_MIN_VERSION,
- [NSS_FOUND=yes],
- [NSS_FOUND=no])
-+ AC_MSG_RESULT($NSS_FOUND)
-+ if test "z$NSS_FOUND" = "zno" ; then
-+ PKG_CHECK_MODULES(NSS, nspr >= $NSPR_MIN_VERSION nss >= $NSS_MIN_VERSION,
-+ [NSS_FOUND=yes],
-+ [NSS_FOUND=no])
-+ AC_MSG_RESULT($NSS_FOUND)
-+ fi
- fi
-
- if test "z$NSS_FOUND" = "zno" ; then
-***************
-*** 534,541 ****
- ac_mozilla_name=mozilla-$MOZILLA_MIN_VERSION
- fi
-
-! ac_nss_lib_dir="/usr/lib /usr/lib64 /usr/local/lib /usr/lib/$ac_mozilla_name /usr/local/lib/$ac_mozilla_name"
-! ac_nss_inc_dir="/usr/include /usr/include/mozilla /usr/local/include /usr/local/include/mozilla /usr/include/$ac_mozilla_name /usr/local/include/$ac_mozilla_name"
-
- AC_MSG_CHECKING(for nspr libraries >= $NSPR_MIN_VERSION)
- NSPR_INCLUDES_FOUND="no"
---- 555,562 ----
- ac_mozilla_name=mozilla-$MOZILLA_MIN_VERSION
- fi
-
-! ac_nss_lib_dir="${SOLARVERSION}/${INPATH}/lib${UPDMINOREXT}"
-! ac_nss_inc_dir="${SOLARVERSION}/${INPATH}/inc${UPDMINOREXT}/mozilla"
-
- AC_MSG_CHECKING(for nspr libraries >= $NSPR_MIN_VERSION)
- NSPR_INCLUDES_FOUND="no"
-***************
-*** 570,576 ****
- done
-
- for dir in $ac_nss_lib_dir ; do
-! if test -f $dir/libnspr4.so ; then
- dnl do not add -L/usr/lib because compiler does it anyway
- if test "z$dir" = "z/usr/lib" ; then
- NSPR_LIBS="$NSPR_LIBS_LIST"
---- 591,599 ----
- done
-
- for dir in $ac_nss_lib_dir ; do
-! case $host_os in
-! cygwin* | mingw* | pw32*)
-! if test -f $dir/libnspr4.so -o -f $dir/libnspr4.dylib -o -f $dir/libnspr4.a ; then
- dnl do not add -L/usr/lib because compiler does it anyway
- if test "z$dir" = "z/usr/lib" ; then
- NSPR_LIBS="$NSPR_LIBS_LIST"
-***************
-*** 583,589 ****
- fi
- NSPR_LIBS_FOUND="yes"
- break
-! fi
- done
- fi
-
---- 606,631 ----
- fi
- NSPR_LIBS_FOUND="yes"
- break
-! fi
-! ;;
-!
-! *)
-! if test -f $dir/libnspr4.so -o -f $dir/libnspr4.dylib ; then
-! dnl do not add -L/usr/lib because compiler does it anyway
-! if test "z$dir" = "z/usr/lib" ; then
-! NSPR_LIBS="$NSPR_LIBS_LIST"
-! else
-! if test "z$with_gnu_ld" = "zyes" ; then
-! NSPR_LIBS="-Wl,-rpath-link -Wl,$dir -L$dir $NSPR_LIBS_LIST"
-! else
-! NSPR_LIBS="-L$dir $NSPR_LIBS_LIST"
-! fi
-! fi
-! NSPR_LIBS_FOUND="yes"
-! break
-! fi
-! ;;
-! esac
- done
- fi
-
-***************
-*** 641,647 ****
- done
-
- for dir in $ac_nss_lib_dir ; do
-! if test -f $dir/libnss3.so ; then
- dnl do not add -L/usr/lib because compiler does it anyway
- if test "z$dir" = "z/usr/lib" ; then
- NSS_LIBS="$NSS_LIBS_LIST"
---- 683,691 ----
- done
-
- for dir in $ac_nss_lib_dir ; do
-! case $host_os in
-! cygwin* | mingw* | pw32*)
-! if test -f $dir/libnss3.so -o -f $dir/libnss3.dylib -o -f $dir/libnss3.a ; then
- dnl do not add -L/usr/lib because compiler does it anyway
- if test "z$dir" = "z/usr/lib" ; then
- NSS_LIBS="$NSS_LIBS_LIST"
-***************
-*** 654,660 ****
- fi
- NSS_LIBS_FOUND="yes"
- break
-! fi
- done
- fi
-
---- 698,723 ----
- fi
- NSS_LIBS_FOUND="yes"
- break
-! fi
-! ;;
-!
-! *)
-! if test -f $dir/libnss3.so -o -f $dir/libnss3.dylib ; then
-! dnl do not add -L/usr/lib because compiler does it anyway
-! if test "z$dir" = "z/usr/lib" ; then
-! NSS_LIBS="$NSS_LIBS_LIST"
-! else
-! if test "z$with_gnu_ld" = "zyes" ; then
-! NSS_LIBS="-Wl,-rpath-link -Wl,$dir -L$dir $NSS_LIBS_LIST"
-! else
-! NSS_LIBS="-L$dir $NSS_LIBS_LIST"
-! fi
-! fi
-! NSS_LIBS_FOUND="yes"
-! break
-! fi
-! ;;
-! esac
- done
- fi
-
-*** misc/xmlsec1-1.2.6/include/xmlsec/mscrypto/Makefile.in Fri May 11 14:47:48 2007
---- misc/build/xmlsec1-1.2.6/include/xmlsec/mscrypto/Makefile.in Fri May 11 14:47:19 2007
-***************
-*** 1 ****
-! dummy
---- 1,58 ----
-! # Makefile.in generated by automake 1.8.3 from Makefile.am.
-! # @configure_input@
-!
-! # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-! # 2003, 2004 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@
-!
-! HEADERS = $(xmlsecmscryptoinc_HEADERS)
-! NULL =
-! xmlsecmscryptoinc_HEADERS = \
-! akmngr.h \
-! app.h \
-! crypto.h \
-! symbols.h \
-! certkeys.h \
-! keysstore.h \
-! x509.h \
-! $(NULL)
-!
-! all: all-am
-!
-! mostlyclean-libtool:
-! -rm -f *.lo
-!
-! clean-libtool:
-! -rm -rf .libs _libs
-!
-! all-am: Makefile $(HEADERS)
-!
-! mostlyclean-generic:
-!
-! clean-generic:
-!
-! clean: clean-am
-!
-! clean-am: clean-generic clean-libtool mostlyclean-am
-!
-! mostlyclean: mostlyclean-am
-!
-! mostlyclean-am: mostlyclean-generic mostlyclean-libtool
-!
-! .PHONY: all all-am clean clean-generic \
-! clean-libtool \
-! mostlyclean mostlyclean-generic mostlyclean-libtool
-!
-!
-! # 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:
-*** misc/xmlsec1-1.2.6/include/xmlsec/mscrypto/akmngr.h Fri May 11 14:47:43 2007
---- misc/build/xmlsec1-1.2.6/include/xmlsec/mscrypto/akmngr.h Fri May 11 14:47:19 2007
-***************
-*** 1 ****
-! dummy
---- 1,71 ----
-! /**
-! * XMLSec library
-! *
-! * This is free software; see Copyright file in the source
-! * distribution for preciese wording.
-! *
-! * Copyright ..........................
-! */
-! #ifndef __XMLSEC_MSCRYPTO_AKMNGR_H__
-! #define __XMLSEC_MSCRYPTO_AKMNGR_H__
-!
-! #include <windows.h>
-! #include <wincrypt.h>
-!
-! #include <xmlsec/xmlsec.h>
-! #include <xmlsec/keys.h>
-! #include <xmlsec/transforms.h>
-!
-! #ifdef __cplusplus
-! extern "C" {
-! #endif /* __cplusplus */
-!
-! XMLSEC_CRYPTO_EXPORT xmlSecKeysMngrPtr
-! xmlSecMSCryptoAppliedKeysMngrCreate(
-! HCERTSTORE keyStore ,
-! HCERTSTORE certStore
-! ) ;
-!
-! XMLSEC_CRYPTO_EXPORT int
-! xmlSecMSCryptoAppliedKeysMngrSymKeyLoad(
-! xmlSecKeysMngrPtr mngr ,
-! HCRYPTKEY symKey
-! ) ;
-!
-! XMLSEC_CRYPTO_EXPORT int
-! xmlSecMSCryptoAppliedKeysMngrPubKeyLoad(
-! xmlSecKeysMngrPtr mngr ,
-! HCRYPTKEY pubKey
-! ) ;
-!
-! XMLSEC_CRYPTO_EXPORT int
-! xmlSecMSCryptoAppliedKeysMngrPriKeyLoad(
-! xmlSecKeysMngrPtr mngr ,
-! HCRYPTKEY priKey
-! ) ;
-!
-! XMLSEC_CRYPTO_EXPORT int
-! xmlSecMSCryptoAppliedKeysMngrAdoptKeyStore (
-! xmlSecKeysMngrPtr mngr ,
-! HCERTSTORE keyStore
-! ) ;
-!
-! XMLSEC_CRYPTO_EXPORT int
-! xmlSecMSCryptoAppliedKeysMngrAdoptTrustedStore (
-! xmlSecKeysMngrPtr mngr ,
-! HCERTSTORE trustedStore
-! ) ;
-!
-! XMLSEC_CRYPTO_EXPORT int
-! xmlSecMSCryptoAppliedKeysMngrAdoptUntrustedStore (
-! xmlSecKeysMngrPtr mngr ,
-! HCERTSTORE untrustedStore
-! ) ;
-!
-! #ifdef __cplusplus
-! }
-! #endif /* __cplusplus */
-!
-! #endif /* __XMLSEC_MSCRYPTO_AKMNGR_H__ */
-!
-!
-*** misc/xmlsec1-1.2.6/include/xmlsec/mscrypto/x509.h Fri Sep 26 08:12:46 2003
---- misc/build/xmlsec1-1.2.6/include/xmlsec/mscrypto/x509.h Fri May 11 14:47:19 2007
-***************
-*** 77,82 ****
---- 77,97 ----
- PCCERT_CONTEXT cert,
- xmlSecKeyDataType type);
-
-+ XMLSEC_CRYPTO_EXPORT int xmlSecMSCryptoX509StoreAdoptKeyStore (
-+ xmlSecKeyDataStorePtr store,
-+ HCERTSTORE keyStore
-+ ) ;
-+
-+ XMLSEC_CRYPTO_EXPORT int xmlSecMSCryptoX509StoreAdoptTrustedStore (
-+ xmlSecKeyDataStorePtr store,
-+ HCERTSTORE trustedStore
-+ ) ;
-+
-+ XMLSEC_CRYPTO_EXPORT int xmlSecMSCryptoX509StoreAdoptUntrustedStore (
-+ xmlSecKeyDataStorePtr store,
-+ HCERTSTORE untrustedStore
-+ ) ;
-+
-
- #endif /* XMLSEC_NO_X509 */
-
-*** misc/xmlsec1-1.2.6/include/xmlsec/nss/Makefile.am Wed Jul 30 04:46:35 2003
---- misc/build/xmlsec1-1.2.6/include/xmlsec/nss/Makefile.am Fri May 11 14:47:19 2007
-***************
-*** 3,8 ****
---- 3,9 ----
- xmlsecnssincdir = $(includedir)/xmlsec1/xmlsec/nss
-
- xmlsecnssinc_HEADERS = \
-+ akmngr.h \
- app.h \
- crypto.h \
- symbols.h \
-***************
-*** 10,15 ****
---- 11,18 ----
- keysstore.h \
- pkikeys.h \
- x509.h \
-+ tokens.h \
-+ ciphers.h \
- $(NULL)
-
- install-exec-hook:
-*** misc/xmlsec1-1.2.6/include/xmlsec/nss/Makefile.in Thu Aug 26 08:00:31 2004
---- misc/build/xmlsec1-1.2.6/include/xmlsec/nss/Makefile.in Fri May 11 14:47:19 2007
-***************
-*** 273,278 ****
---- 273,279 ----
- NULL =
- xmlsecnssincdir = $(includedir)/xmlsec1/xmlsec/nss
- xmlsecnssinc_HEADERS = \
-+ akmngr.h \
- app.h \
- crypto.h \
- symbols.h \
-***************
-*** 280,285 ****
---- 281,288 ----
- keysstore.h \
- pkikeys.h \
- x509.h \
-+ tokens.h \
-+ ciphers.h \
- $(NULL)
-
- all: all-am
-*** misc/xmlsec1-1.2.6/include/xmlsec/nss/akmngr.h Fri May 11 14:47:41 2007
---- misc/build/xmlsec1-1.2.6/include/xmlsec/nss/akmngr.h Fri May 11 14:47:19 2007
-***************
-*** 1 ****
-! dummy
---- 1,56 ----
-! /**
-! * XMLSec library
-! *
-! * This is free software; see Copyright file in the source
-! * distribution for preciese wording.
-! *
-! * Copyright ..........................
-! */
-! #ifndef __XMLSEC_NSS_AKMNGR_H__
-! #define __XMLSEC_NSS_AKMNGR_H__
-!
-! #include <nss.h>
-! #include <nspr.h>
-! #include <pk11func.h>
-! #include <cert.h>
-!
-! #include <xmlsec/xmlsec.h>
-! #include <xmlsec/keys.h>
-! #include <xmlsec/transforms.h>
-!
-! #ifdef __cplusplus
-! extern "C" {
-! #endif /* __cplusplus */
-!
-! XMLSEC_CRYPTO_EXPORT xmlSecKeysMngrPtr
-! xmlSecNssAppliedKeysMngrCreate(
-! PK11SlotInfo** slots,
-! int cSlots,
-! CERTCertDBHandle* handler
-! ) ;
-!
-! XMLSEC_CRYPTO_EXPORT int
-! xmlSecNssAppliedKeysMngrSymKeyLoad(
-! xmlSecKeysMngrPtr mngr ,
-! PK11SymKey* symKey
-! ) ;
-!
-! XMLSEC_CRYPTO_EXPORT int
-! xmlSecNssAppliedKeysMngrPubKeyLoad(
-! xmlSecKeysMngrPtr mngr ,
-! SECKEYPublicKey* pubKey
-! ) ;
-!
-! XMLSEC_CRYPTO_EXPORT int
-! xmlSecNssAppliedKeysMngrPriKeyLoad(
-! xmlSecKeysMngrPtr mngr ,
-! SECKEYPrivateKey* priKey
-! ) ;
-!
-! #ifdef __cplusplus
-! }
-! #endif /* __cplusplus */
-!
-! #endif /* __XMLSEC_NSS_AKMNGR_H__ */
-!
-!
-*** misc/xmlsec1-1.2.6/include/xmlsec/nss/app.h Mon Jan 12 22:06:14 2004
---- misc/build/xmlsec1-1.2.6/include/xmlsec/nss/app.h Fri May 11 14:47:19 2007
-***************
-*** 22,27 ****
---- 22,30 ----
- #include <xmlsec/keysmngr.h>
- #include <xmlsec/transforms.h>
-
-+ #include <xmlsec/nss/tokens.h>
-+ #include <xmlsec/nss/akmngr.h>
-+
- /**
- * Init/shutdown
- */
-***************
-*** 34,39 ****
---- 37,44 ----
- XMLSEC_CRYPTO_EXPORT int xmlSecNssAppDefaultKeysMngrInit (xmlSecKeysMngrPtr mngr);
- XMLSEC_CRYPTO_EXPORT int xmlSecNssAppDefaultKeysMngrAdoptKey(xmlSecKeysMngrPtr mngr,
- xmlSecKeyPtr key);
-+ XMLSEC_CRYPTO_EXPORT int xmlSecNssAppDefaultKeysMngrAdoptKeySlot(xmlSecKeysMngrPtr mngr,
-+ xmlSecNssKeySlotPtr keySlot);
- XMLSEC_CRYPTO_EXPORT int xmlSecNssAppDefaultKeysMngrLoad (xmlSecKeysMngrPtr mngr,
- const char* uri);
- XMLSEC_CRYPTO_EXPORT int xmlSecNssAppDefaultKeysMngrSave (xmlSecKeysMngrPtr mngr,
-*** misc/xmlsec1-1.2.6/include/xmlsec/nss/ciphers.h Fri May 11 14:47:41 2007
---- misc/build/xmlsec1-1.2.6/include/xmlsec/nss/ciphers.h Fri May 11 14:47:19 2007
-***************
-*** 1 ****
-! dummy
---- 1,35 ----
-! /**
-! * XMLSec library
-! *
-! * This is free software; see Copyright file in the source
-! * distribution for preciese wording.
-! *
-! * Copyright ..........................
-! */
-! #ifndef __XMLSEC_NSS_CIPHERS_H__
-! #define __XMLSEC_NSS_CIPHERS_H__
-!
-! #ifdef __cplusplus
-! extern "C" {
-! #endif /* __cplusplus */
-!
-! #include <xmlsec/xmlsec.h>
-! #include <xmlsec/keys.h>
-! #include <xmlsec/transforms.h>
-!
-!
-! XMLSEC_CRYPTO_EXPORT int xmlSecNssSymKeyDataAdoptKey( xmlSecKeyDataPtr data,
-! PK11SymKey* symkey ) ;
-!
-! XMLSEC_CRYPTO_EXPORT xmlSecKeyDataPtr xmlSecNssSymKeyDataKeyAdopt( PK11SymKey* symKey ) ;
-!
-! XMLSEC_CRYPTO_EXPORT PK11SymKey* xmlSecNssSymKeyDataGetKey(xmlSecKeyDataPtr data);
-!
-!
-! #ifdef __cplusplus
-! }
-! #endif /* __cplusplus */
-!
-! #endif /* __XMLSEC_NSS_CIPHERS_H__ */
-!
-!
-*** misc/xmlsec1-1.2.6/include/xmlsec/nss/crypto.h Mon Jan 12 22:06:14 2004
---- misc/build/xmlsec1-1.2.6/include/xmlsec/nss/crypto.h Fri May 11 14:47:19 2007
-***************
-*** 264,269 ****
---- 264,278 ----
- xmlSecNssTransformRsaPkcs1GetKlass()
- XMLSEC_CRYPTO_EXPORT xmlSecTransformId xmlSecNssTransformRsaPkcs1GetKlass(void);
-
-+ /**
-+ * xmlSecNssTransformRsaOaepId:
-+ *
-+ * The RSA OAEP key transport transform klass.
-+ */
-+ #define xmlSecNssTransformRsaOaepId \
-+ xmlSecNssTransformRsaOaepGetKlass()
-+ XMLSEC_CRYPTO_EXPORT xmlSecTransformId xmlSecNssTransformRsaOaepGetKlass(void);
-+
- #endif /* XMLSEC_NO_RSA */
-
-
-*** misc/xmlsec1-1.2.6/include/xmlsec/nss/keysstore.h Wed Jul 30 04:46:35 2003
---- misc/build/xmlsec1-1.2.6/include/xmlsec/nss/keysstore.h Fri May 11 14:47:19 2007
-***************
-*** 16,21 ****
---- 16,23 ----
- #endif /* __cplusplus */
-
- #include <xmlsec/xmlsec.h>
-+ #include <xmlsec/keysmngr.h>
-+ #include <xmlsec/nss/tokens.h>
-
- /****************************************************************************
- *
-***************
-*** 31,36 ****
---- 33,40 ----
- XMLSEC_CRYPTO_EXPORT xmlSecKeyStoreId xmlSecNssKeysStoreGetKlass (void);
- XMLSEC_CRYPTO_EXPORT int xmlSecNssKeysStoreAdoptKey (xmlSecKeyStorePtr store,
- xmlSecKeyPtr key);
-+ XMLSEC_CRYPTO_EXPORT int xmlSecNssKeysStoreAdoptKeySlot(xmlSecKeyStorePtr store,
-+ xmlSecNssKeySlotPtr keySlot);
- XMLSEC_CRYPTO_EXPORT int xmlSecNssKeysStoreLoad (xmlSecKeyStorePtr store,
- const char *uri,
- xmlSecKeysMngrPtr keysMngr);
-*** misc/xmlsec1-1.2.6/include/xmlsec/nss/tokens.h Fri May 11 14:47:42 2007
---- misc/build/xmlsec1-1.2.6/include/xmlsec/nss/tokens.h Fri May 11 14:47:19 2007
-***************
-*** 1 ****
-! dummy
---- 1,182 ----
-! /**
-! * XMLSec library
-! *
-! * This is free software; see Copyright file in the source
-! * distribution for preciese wording.
-! *
-! * Copyright (c) 2003 Sun Microsystems, Inc. All rights reserved.
-! *
-! * Contributor(s): _____________________________
-! *
-! */
-! #ifndef __XMLSEC_NSS_TOKENS_H__
-! #define __XMLSEC_NSS_TOKENS_H__
-!
-! #include <string.h>
-!
-! #include <nss.h>
-! #include <pk11func.h>
-!
-! #include <xmlsec/xmlsec.h>
-! #include <xmlsec/list.h>
-!
-! #ifdef __cplusplus
-! extern "C" {
-! #endif /* __cplusplus */
-!
-! /**
-! * xmlSecNssKeySlotListId
-! *
-! * The crypto mechanism list klass
-! */
-! #define xmlSecNssKeySlotListId xmlSecNssKeySlotListGetKlass()
-! XMLSEC_CRYPTO_EXPORT xmlSecPtrListId xmlSecNssKeySlotListGetKlass( void ) ;
-!
-! /*******************************************
-! * KeySlot interfaces
-! *******************************************/
-! /**
-! * Internal NSS key slot data
-! * @mechanismList: the mechanisms that the slot bound with.
-! * @slot: the pkcs slot
-! *
-! * This context is located after xmlSecPtrList
-! */
-! typedef struct _xmlSecNssKeySlot xmlSecNssKeySlot ;
-! typedef struct _xmlSecNssKeySlot* xmlSecNssKeySlotPtr ;
-!
-! struct _xmlSecNssKeySlot {
-! CK_MECHANISM_TYPE_PTR mechanismList ; /* mech. array, NULL ternimated */
-! PK11SlotInfo* slot ;
-! } ;
-!
-! XMLSEC_CRYPTO_EXPORT int
-! xmlSecNssKeySlotSetMechList(
-! xmlSecNssKeySlotPtr keySlot ,
-! CK_MECHANISM_TYPE_PTR mechanismList
-! ) ;
-!
-! XMLSEC_CRYPTO_EXPORT int
-! xmlSecNssKeySlotEnableMech(
-! xmlSecNssKeySlotPtr keySlot ,
-! CK_MECHANISM_TYPE mechanism
-! ) ;
-!
-! XMLSEC_CRYPTO_EXPORT int
-! xmlSecNssKeySlotDisableMech(
-! xmlSecNssKeySlotPtr keySlot ,
-! CK_MECHANISM_TYPE mechanism
-! ) ;
-!
-! XMLSEC_CRYPTO_EXPORT CK_MECHANISM_TYPE_PTR
-! xmlSecNssKeySlotGetMechList(
-! xmlSecNssKeySlotPtr keySlot
-! ) ;
-!
-! XMLSEC_CRYPTO_EXPORT int
-! xmlSecNssKeySlotSetSlot(
-! xmlSecNssKeySlotPtr keySlot ,
-! PK11SlotInfo* slot
-! ) ;
-!
-! XMLSEC_CRYPTO_EXPORT int
-! xmlSecNssKeySlotInitialize(
-! xmlSecNssKeySlotPtr keySlot ,
-! PK11SlotInfo* slot
-! ) ;
-!
-! XMLSEC_CRYPTO_EXPORT void
-! xmlSecNssKeySlotFinalize(
-! xmlSecNssKeySlotPtr keySlot
-! ) ;
-!
-! XMLSEC_CRYPTO_EXPORT PK11SlotInfo*
-! xmlSecNssKeySlotGetSlot(
-! xmlSecNssKeySlotPtr keySlot
-! ) ;
-!
-! XMLSEC_CRYPTO_EXPORT xmlSecNssKeySlotPtr
-! xmlSecNssKeySlotCreate() ;
-!
-! XMLSEC_CRYPTO_EXPORT int
-! xmlSecNssKeySlotCopy(
-! xmlSecNssKeySlotPtr newKeySlot ,
-! xmlSecNssKeySlotPtr keySlot
-! ) ;
-!
-! XMLSEC_CRYPTO_EXPORT xmlSecNssKeySlotPtr
-! xmlSecNssKeySlotDuplicate(
-! xmlSecNssKeySlotPtr keySlot
-! ) ;
-!
-! XMLSEC_CRYPTO_EXPORT void
-! xmlSecNssKeySlotDestroy(
-! xmlSecNssKeySlotPtr keySlot
-! ) ;
-!
-! XMLSEC_CRYPTO_EXPORT int
-! xmlSecNssKeySlotBindMech(
-! xmlSecNssKeySlotPtr keySlot ,
-! CK_MECHANISM_TYPE type
-! ) ;
-!
-! XMLSEC_CRYPTO_EXPORT int
-! xmlSecNssKeySlotSupportMech(
-! xmlSecNssKeySlotPtr keySlot ,
-! CK_MECHANISM_TYPE type
-! ) ;
-!
-!
-! /************************************************************************
-! * PKCS#11 crypto token interfaces
-! *
-! * A PKCS#11 slot repository will be defined internally. From the
-! * repository, a user can specify a particular slot for a certain crypto
-! * mechanism.
-! *
-! * In some situation, some cryptographic operation should act in a user
-! * designated devices. The interfaces defined here provide the way. If
-! * the user do not initialize the repository distinctly, the interfaces
-! * use the default functions provided by NSS itself.
-! *
-! ************************************************************************/
-! /**
-! * Initialize NSS pkcs#11 slot repository
-! *
-! * Returns 0 if success or -1 if an error occurs.
-! */
-! XMLSEC_CRYPTO_EXPORT int xmlSecNssSlotInitialize( void ) ;
-!
-! /**
-! * Shutdown and destroy NSS pkcs#11 slot repository
-! */
-! XMLSEC_CRYPTO_EXPORT void xmlSecNssSlotShutdown() ;
-!
-! /**
-! * Get PKCS#11 slot handler
-! * @type the mechanism that the slot must support.
-! *
-! * Returns a pointer to PKCS#11 slot or NULL if an error occurs.
-! *
-! * Notes: The returned handler must be destroied distinctly.
-! */
-! XMLSEC_CRYPTO_EXPORT PK11SlotInfo* xmlSecNssSlotGet( CK_MECHANISM_TYPE type ) ;
-!
-! /**
-! * Adopt a pkcs#11 slot with a mechanism into the repository
-! * @slot: the pkcs#11 slot.
-! * @mech: the mechanism.
-! *
-! * If @mech is available( @mech != CKM_INVALID_MECHANISM ), every operation with
-! * this mechanism only can perform on the @slot.
-! *
-! * Returns 0 if success or -1 if an error occurs.
-! */
-! XMLSEC_CRYPTO_EXPORT int xmlSecNssSlotAdopt( PK11SlotInfo* slot, CK_MECHANISM_TYPE mech ) ;
-!
-! #ifdef __cplusplus
-! }
-! #endif /* __cplusplus */
-!
-! #endif /* __XMLSEC_NSS_TOKENS_H__ */
-!
-*** misc/xmlsec1-1.2.6/libxml2-config Fri May 11 14:47:49 2007
---- misc/build/xmlsec1-1.2.6/libxml2-config Fri May 11 14:47:19 2007
-***************
-*** 1 ****
-! dummy
---- 1,48 ----
-! #! /bin/sh
-!
-! if test "$SYSTEM_LIBXML" = "YES"
-! then xml2-config "$@"; exit 0
-! fi
-!
-! prefix=${SOLARVERSION}/${INPATH}
-! includedir=${SOLARVERSION}/${INPATH}/inc${UPDMINOREXT}/external
-! libdir=${SOLARVERSION}/${INPATH}/lib${UPDMINOREXT}
-!
-! while test $# -gt 0; do
-! case "$1" in
-! -*=*) optarg=`echo "$1" | sed 's/[-_a-zA-Z0-9]*=//'` ;;
-! *) optarg= ;;
-! esac
-!
-! case "$1" in
-! --prefix=*)
-! prefix=$optarg
-! includedir=$prefix/include
-! libdir=$prefix/lib
-! ;;
-!
-! --prefix)
-! echo $prefix
-! ;;
-!
-! --version)
-! echo 2.5.4
-! exit 0
-! ;;
-!
-! --cflags)
-! echo -I${includedir}
-! ;;
-!
-! --libs)
-! echo -L${libdir} ${LIBXML2LIB} ${ZLIB3RDLIB} -lm
-! ;;
-!
-! *)
-! exit 1
-! ;;
-! esac
-! shift
-! done
-!
-! exit 0
-*** misc/xmlsec1-1.2.6/ltmain.sh Thu Aug 26 08:00:15 2004
---- misc/build/xmlsec1-1.2.6/ltmain.sh Fri May 11 14:47:19 2007
-***************
-*** 1661,1666 ****
---- 1661,1671 ----
- fi
- ;;
-
-+ *.lib)
-+ deplibs="$deplibs $arg"
-+ continue
-+ ;;
-+
- *.$libext)
- # An archive.
- deplibs="$deplibs $arg"
-***************
-*** 1974,1979 ****
---- 1979,1988 ----
- continue
- ;;
- *.la) lib="$deplib" ;;
-+ *.lib)
-+ deplibs="$deplib $deplibs"
-+ continue
-+ ;;
- *.$libext)
- if test "$pass" = conv; then
- deplibs="$deplib $deplibs"
-***************
-*** 2994,3006 ****
- ;;
-
- freebsd-aout)
-! major=".$current"
-! versuffix=".$current.$revision";
- ;;
-
- freebsd-elf)
-! major=".$current"
-! versuffix=".$current";
- ;;
-
- irix | nonstopux)
---- 3003,3015 ----
- ;;
-
- freebsd-aout)
-! major=.`expr $current - $age`
-! versuffix="$major.$age.$revision"
- ;;
-
- freebsd-elf)
-! major=.`expr $current - $age`
-! versuffix="$major.$age.$revision"
- ;;
-
- irix | nonstopux)
-***************
-*** 3564,3570 ****
- fi
- else
- eval flag=\"$hardcode_libdir_flag_spec\"
-! dep_rpath="$dep_rpath $flag"
- fi
- elif test -n "$runpath_var"; then
- case "$perm_rpath " in
---- 3573,3580 ----
- fi
- else
- eval flag=\"$hardcode_libdir_flag_spec\"
-! # what the ...
-! # dep_rpath="$dep_rpath $flag"
- fi
- elif test -n "$runpath_var"; then
- case "$perm_rpath " in
-*** misc/xmlsec1-1.2.6/src/bn.c Mon Jun 21 20:33:27 2004
---- misc/build/xmlsec1-1.2.6/src/bn.c Fri May 11 14:47:19 2007
-***************
-*** 170,177 ****
- */
- int
- xmlSecBnFromString(xmlSecBnPtr bn, const xmlChar* str, xmlSecSize base) {
-! xmlSecSize i, len;
- xmlSecByte ch;
- int nn;
- int ret;
-
---- 170,179 ----
- */
- int
- xmlSecBnFromString(xmlSecBnPtr bn, const xmlChar* str, xmlSecSize base) {
-! xmlSecSize i, len, size;
- xmlSecByte ch;
-+ xmlSecByte* data;
-+ int positive;
- int nn;
- int ret;
-
-***************
-*** 183,189 ****
- /* trivial case */
- len = xmlStrlen(str);
- if(len == 0) {
-! return(0);
- }
-
- /* The result size could not exceed the input string length
---- 185,191 ----
- /* trivial case */
- len = xmlStrlen(str);
- if(len == 0) {
-! return(0);
- }
-
- /* The result size could not exceed the input string length
-***************
-*** 191,244 ****
- * In truth, it would be likely less than 1/2 input string length
- * because each byte is represented by 2 chars. If needed,
- * buffer size would be increased by Mul/Add functions.
- */
-! ret = xmlSecBufferSetMaxSize(bn, xmlSecBufferGetSize(bn) + len / 2 + 1);
- if(ret < 0) {
-! xmlSecError(XMLSEC_ERRORS_HERE,
-! NULL,
-! "xmlSecBnRevLookupTable",
-! XMLSEC_ERRORS_R_XMLSEC_FAILED,
-! "size=%d", len / 2 + 1);
-! return (-1);
- }
-
-! for(i = 0; i < len; i++) {
-! ch = str[i];
-! if(isspace(ch)) {
-! continue;
-! }
-!
-! xmlSecAssert2(ch <= sizeof(xmlSecBnLookupTable), -1);
-! nn = xmlSecBnLookupTable[ch];
-! if((nn < 0) || ((xmlSecSize)nn > base)) {
-! xmlSecError(XMLSEC_ERRORS_HERE,
-! NULL,
-! NULL,
-! XMLSEC_ERRORS_R_INVALID_DATA,
-! "char=%c;base=%d",
-! ch, base);
-! return (-1);
-! }
-!
-! ret = xmlSecBnMul(bn, base);
-! if(ret < 0) {
-! xmlSecError(XMLSEC_ERRORS_HERE,
-! NULL,
-! "xmlSecBnMul",
-! XMLSEC_ERRORS_R_XMLSEC_FAILED,
-! "base=%d", base);
-! return (-1);
-! }
-!
-! ret = xmlSecBnAdd(bn, nn);
-! if(ret < 0) {
-! xmlSecError(XMLSEC_ERRORS_HERE,
-! NULL,
-! "xmlSecBnAdd",
-! XMLSEC_ERRORS_R_XMLSEC_FAILED,
-! "base=%d", base);
-! return (-1);
-! }
- }
-
- return(0);
---- 193,323 ----
- * In truth, it would be likely less than 1/2 input string length
- * because each byte is represented by 2 chars. If needed,
- * buffer size would be increased by Mul/Add functions.
-+ * Finally, we can add one byte for 00 or 10 prefix.
- */
-! ret = xmlSecBufferSetMaxSize(bn, xmlSecBufferGetSize(bn) + len / 2 + 1 + 1);
- if(ret < 0) {
-! xmlSecError(XMLSEC_ERRORS_HERE,
-! NULL,
-! "xmlSecBnRevLookupTable",
-! XMLSEC_ERRORS_R_XMLSEC_FAILED,
-! "size=%d", len / 2 + 1);
-! return (-1);
-! }
-!
-! /* figure out if it is positive or negative number */
-! positive = 1;
-! i = 0;
-! while(i < len) {
-! ch = str[i++];
-!
-! /* skip spaces */
-! if(isspace(ch)) {
-! continue;
-! }
-!
-! /* check if it is + or - */
-! if(ch == '+') {
-! positive = 1;
-! break;
-! } else if(ch == '-') {
-! positive = 0;
-! break;
-! }
-!
-! /* otherwise, it must be start of the number */
-! nn = xmlSecBnLookupTable[ch];
-! if((nn >= 0) && ((xmlSecSize)nn < base)) {
-! xmlSecAssert2(i > 0, -1);
-!
-! /* no sign, positive by default */
-! positive = 1;
-! --i; /* make sure that we will look at this character in next loop */
-! break;
-! } else {
-! xmlSecError(XMLSEC_ERRORS_HERE,
-! NULL,
-! NULL,
-! XMLSEC_ERRORS_R_INVALID_DATA,
-! "char=%c;base=%d",
-! ch, base);
-! return (-1);
-! }
-! }
-!
-! /* now parse the number itself */
-! while(i < len) {
-! ch = str[i++];
-! if(isspace(ch)) {
-! continue;
-! }
-!
-! xmlSecAssert2(ch <= sizeof(xmlSecBnLookupTable), -1);
-! nn = xmlSecBnLookupTable[ch];
-! if((nn < 0) || ((xmlSecSize)nn > base)) {
-! xmlSecError(XMLSEC_ERRORS_HERE,
-! NULL,
-! NULL,
-! XMLSEC_ERRORS_R_INVALID_DATA,
-! "char=%c;base=%d",
-! ch, base);
-! return (-1);
-! }
-!
-! ret = xmlSecBnMul(bn, base);
-! if(ret < 0) {
-! xmlSecError(XMLSEC_ERRORS_HERE,
-! NULL,
-! "xmlSecBnMul",
-! XMLSEC_ERRORS_R_XMLSEC_FAILED,
-! "base=%d", base);
-! return (-1);
-! }
-!
-! ret = xmlSecBnAdd(bn, nn);
-! if(ret < 0) {
-! xmlSecError(XMLSEC_ERRORS_HERE,
-! NULL,
-! "xmlSecBnAdd",
-! XMLSEC_ERRORS_R_XMLSEC_FAILED,
-! "base=%d", base);
-! return (-1);
-! }
- }
-
-! /* check if we need to add 00 prefix */
-! data = xmlSecBufferGetData(bn);
-! size = xmlSecBufferGetSize(bn);
-! if((size > 0 && data[0] > 127)||(size==0)) {
-! ch = 0;
-! ret = xmlSecBufferPrepend(bn, &ch, 1);
-! if(ret < 0) {
-! xmlSecError(XMLSEC_ERRORS_HERE,
-! NULL,
-! "xmlSecBufferPrepend",
-! XMLSEC_ERRORS_R_XMLSEC_FAILED,
-! "base=%d", base);
-! return (-1);
-! }
-! }
-!
-! /* do 2's compliment and add 1 to represent negative value */
-! if(positive == 0) {
-! data = xmlSecBufferGetData(bn);
-! size = xmlSecBufferGetSize(bn);
-! for(i = 0; i < size; ++i) {
-! data[i] ^= 0xFF;
-! }
-!
-! ret = xmlSecBnAdd(bn, 1);
-! if(ret < 0) {
-! xmlSecError(XMLSEC_ERRORS_HERE,
-! NULL,
-! "xmlSecBnAdd",
-! XMLSEC_ERRORS_R_XMLSEC_FAILED,
-! "base=%d", base);
-! return (-1);
-! }
- }
-
- return(0);
-***************
-*** 256,263 ****
- */
- xmlChar*
- xmlSecBnToString(xmlSecBnPtr bn, xmlSecSize base) {
- xmlChar* res;
-! xmlSecSize i, len;
- int nn;
- xmlChar ch;
-
---- 335,346 ----
- */
- xmlChar*
- xmlSecBnToString(xmlSecBnPtr bn, xmlSecSize base) {
-+ xmlSecBn bn2;
-+ int positive = 1;
- xmlChar* res;
-! xmlSecSize i, len, size;
-! xmlSecByte* data;
-! int ret;
- int nn;
- xmlChar ch;
-
-***************
-*** 265,299 ****
- xmlSecAssert2(base > 1, NULL);
- xmlSecAssert2(base <= sizeof(xmlSecBnRevLookupTable), NULL);
-
- /* Result string len is
- * len = log base (256) * <bn size>
- * Since the smallest base == 2 then we can get away with
- * len = 8 * <bn size>
- */
-! len = 8 * xmlSecBufferGetSize(bn) + 1;
- res = (xmlChar*)xmlMalloc(len + 1);
- if(res == NULL) {
-! xmlSecError(XMLSEC_ERRORS_HERE,
-! NULL,
-! NULL,
-! XMLSEC_ERRORS_R_MALLOC_FAILED,
-! "len=%d", len);
-! return (NULL);
- }
- memset(res, 0, len + 1);
-
-! for(i = 0; (xmlSecBufferGetSize(bn) > 0) && (i < len); i++) {
-! if(xmlSecBnDiv(bn, base, &nn) < 0) {
-! xmlSecError(XMLSEC_ERRORS_HERE,
-! NULL,
-! "xmlSecBnDiv",
-! XMLSEC_ERRORS_R_XMLSEC_FAILED,
-! "base=%d", base);
-! xmlFree(res);
-! return (NULL);
-! }
-! xmlSecAssert2((size_t)nn < sizeof(xmlSecBnRevLookupTable), NULL);
-! res[i] = xmlSecBnRevLookupTable[nn];
- }
- xmlSecAssert2(i < len, NULL);
-
---- 348,433 ----
- xmlSecAssert2(base > 1, NULL);
- xmlSecAssert2(base <= sizeof(xmlSecBnRevLookupTable), NULL);
-
-+
-+ /* copy bn */
-+ data = xmlSecBufferGetData(bn);
-+ size = xmlSecBufferGetSize(bn);
-+ ret = xmlSecBnInitialize(&bn2, size);
-+ if(ret < 0) {
-+ xmlSecError(XMLSEC_ERRORS_HERE,
-+ NULL,
-+ "xmlSecBnCreate",
-+ XMLSEC_ERRORS_R_XMLSEC_FAILED,
-+ "size=%d", size);
-+ return (NULL);
-+ }
-+
-+ ret = xmlSecBnSetData(&bn2, data, size);
-+ if(ret < 0) {
-+ xmlSecError(XMLSEC_ERRORS_HERE,
-+ NULL,
-+ "xmlSecBnSetData",
-+ XMLSEC_ERRORS_R_XMLSEC_FAILED,
-+ "size=%d", size);
-+ xmlSecBnFinalize(&bn2);
-+ return (NULL);
-+ }
-+
-+ /* check if it is a negative number or not */
-+ data = xmlSecBufferGetData(&bn2);
-+ size = xmlSecBufferGetSize(&bn2);
-+ if((size > 0) && (data[0] > 127)) {
-+ /* subtract 1 and do 2's compliment */
-+ ret = xmlSecBnAdd(&bn2, -1);
-+ if(ret < 0) {
-+ xmlSecError(XMLSEC_ERRORS_HERE,
-+ NULL,
-+ "xmlSecBnAdd",
-+ XMLSEC_ERRORS_R_XMLSEC_FAILED,
-+ "size=%d", size);
-+ xmlSecBnFinalize(&bn2);
-+ return (NULL);
-+ }
-+ for(i = 0; i < size; ++i) {
-+ data[i] ^= 0xFF;
-+ }
-+
-+ positive = 0;
-+ } else {
-+ positive = 1;
-+ }
-+
- /* Result string len is
- * len = log base (256) * <bn size>
- * Since the smallest base == 2 then we can get away with
- * len = 8 * <bn size>
- */
-! len = 8 * size + 1 + 1;
- res = (xmlChar*)xmlMalloc(len + 1);
- if(res == NULL) {
-! xmlSecError(XMLSEC_ERRORS_HERE,
-! NULL,
-! NULL,
-! XMLSEC_ERRORS_R_MALLOC_FAILED,
-! "len=%d", len);
-! xmlSecBnFinalize(&bn2);
-! return (NULL);
- }
- memset(res, 0, len + 1);
-
-! for(i = 0; (xmlSecBufferGetSize(&bn2) > 0) && (i < len); i++) {
-! if(xmlSecBnDiv(&bn2, base, &nn) < 0) {
-! xmlSecError(XMLSEC_ERRORS_HERE,
-! NULL,
-! "xmlSecBnDiv",
-! XMLSEC_ERRORS_R_XMLSEC_FAILED,
-! "base=%d", base);
-! xmlFree(res);
-! xmlSecBnFinalize(&bn2);
-! return (NULL);
-! }
-! xmlSecAssert2((size_t)nn < sizeof(xmlSecBnRevLookupTable), NULL);
-! res[i] = xmlSecBnRevLookupTable[nn];
- }
- xmlSecAssert2(i < len, NULL);
-
-***************
-*** 301,313 ****
- for(len = i; (len > 1) && (res[len - 1] == '0'); len--);
- res[len] = '\0';
-
- /* swap the string because we wrote it in reverse order */
- for(i = 0; i < len / 2; i++) {
-! ch = res[i];
-! res[i] = res[len - i - 1];
-! res[len - i - 1] = ch;
- }
-
- return(res);
- }
-
---- 435,454 ----
- for(len = i; (len > 1) && (res[len - 1] == '0'); len--);
- res[len] = '\0';
-
-+ /* add "-" for negative numbers */
-+ if(positive == 0) {
-+ res[len] = '-';
-+ res[++len] = '\0';
-+ }
-+
- /* swap the string because we wrote it in reverse order */
- for(i = 0; i < len / 2; i++) {
-! ch = res[i];
-! res[i] = res[len - i - 1];
-! res[len - i - 1] = ch;
- }
-
-+ xmlSecBnFinalize(&bn2);
- return(res);
- }
-
-***************
-*** 392,398 ****
- }
-
- data = xmlSecBufferGetData(bn);
-! for(over = 0, i = xmlSecBufferGetSize(bn); i > 0;) {
- xmlSecAssert2(data != NULL, -1);
-
- over = over + multiplier * data[--i];
---- 533,541 ----
- }
-
- data = xmlSecBufferGetData(bn);
-! i = xmlSecBufferGetSize(bn);
-! over = 0;
-! while(i > 0) {
- xmlSecAssert2(data != NULL, -1);
-
- over = over + multiplier * data[--i];
-***************
-*** 487,529 ****
- */
- int
- xmlSecBnAdd(xmlSecBnPtr bn, int delta) {
-! int over;
- xmlSecByte* data;
- xmlSecSize i;
- xmlSecByte ch;
- int ret;
-
- xmlSecAssert2(bn != NULL, -1);
-- xmlSecAssert2(delta >= 0, -1);
-
- if(delta == 0) {
-! return(0);
- }
-
- data = xmlSecBufferGetData(bn);
-! for(over = delta, i = xmlSecBufferGetSize(bn); i > 0;) {
-! xmlSecAssert2(data != NULL, -1);
-
-! over += data[--i];
-! data[i] = over % 256;
-! over = over / 256;
-! }
-
-! while(over > 0) {
-! ch = over % 256;
-! over = over / 256;
-
-! ret = xmlSecBufferPrepend(bn, &ch, 1);
-! if(ret < 0) {
-! xmlSecError(XMLSEC_ERRORS_HERE,
-! NULL,
-! "xmlSecBufferPrepend",
-! XMLSEC_ERRORS_R_XMLSEC_FAILED,
-! "size=1");
-! return (-1);
-! }
- }
--
- return(0);
- }
-
---- 630,686 ----
- */
- int
- xmlSecBnAdd(xmlSecBnPtr bn, int delta) {
-! int over, tmp;
- xmlSecByte* data;
- xmlSecSize i;
- xmlSecByte ch;
- int ret;
-
- xmlSecAssert2(bn != NULL, -1);
-
- if(delta == 0) {
-! return(0);
- }
-
- data = xmlSecBufferGetData(bn);
-! if(delta > 0) {
-! for(over = delta, i = xmlSecBufferGetSize(bn); (i > 0) && (over > 0) ;) {
-! xmlSecAssert2(data != NULL, -1);
-
-! tmp = data[--i];
-! over += tmp;
-! data[i] = over % 256;
-! over = over / 256;
-! }
-
-! while(over > 0) {
-! ch = over % 256;
-! over = over / 256;
-
-! ret = xmlSecBufferPrepend(bn, &ch, 1);
-! if(ret < 0) {
-! xmlSecError(XMLSEC_ERRORS_HERE,
-! NULL,
-! "xmlSecBufferPrepend",
-! XMLSEC_ERRORS_R_XMLSEC_FAILED,
-! "size=1");
-! return (-1);
-! }
-! }
-! } else {
-! for(over = -delta, i = xmlSecBufferGetSize(bn); (i > 0) && (over > 0);) {
-! xmlSecAssert2(data != NULL, -1);
-!
-! tmp = data[--i];
-! if(tmp < over) {
-! data[i] = 0;
-! over = (over - tmp) / 256;
-! } else {
-! data[i] = tmp - over;
-! over = 0;
-! }
-! }
- }
- return(0);
- }
-
-***************
-*** 787,793 ****
- }
-
- if(addLineBreaks) {
-! xmlNodeAddContent(cur, BAD_CAST "\n");
- }
-
- switch(format) {
---- 944,950 ----
- }
-
- if(addLineBreaks) {
-! xmlNodeAddContent(cur, xmlSecStringCR);
- }
-
- switch(format) {
-***************
-*** 833,839 ****
- }
-
- if(addLineBreaks) {
-! xmlNodeAddContent(cur, BAD_CAST "\n");
- }
-
- return(0);
---- 990,996 ----
- }
-
- if(addLineBreaks) {
-! xmlNodeAddContent(cur, xmlSecStringCR);
- }
-
- return(0);
-*** misc/xmlsec1-1.2.6/src/dl.c Wed Oct 29 16:57:20 2003
---- misc/build/xmlsec1-1.2.6/src/dl.c Fri May 11 14:47:19 2007
-***************
-*** 329,334 ****
---- 329,338 ----
- xmlSecCryptoDLInit(void) {
- int ret;
-
-+ /* use xmlMalloc/xmlFree */
-+ xmlsec_lt_dlmalloc = xmlSecCryptoDLMalloc;
-+ xmlsec_lt_dlfree = xmlSecCryptoDLFree;
-+
- ret = xmlSecPtrListInitialize(&gXmlSecCryptoDLLibraries, xmlSecCryptoDLLibrariesListGetKlass());
- if(ret < 0) {
- xmlSecError(XMLSEC_ERRORS_HERE,
-***************
-*** 350,358 ****
- }
- /* TODO: LTDL_SET_PRELOADED_SYMBOLS(); */
-
-- /* use xmlMalloc/xmlFree */
-- xmlsec_lt_dlmalloc = xmlSecCryptoDLMalloc;
-- xmlsec_lt_dlfree = xmlSecCryptoDLFree;
- return(0);
- }
-
---- 354,359 ----
-*** misc/xmlsec1-1.2.6/src/mscrypto/Makefile.in Fri May 11 14:47:49 2007
---- misc/build/xmlsec1-1.2.6/src/mscrypto/Makefile.in Fri May 11 14:47:19 2007
-***************
-*** 1 ****
-! dummy
---- 1,178 ----
-! # Makefile.in generated by automake 1.8.3 from Makefile.am.
-! # @configure_input@
-!
-! # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-! # 2003, 2004 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@
-!
-! srcdir = @srcdir@
-! top_srcdir = @top_srcdir@
-! top_builddir = ../..
-! LTLIBRARIES = $(lib_LTLIBRARIES)
-! am__DEPENDENCIES_1 =
-! libxmlsec1_mscrypto_la_DEPENDENCIES = ../libxmlsec1.la \
-! $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
-! $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
-! am__objects_1 =
-! am_libxmlsec1_mscrypto_la_OBJECTS = akmngr.lo app.lo certkeys.lo ciphers.lo crypto.lo \
-! digests.lo keysstore.lo kt_rsa.lo signatures.lo symkeys.lo \
-! x509.lo x509vfy.lo $(am__objects_1)
-! libxmlsec1_mscrypto_la_OBJECTS = $(am_libxmlsec1_mscrypto_la_OBJECTS)
-! DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)
-! depcomp = $(SHELL) $(top_srcdir)/depcomp
-! @AMDEP_TRUE@DEP_FILES = ./$(DEPDIR)/app.Plo ./$(DEPDIR)/certkeys.Plo \
-! @AMDEP_TRUE@ ./$(DEPDIR)/ciphers.Plo ./$(DEPDIR)/crypto.Plo \
-! @AMDEP_TRUE@ ./$(DEPDIR)/digests.Plo ./$(DEPDIR)/keysstore.Plo \
-! @AMDEP_TRUE@ ./$(DEPDIR)/kt_rsa.Plo ./$(DEPDIR)/signatures.Plo \
-! @AMDEP_TRUE@ ./$(DEPDIR)/symkeys.Plo ./$(DEPDIR)/x509.Plo \
-! @AMDEP_TRUE@ ./$(DEPDIR)/x509vfy.Plo ./$(DEPDIR)/akmngr.Plo
-! COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
-! $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-! LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) \
-! $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
-! $(AM_CFLAGS) $(CFLAGS)
-! CCLD = $(CC)
-! LINK = $(LIBTOOL) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
-! $(AM_LDFLAGS) $(LDFLAGS) -o $@
-! CC = @CC@
-! CCDEPMODE = @CCDEPMODE@
-! CFLAGS = @CFLAGS@
-! CPPFLAGS = @CPPFLAGS@
-! CYGPATH_W = @CYGPATH_W@
-! DEFS = @DEFS@
-! DEPDIR = @DEPDIR@
-! LDFLAGS = @LDFLAGS@
-! LIBS = @LIBS@
-! LIBTOOL = @LIBTOOL@
-! LIBXML_CFLAGS = @LIBXML_CFLAGS@
-! LIBXML_LIBS = @LIBXML_LIBS@
-! MSCRYPTO_CFLAGS = @MSCRYPTO_CFLAGS@
-! MSCRYPTO_LIBS = @MSCRYPTO_LIBS@
-! OBJEXT = @OBJEXT@
-! SHELL = @SHELL@
-! XMLSEC_DEFINES = @XMLSEC_DEFINES@
-! exec_prefix = @exec_prefix@
-! libdir = @libdir@
-! prefix = @prefix@
-! NULL =
-!
-! INCLUDES = \
-! -DPACKAGE=\"@PACKAGE@\" \
-! -I$(top_srcdir) \
-! -I$(top_srcdir)/include \
-! $(XMLSEC_DEFINES) \
-! $(MSCRYPTO_CFLAGS) \
-! $(LIBXSLT_CFLAGS) \
-! $(LIBXML_CFLAGS) \
-! $(NULL)
-!
-! lib_LTLIBRARIES = \
-! libxmlsec1-mscrypto.la \
-! $(NULL)
-!
-! libxmlsec1_mscrypto_la_LIBADD = \
-! ../libxmlsec1.la \
-! $(MSCRYPTO_LIBS) \
-! $(LIBXSLT_LIBS) \
-! $(LIBXML_LIBS) \
-! $(NULL)
-!
-! libxmlsec1_mscrypto_la_LDFLAGS = \
-! -version-info @XMLSEC_VERSION_INFO@ \
-! $(NULL)
-!
-! all: all-am
-!
-! .SUFFIXES:
-! .SUFFIXES: .c .lo .o .obj
-!
-! clean-libLTLIBRARIES:
-! -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES)
-! @list='$(lib_LTLIBRARIES)'; for p in $$list; do \
-! dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
-! test "$$dir" = "$$p" && dir=.; \
-! echo "rm -f \"$${dir}/so_locations\""; \
-! rm -f "$${dir}/so_locations"; \
-! done
-! libxmlsec1-mscrypto.la: $(libxmlsec1_mscrypto_la_OBJECTS) $(libxmlsec1_mscrypto_la_DEPENDENCIES)
-! $(LINK) -rpath $(libdir) $(libxmlsec1_mscrypto_la_LDFLAGS) $(libxmlsec1_mscrypto_la_OBJECTS) $(libxmlsec1_mscrypto_la_LIBADD) $(LIBS)
-!
-! mostlyclean-compile:
-! -rm -f *.$(OBJEXT)
-!
-! @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/akmngr.Plo@am__quote@
-! @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/app.Plo@am__quote@
-! @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/certkeys.Plo@am__quote@
-! @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ciphers.Plo@am__quote@
-! @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/crypto.Plo@am__quote@
-! @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/digests.Plo@am__quote@
-! @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/keysstore.Plo@am__quote@
-! @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/kt_rsa.Plo@am__quote@
-! @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/signatures.Plo@am__quote@
-! @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/symkeys.Plo@am__quote@
-! @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/x509.Plo@am__quote@
-! @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/x509vfy.Plo@am__quote@
-!
-! .c.o:
-! @am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
-! @am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
-! @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
-! @AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@
-! @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-! @am__fastdepCC_FALSE@ $(COMPILE) -c $<
-!
-! .c.obj:
-! @am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \
-! @am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
-! @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
-! @AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@
-! @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-! @am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
-!
-! .c.lo:
-! @am__fastdepCC_TRUE@ if $(LTCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
-! @am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
-! @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
-! @AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='$(DEPDIR)/$*.Plo' tmpdepfile='$(DEPDIR)/$*.TPlo' @AMDEPBACKSLASH@
-! @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-! @am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
-!
-! mostlyclean-libtool:
-! -rm -f *.lo
-!
-! clean-libtool:
-! -rm -rf .libs _libs
-!
-! all-am: Makefile $(LTLIBRARIES)
-!
-! mostlyclean-generic:
-!
-! clean-generic:
-!
-! clean: clean-am
-!
-! clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \
-! mostlyclean-am
-!
-! mostlyclean: mostlyclean-am
-!
-! mostlyclean-am: mostlyclean-compile mostlyclean-generic \
-! mostlyclean-libtool
-!
-! .PHONY: all all-am clean clean-generic \
-! clean-libLTLIBRARIES clean-libtool \
-! maintainer-clean-generic mostlyclean mostlyclean-compile \
-! mostlyclean-generic mostlyclean-libtool
-!
-! # 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:
-*** misc/xmlsec1-1.2.6/src/mscrypto/akmngr.c Fri May 11 14:47:44 2007
---- misc/build/xmlsec1-1.2.6/src/mscrypto/akmngr.c Fri May 11 14:47:19 2007
-***************
-*** 1 ****
-! dummy
---- 1,235 ----
-! /**
-! * XMLSec library
-! *
-! * This is free software; see Copyright file in the source
-! * distribution for preciese wording.
-! *
-! * Copyright.........................
-! */
-! #include "globals.h"
-!
-! #include <xmlsec/xmlsec.h>
-! #include <xmlsec/keys.h>
-! #include <xmlsec/transforms.h>
-! #include <xmlsec/errors.h>
-!
-! #include <xmlsec/mscrypto/crypto.h>
-! #include <xmlsec/mscrypto/keysstore.h>
-! #include <xmlsec/mscrypto/akmngr.h>
-! #include <xmlsec/mscrypto/x509.h>
-!
-! /**
-! * xmlSecMSCryptoAppliedKeysMngrCreate:
-! * @hKeyStore: the pointer to key store.
-! * @hCertStore: the pointer to certificate database.
-! *
-! * Create and load key store and certificate database into keys manager
-! *
-! * Returns keys manager pointer on success or NULL otherwise.
-! */
-! xmlSecKeysMngrPtr
-! xmlSecMSCryptoAppliedKeysMngrCreate(
-! HCERTSTORE hKeyStore ,
-! HCERTSTORE hCertStore
-! ) {
-! xmlSecKeyDataStorePtr certStore = NULL ;
-! xmlSecKeysMngrPtr keyMngr = NULL ;
-! xmlSecKeyStorePtr keyStore = NULL ;
-!
-! keyStore = xmlSecKeyStoreCreate( xmlSecMSCryptoKeysStoreId ) ;
-! if( keyStore == NULL ) {
-! xmlSecError( XMLSEC_ERRORS_HERE ,
-! NULL ,
-! "xmlSecKeyStoreCreate" ,
-! XMLSEC_ERRORS_R_XMLSEC_FAILED ,
-! XMLSEC_ERRORS_NO_MESSAGE ) ;
-! return NULL ;
-! }
-!
-! /*-
-! * At present, MS Crypto engine do not provide a way to setup a key store.
-! */
-! if( keyStore != NULL ) {
-! /*TODO: binding key store.*/
-! }
-!
-! keyMngr = xmlSecKeysMngrCreate() ;
-! if( keyMngr == NULL ) {
-! xmlSecError( XMLSEC_ERRORS_HERE ,
-! NULL ,
-! "xmlSecKeysMngrCreate" ,
-! XMLSEC_ERRORS_R_XMLSEC_FAILED ,
-! XMLSEC_ERRORS_NO_MESSAGE ) ;
-!
-! xmlSecKeyStoreDestroy( keyStore ) ;
-! return NULL ;
-! }
-!
-! /*-
-! * Add key store to manager, from now on keys manager destroys the store if
-! * needed
-! */
-! if( xmlSecKeysMngrAdoptKeysStore( keyMngr, keyStore ) < 0 ) {
-! xmlSecError( XMLSEC_ERRORS_HERE ,
-! xmlSecErrorsSafeString( xmlSecKeyStoreGetName( keyStore ) ) ,
-! "xmlSecKeysMngrAdoptKeyStore" ,
-! XMLSEC_ERRORS_R_XMLSEC_FAILED ,
-! XMLSEC_ERRORS_NO_MESSAGE ) ;
-!
-! xmlSecKeyStoreDestroy( keyStore ) ;
-! xmlSecKeysMngrDestroy( keyMngr ) ;
-! return NULL ;
-! }
-!
-! /*-
-! * Initialize crypto library specific data in keys manager
-! */
-! if( xmlSecMSCryptoKeysMngrInit( keyMngr ) < 0 ) {
-! xmlSecError( XMLSEC_ERRORS_HERE ,
-! NULL ,
-! "xmlSecMSCryptoKeysMngrInit" ,
-! XMLSEC_ERRORS_R_XMLSEC_FAILED ,
-! XMLSEC_ERRORS_NO_MESSAGE ) ;
-!
-! xmlSecKeysMngrDestroy( keyMngr ) ;
-! return NULL ;
-! }
-!
-! /*-
-! * Set certificate databse to X509 key data store
-! */
-! /*-
-! * At present, MS Crypto engine do not provide a way to setup a cert store.
-! */
-!
-! /*-
-! * Set the getKey callback
-! */
-! keyMngr->getKey = xmlSecKeysMngrGetKey ;
-!
-! return keyMngr ;
-! }
-!
-! int
-! xmlSecMSCryptoAppliedKeysMngrSymKeyLoad(
-! xmlSecKeysMngrPtr mngr ,
-! HCRYPTKEY symKey
-! ) {
-! /*TODO: import the key into keys manager.*/
-! return(0) ;
-! }
-!
-! int
-! xmlSecMSCryptoAppliedKeysMngrPubKeyLoad(
-! xmlSecKeysMngrPtr mngr ,
-! HCRYPTKEY pubKey
-! ) {
-! /*TODO: import the key into keys manager.*/
-! return(0) ;
-! }
-!
-! int
-! xmlSecMSCryptoAppliedKeysMngrPriKeyLoad(
-! xmlSecKeysMngrPtr mngr ,
-! HCRYPTKEY priKey
-! ) {
-! /*TODO: import the key into keys manager.*/
-! return(0) ;
-! }
-!
-! int
-! xmlSecMSCryptoAppliedKeysMngrAdoptKeyStore (
-! xmlSecKeysMngrPtr mngr ,
-! HCERTSTORE keyStore
-! ) {
-! xmlSecKeyDataStorePtr x509Store ;
-!
-! xmlSecAssert2( mngr != NULL, -1 ) ;
-! xmlSecAssert2( keyStore != NULL, -1 ) ;
-!
-! x509Store = xmlSecKeysMngrGetDataStore( mngr, xmlSecMSCryptoX509StoreId ) ;
-! if( x509Store == NULL ) {
-! xmlSecError( XMLSEC_ERRORS_HERE ,
-! NULL ,
-! "xmlSecKeysMngrGetDataStore" ,
-! XMLSEC_ERRORS_R_XMLSEC_FAILED ,
-! XMLSEC_ERRORS_NO_MESSAGE ) ;
-! return( -1 ) ;
-! }
-!
-! if( xmlSecMSCryptoX509StoreAdoptKeyStore( x509Store, keyStore ) < 0 ) {
-! xmlSecError( XMLSEC_ERRORS_HERE ,
-! xmlSecErrorsSafeString( xmlSecKeyDataStoreGetName( x509Store ) ) ,
-! "xmlSecMSCryptoX509StoreAdoptKeyStore" ,
-! XMLSEC_ERRORS_R_XMLSEC_FAILED ,
-! XMLSEC_ERRORS_NO_MESSAGE ) ;
-! return( -1 ) ;
-! }
-!
-! return( 0 ) ;
-! }
-!
-! int
-! xmlSecMSCryptoAppliedKeysMngrAdoptTrustedStore (
-! xmlSecKeysMngrPtr mngr ,
-! HCERTSTORE trustedStore
-! ) {
-! xmlSecKeyDataStorePtr x509Store ;
-!
-! xmlSecAssert2( mngr != NULL, -1 ) ;
-! xmlSecAssert2( trustedStore != NULL, -1 ) ;
-!
-! x509Store = xmlSecKeysMngrGetDataStore( mngr, xmlSecMSCryptoX509StoreId ) ;
-! if( x509Store == NULL ) {
-! xmlSecError( XMLSEC_ERRORS_HERE ,
-! NULL ,
-! "xmlSecKeysMngrGetDataStore" ,
-! XMLSEC_ERRORS_R_XMLSEC_FAILED ,
-! XMLSEC_ERRORS_NO_MESSAGE ) ;
-! return( -1 ) ;
-! }
-!
-! if( xmlSecMSCryptoX509StoreAdoptTrustedStore( x509Store, trustedStore ) < 0 ) {
-! xmlSecError( XMLSEC_ERRORS_HERE ,
-! xmlSecErrorsSafeString( xmlSecKeyDataStoreGetName( x509Store ) ) ,
-! "xmlSecMSCryptoX509StoreAdoptKeyStore" ,
-! XMLSEC_ERRORS_R_XMLSEC_FAILED ,
-! XMLSEC_ERRORS_NO_MESSAGE ) ;
-! return( -1 ) ;
-! }
-!
-! return( 0 ) ;
-! }
-!
-! int
-! xmlSecMSCryptoAppliedKeysMngrAdoptUntrustedStore (
-! xmlSecKeysMngrPtr mngr ,
-! HCERTSTORE untrustedStore
-! ) {
-! xmlSecKeyDataStorePtr x509Store ;
-!
-! xmlSecAssert2( mngr != NULL, -1 ) ;
-! xmlSecAssert2( untrustedStore != NULL, -1 ) ;
-!
-! x509Store = xmlSecKeysMngrGetDataStore( mngr, xmlSecMSCryptoX509StoreId ) ;
-! if( x509Store == NULL ) {
-! xmlSecError( XMLSEC_ERRORS_HERE ,
-! NULL ,
-! "xmlSecKeysMngrGetDataStore" ,
-! XMLSEC_ERRORS_R_XMLSEC_FAILED ,
-! XMLSEC_ERRORS_NO_MESSAGE ) ;
-! return( -1 ) ;
-! }
-!
-! if( xmlSecMSCryptoX509StoreAdoptUntrustedStore( x509Store, untrustedStore ) < 0 ) {
-! xmlSecError( XMLSEC_ERRORS_HERE ,
-! xmlSecErrorsSafeString( xmlSecKeyDataStoreGetName( x509Store ) ) ,
-! "xmlSecMSCryptoX509StoreAdoptKeyStore" ,
-! XMLSEC_ERRORS_R_XMLSEC_FAILED ,
-! XMLSEC_ERRORS_NO_MESSAGE ) ;
-! return( -1 ) ;
-! }
-!
-! return( 0 ) ;
-! }
-!
-*** misc/xmlsec1-1.2.6/src/mscrypto/certkeys.c Wed Mar 17 06:06:43 2004
---- misc/build/xmlsec1-1.2.6/src/mscrypto/certkeys.c Fri May 11 14:47:19 2007
-***************
-*** 41,46 ****
---- 41,47 ----
- * a public key from xml document is provided, we need HCRYPTKEY.... The focus
- * now is however directed to certificates. Wouter
- */
-+ /** replaced by a wrapper style for WINNT 4.0
- struct _xmlSecMSCryptoKeyDataCtx {
- HCRYPTPROV hProv;
- BOOL fCallerFreeProv;
-***************
-*** 51,56 ****
---- 52,175 ----
- HCRYPTKEY hKey;
- xmlSecKeyDataType type;
- };
++ esac
++
++ case $ac_option in
++ # Handling of the options.
++_ACEOF
++cat >>$CONFIG_STATUS <<\_ACEOF
++ -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
++ ac_cs_recheck=: ;;
++ --version | --vers* | -V )
++ echo "$ac_cs_version"; exit 0 ;;
++ --he | --h)
++ # Conflict between --help and --header
++ { { echo "$as_me:$LINENO: error: ambiguous option: $1
++Try \`$0 --help' for more information." >&5
++echo "$as_me: error: ambiguous option: $1
++Try \`$0 --help' for more information." >&2;}
++ { (exit 1); exit 1; }; };;
++ --help | --hel | -h )
++ echo "$ac_cs_usage"; exit 0 ;;
++ --debug | --d* | -d )
++ debug=: ;;
++ --file | --fil | --fi | --f )
++ $ac_shift
++ CONFIG_FILES="$CONFIG_FILES $ac_optarg"
++ ac_need_defaults=false;;
++ --header | --heade | --head | --hea )
++ $ac_shift
++ CONFIG_HEADERS="$CONFIG_HEADERS $ac_optarg"
++ ac_need_defaults=false;;
++ -q | -quiet | --quiet | --quie | --qui | --qu | --q \
++ | -silent | --silent | --silen | --sile | --sil | --si | --s)
++ ac_cs_silent=: ;;
++
++ # This is an error.
++ -*) { { echo "$as_me:$LINENO: error: unrecognized option: $1
++Try \`$0 --help' for more information." >&5
++echo "$as_me: error: unrecognized option: $1
++Try \`$0 --help' for more information." >&2;}
++ { (exit 1); exit 1; }; } ;;
++
++ *) ac_config_targets="$ac_config_targets $1" ;;
++
++ esac
++ shift
++done
++
++ac_configure_extra_args=
++
++if $ac_cs_silent; then
++ exec 6>/dev/null
++ ac_configure_extra_args="$ac_configure_extra_args --silent"
++fi
++
++_ACEOF
++cat >>$CONFIG_STATUS <<_ACEOF
++if \$ac_cs_recheck; then
++ echo "running $SHELL $0 " $ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6
++ exec $SHELL $0 $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
++fi
++
++_ACEOF
++
++cat >>$CONFIG_STATUS <<_ACEOF
++#
++# INIT-COMMANDS section.
++#
++
++AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"
++
++_ACEOF
++
++
++
++cat >>$CONFIG_STATUS <<\_ACEOF
++for ac_config_target in $ac_config_targets
++do
++ case "$ac_config_target" in
++ # Handling of arguments.
++ "include/xmlsec/version.h" ) CONFIG_FILES="$CONFIG_FILES include/xmlsec/version.h" ;;
++ "Makefile" ) CONFIG_FILES="$CONFIG_FILES Makefile" ;;
++ "include/Makefile" ) CONFIG_FILES="$CONFIG_FILES include/Makefile" ;;
++ "include/xmlsec/Makefile" ) CONFIG_FILES="$CONFIG_FILES include/xmlsec/Makefile" ;;
++ "include/xmlsec/private/Makefile" ) CONFIG_FILES="$CONFIG_FILES include/xmlsec/private/Makefile" ;;
++ "src/Makefile" ) CONFIG_FILES="$CONFIG_FILES src/Makefile" ;;
++ "apps/Makefile" ) CONFIG_FILES="$CONFIG_FILES apps/Makefile" ;;
++ "docs/Makefile" ) CONFIG_FILES="$CONFIG_FILES docs/Makefile" ;;
++ "docs/api/Makefile" ) CONFIG_FILES="$CONFIG_FILES docs/api/Makefile" ;;
++ "man/Makefile" ) CONFIG_FILES="$CONFIG_FILES man/Makefile" ;;
++ "xmlsec1Conf.sh" ) CONFIG_FILES="$CONFIG_FILES xmlsec1Conf.sh:xmlsecConf.sh.in" ;;
++ "xmlsec1-config" ) CONFIG_FILES="$CONFIG_FILES xmlsec1-config:xmlsec-config.in" ;;
++ "xmlsec1-openssl.pc" ) CONFIG_FILES="$CONFIG_FILES xmlsec1-openssl.pc:xmlsec-openssl.pc.in" ;;
++ "xmlsec1-gnutls.pc" ) CONFIG_FILES="$CONFIG_FILES xmlsec1-gnutls.pc:xmlsec-gnutls.pc.in" ;;
++ "xmlsec1-nss.pc" ) CONFIG_FILES="$CONFIG_FILES xmlsec1-nss.pc:xmlsec-nss.pc.in" ;;
++ "xmlsec1.spec" ) CONFIG_FILES="$CONFIG_FILES xmlsec1.spec:xmlsec.spec.in" ;;
++ "include/xmlsec/openssl/Makefile" ) CONFIG_FILES="$CONFIG_FILES include/xmlsec/openssl/Makefile" ;;
++ "src/openssl/Makefile" ) CONFIG_FILES="$CONFIG_FILES src/openssl/Makefile" ;;
++ "include/xmlsec/gnutls/Makefile" ) CONFIG_FILES="$CONFIG_FILES include/xmlsec/gnutls/Makefile" ;;
++ "src/gnutls/Makefile" ) CONFIG_FILES="$CONFIG_FILES src/gnutls/Makefile" ;;
++ "include/xmlsec/nss/Makefile" ) CONFIG_FILES="$CONFIG_FILES include/xmlsec/nss/Makefile" ;;
++ "src/nss/Makefile" ) CONFIG_FILES="$CONFIG_FILES src/nss/Makefile" ;;
++ "include/xmlsec/mscrypto/Makefile" ) CONFIG_FILES="$CONFIG_FILES include/xmlsec/mscrypto/Makefile" ;;
++ "src/mscrypto/Makefile" ) CONFIG_FILES="$CONFIG_FILES src/mscrypto/Makefile" ;;
++ "depfiles" ) CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;;
++ "config.h" ) CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;;
++ *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5
++echo "$as_me: error: invalid argument: $ac_config_target" >&2;}
++ { (exit 1); exit 1; }; };;
++ esac
++done
++
++# If the user did not use the arguments to specify the items to instantiate,
++# then the envvar interface is used. Set only those that are not.
++# We use the long form for the default assignment because of an extremely
++# bizarre bug on SunOS 4.1.3.
++if $ac_need_defaults; then
++ test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files
++ test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers
++ test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands
++fi
++
++# Have a temporary directory for convenience. Make it in the build tree
++# simply because there is no reason to put it here, and in addition,
++# creating and moving files from /tmp can sometimes cause problems.
++# Create a temporary directory, and hook for its removal unless debugging.
++$debug ||
++{
++ trap 'exit_status=$?; rm -rf $tmp && exit $exit_status' 0
++ trap '{ (exit 1); exit 1; }' 1 2 13 15
++}
++
++# Create a (secure) tmp directory for tmp files.
++
++{
++ tmp=`(umask 077 && mktemp -d -q "./confstatXXXXXX") 2>/dev/null` &&
++ test -n "$tmp" && test -d "$tmp"
++} ||
++{
++ tmp=./confstat$$-$RANDOM
++ (umask 077 && mkdir $tmp)
++} ||
++{
++ echo "$me: cannot create a temporary directory in ." >&2
++ { (exit 1); exit 1; }
++}
++
++_ACEOF
++
++cat >>$CONFIG_STATUS <<_ACEOF
++
++#
++# CONFIG_FILES section.
++#
++
++# No need to generate the scripts if there are no CONFIG_FILES.
++# This happens for instance when ./config.status config.h
++if test -n "\$CONFIG_FILES"; then
++ # Protect against being on the right side of a sed subst in config.status.
++ sed 's/,@/@@/; s/@,/@@/; s/,;t t\$/@;t t/; /@;t t\$/s/[\\\\&,]/\\\\&/g;
++ s/@@/,@/; s/@@/@,/; s/@;t t\$/,;t t/' >\$tmp/subs.sed <<\\CEOF
++s,@SHELL@,$SHELL,;t t
++s,@PATH_SEPARATOR@,$PATH_SEPARATOR,;t t
++s,@PACKAGE_NAME@,$PACKAGE_NAME,;t t
++s,@PACKAGE_TARNAME@,$PACKAGE_TARNAME,;t t
++s,@PACKAGE_VERSION@,$PACKAGE_VERSION,;t t
++s,@PACKAGE_STRING@,$PACKAGE_STRING,;t t
++s,@PACKAGE_BUGREPORT@,$PACKAGE_BUGREPORT,;t t
++s,@exec_prefix@,$exec_prefix,;t t
++s,@prefix@,$prefix,;t t
++s,@program_transform_name@,$program_transform_name,;t t
++s,@bindir@,$bindir,;t t
++s,@sbindir@,$sbindir,;t t
++s,@libexecdir@,$libexecdir,;t t
++s,@datadir@,$datadir,;t t
++s,@sysconfdir@,$sysconfdir,;t t
++s,@sharedstatedir@,$sharedstatedir,;t t
++s,@localstatedir@,$localstatedir,;t t
++s,@libdir@,$libdir,;t t
++s,@includedir@,$includedir,;t t
++s,@oldincludedir@,$oldincludedir,;t t
++s,@infodir@,$infodir,;t t
++s,@mandir@,$mandir,;t t
++s,@build_alias@,$build_alias,;t t
++s,@host_alias@,$host_alias,;t t
++s,@target_alias@,$target_alias,;t t
++s,@DEFS@,$DEFS,;t t
++s,@ECHO_C@,$ECHO_C,;t t
++s,@ECHO_N@,$ECHO_N,;t t
++s,@ECHO_T@,$ECHO_T,;t t
++s,@LIBS@,$LIBS,;t t
++s,@build@,$build,;t t
++s,@build_cpu@,$build_cpu,;t t
++s,@build_vendor@,$build_vendor,;t t
++s,@build_os@,$build_os,;t t
++s,@host@,$host,;t t
++s,@host_cpu@,$host_cpu,;t t
++s,@host_vendor@,$host_vendor,;t t
++s,@host_os@,$host_os,;t t
++s,@XMLSEC_VERSION@,$XMLSEC_VERSION,;t t
++s,@XMLSEC_PACKAGE@,$XMLSEC_PACKAGE,;t t
++s,@XMLSEC_VERSION_SAFE@,$XMLSEC_VERSION_SAFE,;t t
++s,@XMLSEC_VERSION_MAJOR@,$XMLSEC_VERSION_MAJOR,;t t
++s,@XMLSEC_VERSION_MINOR@,$XMLSEC_VERSION_MINOR,;t t
++s,@XMLSEC_VERSION_SUBMINOR@,$XMLSEC_VERSION_SUBMINOR,;t t
++s,@XMLSEC_VERSION_INFO@,$XMLSEC_VERSION_INFO,;t t
++s,@INSTALL_PROGRAM@,$INSTALL_PROGRAM,;t t
++s,@INSTALL_SCRIPT@,$INSTALL_SCRIPT,;t t
++s,@INSTALL_DATA@,$INSTALL_DATA,;t t
++s,@CYGPATH_W@,$CYGPATH_W,;t t
++s,@PACKAGE@,$PACKAGE,;t t
++s,@VERSION@,$VERSION,;t t
++s,@ACLOCAL@,$ACLOCAL,;t t
++s,@AUTOCONF@,$AUTOCONF,;t t
++s,@AUTOMAKE@,$AUTOMAKE,;t t
++s,@AUTOHEADER@,$AUTOHEADER,;t t
++s,@MAKEINFO@,$MAKEINFO,;t t
++s,@AMTAR@,$AMTAR,;t t
++s,@install_sh@,$install_sh,;t t
++s,@STRIP@,$STRIP,;t t
++s,@ac_ct_STRIP@,$ac_ct_STRIP,;t t
++s,@INSTALL_STRIP_PROGRAM@,$INSTALL_STRIP_PROGRAM,;t t
++s,@mkdir_p@,$mkdir_p,;t t
++s,@AWK@,$AWK,;t t
++s,@SET_MAKE@,$SET_MAKE,;t t
++s,@am__leading_dot@,$am__leading_dot,;t t
++s,@MAINTAINER_MODE_TRUE@,$MAINTAINER_MODE_TRUE,;t t
++s,@MAINTAINER_MODE_FALSE@,$MAINTAINER_MODE_FALSE,;t t
++s,@MAINT@,$MAINT,;t t
++s,@CC@,$CC,;t t
++s,@CFLAGS@,$CFLAGS,;t t
++s,@LDFLAGS@,$LDFLAGS,;t t
++s,@CPPFLAGS@,$CPPFLAGS,;t t
++s,@ac_ct_CC@,$ac_ct_CC,;t t
++s,@EXEEXT@,$EXEEXT,;t t
++s,@OBJEXT@,$OBJEXT,;t t
++s,@DEPDIR@,$DEPDIR,;t t
++s,@am__include@,$am__include,;t t
++s,@am__quote@,$am__quote,;t t
++s,@AMDEP_TRUE@,$AMDEP_TRUE,;t t
++s,@AMDEP_FALSE@,$AMDEP_FALSE,;t t
++s,@AMDEPBACKSLASH@,$AMDEPBACKSLASH,;t t
++s,@CCDEPMODE@,$CCDEPMODE,;t t
++s,@am__fastdepCC_TRUE@,$am__fastdepCC_TRUE,;t t
++s,@am__fastdepCC_FALSE@,$am__fastdepCC_FALSE,;t t
++s,@EGREP@,$EGREP,;t t
++s,@LN_S@,$LN_S,;t t
++s,@ECHO@,$ECHO,;t t
++s,@AR@,$AR,;t t
++s,@ac_ct_AR@,$ac_ct_AR,;t t
++s,@RANLIB@,$RANLIB,;t t
++s,@ac_ct_RANLIB@,$ac_ct_RANLIB,;t t
++s,@CPP@,$CPP,;t t
++s,@CXX@,$CXX,;t t
++s,@CXXFLAGS@,$CXXFLAGS,;t t
++s,@ac_ct_CXX@,$ac_ct_CXX,;t t
++s,@CXXDEPMODE@,$CXXDEPMODE,;t t
++s,@am__fastdepCXX_TRUE@,$am__fastdepCXX_TRUE,;t t
++s,@am__fastdepCXX_FALSE@,$am__fastdepCXX_FALSE,;t t
++s,@CXXCPP@,$CXXCPP,;t t
++s,@F77@,$F77,;t t
++s,@FFLAGS@,$FFLAGS,;t t
++s,@ac_ct_F77@,$ac_ct_F77,;t t
++s,@LIBTOOL@,$LIBTOOL,;t t
++s,@RM@,$RM,;t t
++s,@CP@,$CP,;t t
++s,@MV@,$MV,;t t
++s,@TAR@,$TAR,;t t
++s,@HELP2MAN@,$HELP2MAN,;t t
++s,@MAN2HTML@,$MAN2HTML,;t t
++s,@U@,$U,;t t
++s,@ANSI2KNR@,$ANSI2KNR,;t t
++s,@INSTALL_LTDL_TRUE@,$INSTALL_LTDL_TRUE,;t t
++s,@INSTALL_LTDL_FALSE@,$INSTALL_LTDL_FALSE,;t t
++s,@CONVENIENCE_LTDL_TRUE@,$CONVENIENCE_LTDL_TRUE,;t t
++s,@CONVENIENCE_LTDL_FALSE@,$CONVENIENCE_LTDL_FALSE,;t t
++s,@LIBADD_DL@,$LIBADD_DL,;t t
++s,@PKG_CONFIG_ENABLED@,$PKG_CONFIG_ENABLED,;t t
++s,@PKG_CONFIG@,$PKG_CONFIG,;t t
++s,@LIBXML_CFLAGS@,$LIBXML_CFLAGS,;t t
++s,@LIBXML_LIBS@,$LIBXML_LIBS,;t t
++s,@LIBXML262_CFLAGS@,$LIBXML262_CFLAGS,;t t
++s,@LIBXML262_LIBS@,$LIBXML262_LIBS,;t t
++s,@LIBXML_CONFIG@,$LIBXML_CONFIG,;t t
++s,@LIBXML_MIN_VERSION@,$LIBXML_MIN_VERSION,;t t
++s,@LIBXSLT_CFLAGS@,$LIBXSLT_CFLAGS,;t t
++s,@LIBXSLT_LIBS@,$LIBXSLT_LIBS,;t t
++s,@XMLSEC_NO_LIBXSLT@,$XMLSEC_NO_LIBXSLT,;t t
++s,@LIBXSLT_CONFIG@,$LIBXSLT_CONFIG,;t t
++s,@LIBXSLT_MIN_VERSION@,$LIBXSLT_MIN_VERSION,;t t
++s,@OPENSSL_CFLAGS@,$OPENSSL_CFLAGS,;t t
++s,@OPENSSL_LIBS@,$OPENSSL_LIBS,;t t
++s,@OPENSSL097_CFLAGS@,$OPENSSL097_CFLAGS,;t t
++s,@OPENSSL097_LIBS@,$OPENSSL097_LIBS,;t t
++s,@XMLSEC_NO_OPENSSL_TRUE@,$XMLSEC_NO_OPENSSL_TRUE,;t t
++s,@XMLSEC_NO_OPENSSL_FALSE@,$XMLSEC_NO_OPENSSL_FALSE,;t t
++s,@XMLSEC_NO_OPENSSL@,$XMLSEC_NO_OPENSSL,;t t
++s,@OPENSSL_CRYPTO_LIB@,$OPENSSL_CRYPTO_LIB,;t t
++s,@OPENSSL_MIN_VERSION@,$OPENSSL_MIN_VERSION,;t t
++s,@GNUTLS_CFLAGS@,$GNUTLS_CFLAGS,;t t
++s,@GNUTLS_LIBS@,$GNUTLS_LIBS,;t t
++s,@XMLSEC_NO_GNUTLS_TRUE@,$XMLSEC_NO_GNUTLS_TRUE,;t t
++s,@XMLSEC_NO_GNUTLS_FALSE@,$XMLSEC_NO_GNUTLS_FALSE,;t t
++s,@XMLSEC_NO_GNUTLS@,$XMLSEC_NO_GNUTLS,;t t
++s,@GNUTLS_CRYPTO_LIB@,$GNUTLS_CRYPTO_LIB,;t t
++s,@GNUTLS_MIN_VERSION@,$GNUTLS_MIN_VERSION,;t t
++s,@NSS_CFLAGS@,$NSS_CFLAGS,;t t
++s,@NSS_LIBS@,$NSS_LIBS,;t t
++s,@XMLSEC_NO_NSS_TRUE@,$XMLSEC_NO_NSS_TRUE,;t t
++s,@XMLSEC_NO_NSS_FALSE@,$XMLSEC_NO_NSS_FALSE,;t t
++s,@XMLSEC_NO_NSS@,$XMLSEC_NO_NSS,;t t
++s,@NSS_CRYPTO_LIB@,$NSS_CRYPTO_LIB,;t t
++s,@NSS_MIN_VERSION@,$NSS_MIN_VERSION,;t t
++s,@NSPR_MIN_VERSION@,$NSPR_MIN_VERSION,;t t
++s,@MOZILLA_MIN_VERSION@,$MOZILLA_MIN_VERSION,;t t
++s,@MSCRYPTO_CFLAGS@,$MSCRYPTO_CFLAGS,;t t
++s,@MSCRYPTO_LIBS@,$MSCRYPTO_LIBS,;t t
+ s,@XMLSEC_NO_SHA1_TRUE@,$XMLSEC_NO_SHA1_TRUE,;t t
+ s,@XMLSEC_NO_SHA1_FALSE@,$XMLSEC_NO_SHA1_FALSE,;t t
+ s,@XMLSEC_NO_SHA1@,$XMLSEC_NO_SHA1,;t t
+@@ -34368,6 +36362,8 @@
+ s,@NSS_MIN_VERSION@,$NSS_MIN_VERSION,;t t
+ s,@NSPR_MIN_VERSION@,$NSPR_MIN_VERSION,;t t
+ s,@MOZILLA_MIN_VERSION@,$MOZILLA_MIN_VERSION,;t t
++s,@MSCRYPTO_CFLAGS@,$MSCRYPTO_CFLAGS,;t t
++s,@MSCRYPTO_LIBS@,$MSCRYPTO_LIBS,;t t
+ s,@XMLSEC_NO_SHA1_TRUE@,$XMLSEC_NO_SHA1_TRUE,;t t
+ s,@XMLSEC_NO_SHA1_FALSE@,$XMLSEC_NO_SHA1_FALSE,;t t
+ s,@XMLSEC_NO_SHA1@,$XMLSEC_NO_SHA1,;t t
+--- misc/xmlsec1-1.2.6/configure.in 2004-08-26 04:49:24.000000000 +0200
++++ misc/build/xmlsec1-1.2.6/configure.in 2008-06-29 23:44:19.000000000 +0200
+@@ -143,7 +143,7 @@
+ dnl find libxml
+ dnl ==========================================================================
+ LIBXML_MIN_VERSION="2.4.2"
+-LIBXML_CONFIG="xml2-config"
++LIBXML_CONFIG="./libxml2-config"
+ LIBXML_CFLAGS=""
+ LIBXML_LIBS=""
+ LIBXML_FOUND="no"
+@@ -503,12 +503,26 @@
+
+ XMLSEC_NO_NSS="1"
+ MOZILLA_MIN_VERSION="1.4"
++if test "z$MOZ_FLAVOUR" = "zfirefox" ; then
++ MOZILLA_MIN_VERSION="1.0"
++fi
+ NSS_MIN_VERSION="3.2"
+ NSPR_MIN_VERSION="4.0"
+ NSS_CFLAGS=""
+ NSS_LIBS=""
+-NSS_LIBS_LIST="-lnss3 -lsmime3"
+-NSPR_LIBS_LIST="-lnspr4 -lplds4 -lplc4"
++
++case $host_os in
++cygwin* | mingw* | pw32*)
++ NSS_LIBS_LIST="-lnss3 -lsmime3"
++ NSPR_LIBS_LIST="-lnspr4"
++ ;;
++
++*)
++ NSS_LIBS_LIST="-lnss3 -lsoftokn3 -lsmime3"
++ NSPR_LIBS_LIST="-lnspr4 -lplds4 -lplc4"
++ ;;
++esac
++
+ NSS_CRYPTO_LIB="$PACKAGE-nss"
+ NSS_FOUND="no"
+
+@@ -521,9 +535,16 @@
+ AC_MSG_RESULT(no)
+ NSS_FOUND="without"
+ elif test "z$with_nss" = "z" -a "z$with_nspr" = "z" -a "z$with_mozilla_ver" = "z" -a "z$PKG_CONFIG_ENABLED" = "zyes" ; then
+- PKG_CHECK_MODULES(NSS, mozilla-nspr >= $MOZILLA_MIN_VERSION mozilla-nss >= $MOZILLA_MIN_VERSION,
++ PKG_CHECK_MODULES(NSS, $MOZ_FLAVOUR-nspr >= $MOZILLA_MIN_VERSION $MOZ_FLAVOUR-nss >= $MOZILLA_MIN_VERSION,
+ [NSS_FOUND=yes],
+ [NSS_FOUND=no])
++ AC_MSG_RESULT($NSS_FOUND)
++ if test "z$NSS_FOUND" = "zno" ; then
++ PKG_CHECK_MODULES(NSS, nspr >= $NSPR_MIN_VERSION nss >= $NSS_MIN_VERSION,
++ [NSS_FOUND=yes],
++ [NSS_FOUND=no])
++ AC_MSG_RESULT($NSS_FOUND)
++ fi
+ fi
+
+ if test "z$NSS_FOUND" = "zno" ; then
+@@ -534,8 +555,8 @@
+ ac_mozilla_name=mozilla-$MOZILLA_MIN_VERSION
+ fi
+
+- ac_nss_lib_dir="/usr/lib /usr/lib64 /usr/local/lib /usr/lib/$ac_mozilla_name /usr/local/lib/$ac_mozilla_name"
+- ac_nss_inc_dir="/usr/include /usr/include/mozilla /usr/local/include /usr/local/include/mozilla /usr/include/$ac_mozilla_name /usr/local/include/$ac_mozilla_name"
++ ac_nss_lib_dir="${SOLARVERSION}/${INPATH}/lib${UPDMINOREXT}"
++ ac_nss_inc_dir="${SOLARVERSION}/${INPATH}/inc${UPDMINOREXT}/mozilla"
+
+ AC_MSG_CHECKING(for nspr libraries >= $NSPR_MIN_VERSION)
+ NSPR_INCLUDES_FOUND="no"
+@@ -570,7 +591,9 @@
+ done
+
+ for dir in $ac_nss_lib_dir ; do
+- if test -f $dir/libnspr4.so ; then
++ case $host_os in
++ cygwin* | mingw* | pw32*)
++ if test -f $dir/libnspr4.so -o -f $dir/libnspr4.dylib -o -f $dir/libnspr4.a ; then
+ dnl do not add -L/usr/lib because compiler does it anyway
+ if test "z$dir" = "z/usr/lib" ; then
+ NSPR_LIBS="$NSPR_LIBS_LIST"
+@@ -583,7 +606,26 @@
+ fi
+ NSPR_LIBS_FOUND="yes"
+ break
+- fi
++ fi
++ ;;
++
++ *)
++ if test -f $dir/libnspr4.so -o -f $dir/libnspr4.dylib ; then
++ dnl do not add -L/usr/lib because compiler does it anyway
++ if test "z$dir" = "z/usr/lib" ; then
++ NSPR_LIBS="$NSPR_LIBS_LIST"
++ else
++ if test "z$with_gnu_ld" = "zyes" ; then
++ NSPR_LIBS="-Wl,-rpath-link -Wl,$dir -L$dir $NSPR_LIBS_LIST"
++ else
++ NSPR_LIBS="-L$dir $NSPR_LIBS_LIST"
++ fi
++ fi
++ NSPR_LIBS_FOUND="yes"
++ break
++ fi
++ ;;
++ esac
+ done
+ fi
+
+@@ -641,7 +683,9 @@
+ done
+
+ for dir in $ac_nss_lib_dir ; do
+- if test -f $dir/libnss3.so ; then
++ case $host_os in
++ cygwin* | mingw* | pw32*)
++ if test -f $dir/libnss3.so -o -f $dir/libnss3.dylib -o -f $dir/libnss3.a ; then
+ dnl do not add -L/usr/lib because compiler does it anyway
+ if test "z$dir" = "z/usr/lib" ; then
+ NSS_LIBS="$NSS_LIBS_LIST"
+@@ -654,7 +698,26 @@
+ fi
+ NSS_LIBS_FOUND="yes"
+ break
+- fi
++ fi
++ ;;
++
++ *)
++ if test -f $dir/libnss3.so -o -f $dir/libnss3.dylib ; then
++ dnl do not add -L/usr/lib because compiler does it anyway
++ if test "z$dir" = "z/usr/lib" ; then
++ NSS_LIBS="$NSS_LIBS_LIST"
++ else
++ if test "z$with_gnu_ld" = "zyes" ; then
++ NSS_LIBS="-Wl,-rpath-link -Wl,$dir -L$dir $NSS_LIBS_LIST"
++ else
++ NSS_LIBS="-L$dir $NSS_LIBS_LIST"
++ fi
++ fi
++ NSS_LIBS_FOUND="yes"
++ break
++ fi
++ ;;
++ esac
+ done
+ fi
+
+--- misc/xmlsec1-1.2.6/include/xmlsec/mscrypto/Makefile.in 2008-06-29 23:44:40.000000000 +0200
++++ misc/build/xmlsec1-1.2.6/include/xmlsec/mscrypto/Makefile.in 2008-06-29 23:44:19.000000000 +0200
+@@ -1 +1,58 @@
+-dummy
++# Makefile.in generated by automake 1.8.3 from Makefile.am.
++# @configure_input@
++
++# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
++# 2003, 2004 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@
++
++HEADERS = $(xmlsecmscryptoinc_HEADERS)
++NULL =
++xmlsecmscryptoinc_HEADERS = \
++akmngr.h \
++app.h \
++crypto.h \
++symbols.h \
++certkeys.h \
++keysstore.h \
++x509.h \
++$(NULL)
++
++all: all-am
++
++mostlyclean-libtool:
++ -rm -f *.lo
++
++clean-libtool:
++ -rm -rf .libs _libs
++
++all-am: Makefile $(HEADERS)
++
++mostlyclean-generic:
++
++clean-generic:
++
++clean: clean-am
++
++clean-am: clean-generic clean-libtool mostlyclean-am
++
++mostlyclean: mostlyclean-am
++
++mostlyclean-am: mostlyclean-generic mostlyclean-libtool
++
++.PHONY: all all-am clean clean-generic \
++ clean-libtool \
++ mostlyclean mostlyclean-generic mostlyclean-libtool
++
++
++# 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:
+--- misc/xmlsec1-1.2.6/include/xmlsec/mscrypto/akmngr.h 2008-06-29 23:44:39.000000000 +0200
++++ misc/build/xmlsec1-1.2.6/include/xmlsec/mscrypto/akmngr.h 2008-06-29 23:44:19.000000000 +0200
+@@ -1 +1,71 @@
+-dummy
++/**
++ * XMLSec library
++ *
++ * This is free software; see Copyright file in the source
++ * distribution for preciese wording.
++ *
++ * Copyright ..........................
+ */
-+ /*-
-+ * A wrapper of HCRYPTKEY, a reference countor is introduced, the function is
-+ * the same as CryptDuplicateKey. Because the CryptDuplicateKey is not support
-+ * by WINNT 4.0, the wrapper will enable the library work on WINNT 4.0
-+ */
-+ struct _mscrypt_key {
-+ HCRYPTKEY hKey ;
-+ int refcnt ;
-+ } ;
-+
-+ /*-
-+ * A wrapper of HCRYPTPROV, a reference countor is introduced, the function is
-+ * the same as CryptContextAddRef. Because the CryptContextAddRef is not support
-+ * by WINNT 4.0, the wrapper will enable the library work on WINNT 4.0
-+ */
-+ struct _mscrypt_prov {
-+ HCRYPTPROV hProv ;
-+ BOOL freeprov ;
-+ int refcnt ;
-+ } ;
-+
-+ struct _xmlSecMSCryptoKeyDataCtx {
-+ struct _mscrypt_prov* p_prov ;
-+ LPCTSTR providerName;
-+ DWORD providerType;
-+ PCCERT_CONTEXT pCert;
-+ DWORD dwKeySpec;
-+ struct _mscrypt_key* p_key ;
-+ xmlSecKeyDataType type;
-+ };
-+
-+ struct _mscrypt_key* mscrypt_create_key( HCRYPTKEY key ) {
-+ struct _mscrypt_key* pkey ;
-+
-+ pkey = ( struct _mscrypt_key* )xmlMalloc( sizeof( struct _mscrypt_key ) ) ;
-+ if( pkey == NULL ) {
-+ xmlSecError( XMLSEC_ERRORS_HERE,
-+ "mscrypt_create_key" ,
-+ NULL ,
-+ XMLSEC_ERRORS_R_MALLOC_FAILED ,
-+ XMLSEC_ERRORS_NO_MESSAGE
-+ ) ;
-+ }
-+
-+ pkey->hKey = key ;
-+ pkey->refcnt = 1 ;
-+
-+ return pkey ;
-+ }
-+
-+ struct _mscrypt_key* mscrypt_acquire_key( struct _mscrypt_key* key ) {
-+ if( key )
-+ key->refcnt ++ ;
-+
-+ return key ;
-+ }
-+
-+ int mscrypt_release_key( struct _mscrypt_key* key ) {
-+ if( key ) {
-+ key->refcnt -- ;
-+ if( !key->refcnt ) {
-+ if( key->hKey ) {
-+ CryptDestroyKey( key->hKey ) ;
-+ key->hKey = 0 ;
-+ }
-+ xmlFree( key ) ;
-+ } else {
-+ return key->refcnt ;
-+ }
-+ }
-+
-+ return 0 ;
-+ }
-+
-+ struct _mscrypt_prov* mscrypt_create_prov( HCRYPTPROV prov, BOOL callerFree ) {
-+ struct _mscrypt_prov* pprov ;
-+
-+ pprov = ( struct _mscrypt_prov* )xmlMalloc( sizeof( struct _mscrypt_prov ) ) ;
-+ if( pprov == NULL ) {
-+ xmlSecError( XMLSEC_ERRORS_HERE,
-+ "mscrypt_create_prov" ,
-+ NULL ,
-+ XMLSEC_ERRORS_R_MALLOC_FAILED ,
-+ XMLSEC_ERRORS_NO_MESSAGE
-+ ) ;
-+ }
-+
-+ pprov->hProv = prov ;
-+ pprov->freeprov = callerFree ;
-+ pprov->refcnt = 1 ;
-+
-+ return pprov ;
-+ }
-+
-+ struct _mscrypt_prov* mscrypt_acquire_prov( struct _mscrypt_prov* prov ) {
-+ if( prov )
-+ prov->refcnt ++ ;
-+
-+ return prov ;
-+ }
-+
-+ int mscrypt_release_prov( struct _mscrypt_prov* prov ) {
-+ if( prov ) {
-+ prov->refcnt -- ;
-+ if( !prov->refcnt ) {
-+ if( prov->hProv && prov->freeprov ) {
-+ CryptReleaseContext( prov->hProv, 0 ) ;
-+ prov->hProv = 0 ;
-+ }
-+ xmlFree( prov ) ;
-+ } else {
-+ return prov->refcnt ;
-+ }
-+ }
-+
-+ return 0 ;
-+ }
-
- /******************************************************************************
- *
-***************
-*** 88,111 ****
- ctx = xmlSecMSCryptoKeyDataGetCtx(data);
- xmlSecAssert2(ctx != NULL, -1);
-
-! if (ctx->hKey != 0) {
-! CryptDestroyKey(ctx->hKey);
-! ctx->hKey = 0;
-! }
-
- if(ctx->pCert != NULL) {
- CertFreeCertificateContext(ctx->pCert);
- ctx->pCert = NULL;
- }
-
-! if ((ctx->hProv != 0) && (ctx->fCallerFreeProv)) {
-! CryptReleaseContext(ctx->hProv, 0);
-! ctx->hProv = 0;
-! ctx->fCallerFreeProv = FALSE;
-! } else {
-! ctx->hProv = 0;
-! ctx->fCallerFreeProv = FALSE;
-! }
-
- ctx->type = type;
-
---- 207,226 ----
- ctx = xmlSecMSCryptoKeyDataGetCtx(data);
- xmlSecAssert2(ctx != NULL, -1);
-
-! if( ctx->p_key != 0 ) {
-! mscrypt_release_key( ctx->p_key ) ;
-! }
-! ctx->p_key = mscrypt_create_key( 0 ) ;
-
- if(ctx->pCert != NULL) {
- CertFreeCertificateContext(ctx->pCert);
- ctx->pCert = NULL;
- }
-
-! if( ( ctx->p_prov ) ) {
-! mscrypt_release_prov( ctx->p_prov ) ;
-! }
-! ctx->p_prov = mscrypt_create_prov( 0, FALSE ) ;
-
- ctx->type = type;
-
-***************
-*** 116,124 ****
- if (!CryptAcquireCertificatePrivateKey(pCert,
- CRYPT_ACQUIRE_USE_PROV_INFO_FLAG,
- NULL,
-! &(ctx->hProv),
- &(ctx->dwKeySpec),
-! &(ctx->fCallerFreeProv))) {
- xmlSecError(XMLSEC_ERRORS_HERE,
- NULL,
- "CryptAcquireCertificatePrivateKey",
---- 231,239 ----
- if (!CryptAcquireCertificatePrivateKey(pCert,
- CRYPT_ACQUIRE_USE_PROV_INFO_FLAG,
- NULL,
-! &(ctx->p_prov->hProv),
- &(ctx->dwKeySpec),
-! &(ctx->p_prov->freeprov))) {
- xmlSecError(XMLSEC_ERRORS_HERE,
- NULL,
- "CryptAcquireCertificatePrivateKey",
-***************
-*** 127,172 ****
- return(-1);
- }
- } else if((type & xmlSecKeyDataTypePublic) != 0){
-! if (!CryptAcquireContext(&(ctx->hProv),
- NULL,
-! ctx->providerName,
- ctx->providerType,
- CRYPT_VERIFYCONTEXT)) {
-! xmlSecError(XMLSEC_ERRORS_HERE,
-! NULL,
-! "CryptAcquireContext",
-! XMLSEC_ERRORS_R_CRYPTO_FAILED,
-! XMLSEC_ERRORS_NO_MESSAGE);
-! return(-1);
-! }
-! ctx->dwKeySpec = 0;
-! ctx->fCallerFreeProv = TRUE;
- } else {
-! xmlSecError(XMLSEC_ERRORS_HERE,
- NULL,
- NULL,
- XMLSEC_ERRORS_R_XMLSEC_FAILED,
- "Unsupported keytype");
-! return(-1);
-! }
-!
-! /* CryptImportPublicKeyInfo is only needed when a real key handle
-! * is needed. The key handle is needed for de/encrypting and for
-! * verifying of a signature, *not* for signing. We could call
-! * CryptImportPublicKeyInfo in xmlSecMSCryptoKeyDataGetKey instead
-! * so no unnessecary calls to CryptImportPublicKeyInfo are being
-! * made. WK
-! */
-! if(!CryptImportPublicKeyInfo(ctx->hProv,
-! X509_ASN_ENCODING | PKCS_7_ASN_ENCODING,
-! &(pCert->pCertInfo->SubjectPublicKeyInfo),
-! &(ctx->hKey))) {
-! xmlSecError(XMLSEC_ERRORS_HERE,
-! NULL,
-! "CryptImportPublicKeyInfo",
-! XMLSEC_ERRORS_R_CRYPTO_FAILED,
-! XMLSEC_ERRORS_NO_MESSAGE);
-! return(-1);
- }
- ctx->pCert = pCert;
-
---- 242,280 ----
- return(-1);
- }
- } else if((type & xmlSecKeyDataTypePublic) != 0){
-! if (!CryptAcquireContext(&(ctx->p_prov->hProv),
- NULL,
-! NULL, /*AF: replaces "ctx->providerName" with "NULL" */
- ctx->providerType,
- CRYPT_VERIFYCONTEXT)) {
-! xmlSecError(XMLSEC_ERRORS_HERE,
-! NULL,
-! "CryptAcquireContext",
-! XMLSEC_ERRORS_R_CRYPTO_FAILED,
-! XMLSEC_ERRORS_NO_MESSAGE);
-! return(-1);
-! }
-! ctx->dwKeySpec = 0;
-! ctx->p_prov->freeprov = TRUE;
-!
-! if( !CryptImportPublicKeyInfo( ctx->p_prov->hProv,
-! X509_ASN_ENCODING | PKCS_7_ASN_ENCODING,
-! &(pCert->pCertInfo->SubjectPublicKeyInfo),
-! &(ctx->p_key->hKey) ) ) {
-! xmlSecError(XMLSEC_ERRORS_HERE,
-! NULL,
-! "CryptImportPublicKeyInfo",
-! XMLSEC_ERRORS_R_CRYPTO_FAILED,
-! XMLSEC_ERRORS_NO_MESSAGE);
-! return(-1);
-! }
- } else {
-! xmlSecError(XMLSEC_ERRORS_HERE,
- NULL,
- NULL,
- XMLSEC_ERRORS_R_XMLSEC_FAILED,
- "Unsupported keytype");
-! return(-1);
- }
- ctx->pCert = pCert;
-
-***************
-*** 190,218 ****
- ctx = xmlSecMSCryptoKeyDataGetCtx(data);
- xmlSecAssert2(ctx != NULL, -1);
-
-! if(ctx->hKey != 0) {
-! CryptDestroyKey(ctx->hKey);
-! ctx->hKey = 0;
-! }
-
- if(ctx->pCert != NULL) {
- CertFreeCertificateContext(ctx->pCert);
- ctx->pCert = NULL;
- }
-
-! if((ctx->hProv != 0) && ctx->fCallerFreeProv) {
-! CryptReleaseContext(ctx->hProv, 0);
-! ctx->hProv = 0;
-! ctx->fCallerFreeProv = FALSE;
-! } else {
-! ctx->hProv = 0;
-! ctx->fCallerFreeProv = FALSE;
-! }
-
-! ctx->hProv = hProv;
-! ctx->fCallerFreeProv = fCallerFreeProv;
- ctx->dwKeySpec = dwKeySpec;
-! ctx->hKey = hKey;
- ctx->type = type;
-
- return(0);
---- 298,323 ----
- ctx = xmlSecMSCryptoKeyDataGetCtx(data);
- xmlSecAssert2(ctx != NULL, -1);
-
-! if( ctx->p_key != 0 ) {
-! mscrypt_release_key( ctx->p_key ) ;
-! ctx->p_key = NULL ;
-! }
-
- if(ctx->pCert != NULL) {
- CertFreeCertificateContext(ctx->pCert);
- ctx->pCert = NULL;
- }
-
-! if( ( ctx->p_prov ) ) {
-! mscrypt_release_prov( ctx->p_prov ) ;
-! ctx->p_prov = NULL ;
-! } else {
-! ctx->p_prov = NULL ;
-! }
-
-! ctx->p_prov = mscrypt_create_prov( hProv, FALSE ) ;
- ctx->dwKeySpec = dwKeySpec;
-! ctx->p_key = mscrypt_create_key( hKey ) ;
- ctx->type = type;
-
- return(0);
-***************
-*** 238,244 ****
- ctx = xmlSecMSCryptoKeyDataGetCtx(data);
- xmlSecAssert2(ctx != NULL, 0);
-
-! return(ctx->hKey);
- }
-
- /**
---- 343,349 ----
- ctx = xmlSecMSCryptoKeyDataGetCtx(data);
- xmlSecAssert2(ctx != NULL, 0);
-
-! return( ctx->p_key ? ctx->p_key->hKey : 0 );
- }
-
- /**
-***************
-*** 273,279 ****
- ctx = xmlSecMSCryptoKeyDataGetCtx(data);
- xmlSecAssert2(ctx != NULL, 0);
-
-! return(ctx->hProv);
- }
-
- DWORD
---- 378,384 ----
- ctx = xmlSecMSCryptoKeyDataGetCtx(data);
- xmlSecAssert2(ctx != NULL, 0);
-
-! return( ctx->p_prov ? ctx->p_prov->hProv : 0 );
- }
-
- DWORD
-***************
-*** 316,340 ****
- XMLSEC_ERRORS_NO_MESSAGE);
- return(-1);
- }
-- }
--
-- if (ctxSrc->hKey != 0) {
-- if (!CryptDuplicateKey(ctxSrc->hKey, NULL, 0, &(ctxDst->hKey))) {
-- xmlSecError(XMLSEC_ERRORS_HERE,
-- xmlSecErrorsSafeString(xmlSecKeyDataGetName(dst)),
-- "CryptDuplicateKey",
-- XMLSEC_ERRORS_R_CRYPTO_FAILED,
-- XMLSEC_ERRORS_NO_MESSAGE);
-- return(-1);
-- }
- }
-! if(ctxSrc->hProv != 0) {
-! CryptContextAddRef(ctxSrc->hProv, NULL, 0);
-! ctxDst->hProv = ctxSrc->hProv;
-! ctxDst->fCallerFreeProv = TRUE;
-! } else {
-! ctxDst->hProv = 0;
-! ctxDst->fCallerFreeProv = FALSE;
- }
-
- ctxDst->dwKeySpec = ctxSrc->dwKeySpec;
---- 421,456 ----
- XMLSEC_ERRORS_NO_MESSAGE);
- return(-1);
- }
- }
-!
-! if( ctxSrc->p_key ) {
-! if( ctxDst->p_key )
-! mscrypt_release_key( ctxDst->p_key ) ;
-!
-! ctxDst->p_key = mscrypt_acquire_key( ctxSrc->p_key ) ;
-! if( !ctxDst->p_key ) {
-! xmlSecError(XMLSEC_ERRORS_HERE,
-! xmlSecErrorsSafeString(xmlSecKeyDataGetName(dst)),
-! "mscrypt_acquire_key",
-! XMLSEC_ERRORS_R_CRYPTO_FAILED,
-! XMLSEC_ERRORS_NO_MESSAGE);
-! return(-1);
-! }
-! }
-!
-! if( ctxSrc->p_prov ) {
-! if( ctxDst->p_prov )
-! mscrypt_release_prov( ctxDst->p_prov ) ;
-!
-! ctxDst->p_prov = mscrypt_acquire_prov( ctxSrc->p_prov ) ;
-! if( !ctxDst->p_prov ) {
-! xmlSecError(XMLSEC_ERRORS_HERE,
-! xmlSecErrorsSafeString(xmlSecKeyDataGetName(dst)),
-! "mscrypt_acquire_prov",
-! XMLSEC_ERRORS_R_CRYPTO_FAILED,
-! XMLSEC_ERRORS_NO_MESSAGE);
-! return(-1);
-! }
- }
-
- ctxDst->dwKeySpec = ctxSrc->dwKeySpec;
-***************
-*** 355,370 ****
- ctx = xmlSecMSCryptoKeyDataGetCtx(data);
- xmlSecAssert(ctx != NULL);
-
-! if (ctx->hKey != 0) {
-! CryptDestroyKey(ctx->hKey);
- }
-
- if(ctx->pCert != NULL) {
- CertFreeCertificateContext(ctx->pCert);
- }
-
-! if ((ctx->hProv != 0) && ctx->fCallerFreeProv) {
-! CryptReleaseContext(ctx->hProv, 0);
- }
-
- memset(ctx, 0, sizeof(xmlSecMSCryptoKeyDataCtx));
---- 471,486 ----
- ctx = xmlSecMSCryptoKeyDataGetCtx(data);
- xmlSecAssert(ctx != NULL);
-
-! if( ctx->p_key ) {
-! mscrypt_release_key( ctx->p_key ) ;
- }
-
- if(ctx->pCert != NULL) {
- CertFreeCertificateContext(ctx->pCert);
- }
-
-! if( ctx->p_prov ) {
-! mscrypt_release_prov( ctx->p_prov ) ;
- }
-
- memset(ctx, 0, sizeof(xmlSecMSCryptoKeyDataCtx));
-***************
-*** 384,397 ****
- xmlSecAssert2(ctx->pCert->pCertInfo != NULL, 0);
- return (CertGetPublicKeyLength(X509_ASN_ENCODING | PKCS_7_ASN_ENCODING,
- &(ctx->pCert->pCertInfo->SubjectPublicKeyInfo)));
-! } else if (ctx->hKey != 0) {
- DWORD length = 0;
- DWORD lenlen = sizeof(DWORD);
-!
-! if (!CryptGetKeyParam(ctx->hKey, KP_KEYLEN, (BYTE *)&length, &lenlen, 0)) {
- xmlSecError(XMLSEC_ERRORS_HERE,
- NULL,
-! "CertDuplicateCertificateContext",
- XMLSEC_ERRORS_R_CRYPTO_FAILED,
- XMLSEC_ERRORS_NO_MESSAGE);
- return(0);
---- 500,513 ----
- xmlSecAssert2(ctx->pCert->pCertInfo != NULL, 0);
- return (CertGetPublicKeyLength(X509_ASN_ENCODING | PKCS_7_ASN_ENCODING,
- &(ctx->pCert->pCertInfo->SubjectPublicKeyInfo)));
-! } else if (ctx->p_key != 0 && ctx->p_key->hKey != 0 ) {
- DWORD length = 0;
- DWORD lenlen = sizeof(DWORD);
-!
-! if (!CryptGetKeyParam(ctx->p_key->hKey, KP_KEYLEN, (BYTE *)&length, &lenlen, 0)) {
- xmlSecError(XMLSEC_ERRORS_HERE,
- NULL,
-! "CryptGetKeyParam",
- XMLSEC_ERRORS_R_CRYPTO_FAILED,
- XMLSEC_ERRORS_NO_MESSAGE);
- return(0);
-***************
-*** 581,587 ****
---- 697,707 ----
- static void xmlSecMSCryptoKeyDataRsaDebugDump(xmlSecKeyDataPtr data, FILE* output);
- static void xmlSecMSCryptoKeyDataRsaDebugXmlDump(xmlSecKeyDataPtr data, FILE* output);
-
-+ #ifdef __MINGW32__ // for runtime-pseudo-reloc
-+ static struct _xmlSecKeyDataKlass xmlSecMSCryptoKeyDataRsaKlass = {
-+ #else
- static xmlSecKeyDataKlass xmlSecMSCryptoKeyDataRsaKlass = {
-+ #endif
- sizeof(xmlSecKeyDataKlass),
- xmlSecMSCryptoKeyDataSize,
-
-***************
-*** 938,946 ****
-
- ctx = xmlSecMSCryptoKeyDataGetCtx(xmlSecKeyGetValue(key));
- xmlSecAssert2(ctx != NULL, -1);
-! xmlSecAssert2(ctx->hKey != 0, -1);
-
-! if (!CryptExportKey(ctx->hKey, 0, PUBLICKEYBLOB, 0, NULL, &dwBlobLen)) {
- xmlSecError(XMLSEC_ERRORS_HERE,
- xmlSecErrorsSafeString(xmlSecKeyDataKlassGetName(id)),
- "CryptExportKey",
---- 1058,1067 ----
-
- ctx = xmlSecMSCryptoKeyDataGetCtx(xmlSecKeyGetValue(key));
- xmlSecAssert2(ctx != NULL, -1);
-! xmlSecAssert2(ctx->p_key != 0, -1);
-! xmlSecAssert2(ctx->p_key->hKey != 0, -1);
-
-! if (!CryptExportKey(ctx->p_key->hKey, 0, PUBLICKEYBLOB, 0, NULL, &dwBlobLen)) {
- xmlSecError(XMLSEC_ERRORS_HERE,
- xmlSecErrorsSafeString(xmlSecKeyDataKlassGetName(id)),
- "CryptExportKey",
-***************
-*** 960,966 ****
- }
-
- blob = xmlSecBufferGetData(&buf);
-! if (!CryptExportKey(ctx->hKey, 0, PUBLICKEYBLOB, 0, blob, &dwBlobLen)) {
- xmlSecError(XMLSEC_ERRORS_HERE,
- xmlSecErrorsSafeString(xmlSecKeyDataKlassGetName(id)),
- "CryptExportKey",
---- 1081,1087 ----
- }
-
- blob = xmlSecBufferGetData(&buf);
-! if (!CryptExportKey(ctx->p_key->hKey, 0, PUBLICKEYBLOB, 0, blob, &dwBlobLen)) {
- xmlSecError(XMLSEC_ERRORS_HERE,
- xmlSecErrorsSafeString(xmlSecKeyDataKlassGetName(id)),
- "CryptExportKey",
-***************
-*** 1295,1301 ****
---- 1416,1426 ----
- static void xmlSecMSCryptoKeyDataDsaDebugXmlDump(xmlSecKeyDataPtr data,
- FILE* output);
-
-+ #ifdef __MINGW32__ // for runtime-pseudo-reloc
-+ static struct _xmlSecKeyDataKlass xmlSecMSCryptoKeyDataDsaKlass = {
-+ #else
- static xmlSecKeyDataKlass xmlSecMSCryptoKeyDataDsaKlass = {
-+ #endif
- sizeof(xmlSecKeyDataKlass),
- xmlSecMSCryptoKeyDataSize,
-
-***************
-*** 1797,1805 ****
-
- ctx = xmlSecMSCryptoKeyDataGetCtx(xmlSecKeyGetValue(key));
- xmlSecAssert2(ctx != NULL, -1);
-! xmlSecAssert2(ctx->hKey != 0, -1);
-
-! if (!CryptExportKey(ctx->hKey, 0, PUBLICKEYBLOB, 0, NULL, &dwBlobLen)) {
- xmlSecError(XMLSEC_ERRORS_HERE,
- xmlSecErrorsSafeString(xmlSecKeyDataKlassGetName(id)),
- "CryptExportKey",
---- 1922,1931 ----
-
- ctx = xmlSecMSCryptoKeyDataGetCtx(xmlSecKeyGetValue(key));
- xmlSecAssert2(ctx != NULL, -1);
-! xmlSecAssert2(ctx->p_key != 0, -1);
-! xmlSecAssert2(ctx->p_key->hKey != 0, -1);
-
-! if (!CryptExportKey(ctx->p_key->hKey, 0, PUBLICKEYBLOB, 0, NULL, &dwBlobLen)) {
- xmlSecError(XMLSEC_ERRORS_HERE,
- xmlSecErrorsSafeString(xmlSecKeyDataKlassGetName(id)),
- "CryptExportKey",
-***************
-*** 1819,1825 ****
- }
-
- blob = xmlSecBufferGetData(&buf);
-! if (!CryptExportKey(ctx->hKey, 0, PUBLICKEYBLOB, 0, blob, &dwBlobLen)) {
- xmlSecError(XMLSEC_ERRORS_HERE,
- xmlSecErrorsSafeString(xmlSecKeyDataKlassGetName(id)),
- "CryptExportKey",
---- 1945,1951 ----
- }
-
- blob = xmlSecBufferGetData(&buf);
-! if (!CryptExportKey(ctx->p_key->hKey, 0, PUBLICKEYBLOB, 0, blob, &dwBlobLen)) {
- xmlSecError(XMLSEC_ERRORS_HERE,
- xmlSecErrorsSafeString(xmlSecKeyDataKlassGetName(id)),
- "CryptExportKey",
-***************
-*** 2010,2016 ****
- HCRYPTKEY hKey = 0;
- DWORD dwKeySpec;
- DWORD dwSize;
-- int res = -1;
- int ret;
-
- xmlSecAssert2(xmlSecKeyDataIsValid(data), xmlSecKeyDataTypeUnknown);
---- 2136,2141 ----
-***************
-*** 2043,2054 ****
- dwKeySpec = AT_SIGNATURE;
- dwSize = ((sizeBits << 16) | CRYPT_EXPORTABLE);
- if (!CryptGenKey(hProv, CALG_DSS_SIGN, dwSize, &hKey)) {
-! xmlSecError(XMLSEC_ERRORS_HERE,
- xmlSecErrorsSafeString(xmlSecKeyDataGetName(data)),
- "CryptGenKey",
- XMLSEC_ERRORS_R_CRYPTO_FAILED,
- XMLSEC_ERRORS_NO_MESSAGE);
-! goto done;
- }
-
- ret = xmlSecMSCryptoKeyDataAdoptKey(data, hProv, TRUE, hKey, dwKeySpec,
---- 2168,2181 ----
- dwKeySpec = AT_SIGNATURE;
- dwSize = ((sizeBits << 16) | CRYPT_EXPORTABLE);
- if (!CryptGenKey(hProv, CALG_DSS_SIGN, dwSize, &hKey)) {
-! xmlSecError(XMLSEC_ERRORS_HERE,
- xmlSecErrorsSafeString(xmlSecKeyDataGetName(data)),
- "CryptGenKey",
- XMLSEC_ERRORS_R_CRYPTO_FAILED,
- XMLSEC_ERRORS_NO_MESSAGE);
-! if (hProv != 0)
-! CryptReleaseContext(hProv, 0);
-! return -1 ;
- }
-
- ret = xmlSecMSCryptoKeyDataAdoptKey(data, hProv, TRUE, hKey, dwKeySpec,
-***************
-*** 2059,2082 ****
- "xmlSecMSCryptoKeyDataAdoptKey",
- XMLSEC_ERRORS_R_XMLSEC_FAILED,
- XMLSEC_ERRORS_NO_MESSAGE);
-! goto done;
-! }
-! hProv = 0;
-! hKey = 0;
-
-! /* success */
-! res = 0;
-!
-! done:
-! if (hProv != 0) {
-! CryptReleaseContext(ctx->hProv, 0);
- }
-
-! if (hKey != 0) {
-! CryptDestroyKey(hKey);
-! }
-!
-! return(res);
- }
-
- static xmlSecKeyDataType
---- 2186,2202 ----
- "xmlSecMSCryptoKeyDataAdoptKey",
- XMLSEC_ERRORS_R_XMLSEC_FAILED,
- XMLSEC_ERRORS_NO_MESSAGE);
-! if( hKey != 0 )
-! CryptDestroyKey( hKey ) ;
-! if( hProv != 0 )
-! CryptReleaseContext( hProv, 0 ) ;
-
-! return -1 ;
- }
-+ hProv = 0 ;
-+ hKey = 0 ;
-
-! return 0 ;
- }
-
- static xmlSecKeyDataType
-*** misc/xmlsec1-1.2.6/src/mscrypto/ciphers.c Fri Sep 26 08:12:51 2003
---- misc/build/xmlsec1-1.2.6/src/mscrypto/ciphers.c Fri May 11 14:47:19 2007
-***************
-*** 785,791 ****
---- 785,795 ----
- * AES CBC cipher transforms
- *
- ********************************************************************/
-+ #ifdef __MINGW32__ // for runtime-pseudo-reloc
-+ static struct _xmlSecTransformKlass xmlSecMSCryptoAes128CbcKlass = {
-+ #else
- static xmlSecTransformKlass xmlSecMSCryptoAes128CbcKlass = {
-+ #endif
- /* klass/object sizes */
- sizeof(xmlSecTransformKlass), /* xmlSecSize klassSize */
- xmlSecMSCryptoBlockCipherSize, /* xmlSecSize objSize */
-***************
-*** 824,830 ****
---- 828,838 ----
- return(&xmlSecMSCryptoAes128CbcKlass);
- }
-
-+ #ifdef __MINGW32__ // for runtime-pseudo-reloc
-+ static struct _xmlSecTransformKlass xmlSecMSCryptoAes192CbcKlass = {
-+ #else
- static xmlSecTransformKlass xmlSecMSCryptoAes192CbcKlass = {
-+ #endif
- /* klass/object sizes */
- sizeof(xmlSecTransformKlass), /* xmlSecSize klassSize */
- xmlSecMSCryptoBlockCipherSize, /* xmlSecSize objSize */
-***************
-*** 863,869 ****
---- 871,881 ----
- return(&xmlSecMSCryptoAes192CbcKlass);
- }
-
-+ #ifdef __MINGW32__ // for runtime-pseudo-reloc
-+ static struct _xmlSecTransformKlass xmlSecMSCryptoAes256CbcKlass = {
-+ #else
- static xmlSecTransformKlass xmlSecMSCryptoAes256CbcKlass = {
-+ #endif
- /* klass/object sizes */
- sizeof(xmlSecTransformKlass), /* xmlSecSize klassSize */
- xmlSecMSCryptoBlockCipherSize, /* xmlSecSize objSize */
-***************
-*** 906,912 ****
---- 918,928 ----
-
-
- #ifndef XMLSEC_NO_DES
-+ #ifdef __MINGW32__ // for runtime-pseudo-reloc
-+ static struct _xmlSecTransformKlass xmlSecMSCryptoDes3CbcKlass = {
-+ #else
- static xmlSecTransformKlass xmlSecMSCryptoDes3CbcKlass = {
-+ #endif
- /* klass/object sizes */
- sizeof(xmlSecTransformKlass), /* size_t klassSize */
- xmlSecMSCryptoBlockCipherSize, /* size_t objSize */
-*** misc/xmlsec1-1.2.6/src/mscrypto/crypto.c Wed Nov 12 03:38:51 2003
---- misc/build/xmlsec1-1.2.6/src/mscrypto/crypto.c Fri May 11 14:47:19 2007
-***************
-*** 330,342 ****
- BYTE*
- xmlSecMSCryptoCertStrToName(DWORD dwCertEncodingType, LPCTSTR pszX500, DWORD dwStrType, DWORD* len) {
- BYTE* str = NULL;
-!
- xmlSecAssert2(pszX500 != NULL, NULL);
- xmlSecAssert2(len != NULL, NULL);
-
- if (!CertStrToName(dwCertEncodingType, pszX500, dwStrType,
-! NULL, NULL, len, NULL)) {
- /* this might not be an error, string might just not exist */
- return(NULL);
- }
-
---- 330,344 ----
- BYTE*
- xmlSecMSCryptoCertStrToName(DWORD dwCertEncodingType, LPCTSTR pszX500, DWORD dwStrType, DWORD* len) {
- BYTE* str = NULL;
-! LPCTSTR ppszError = NULL;
-!
- xmlSecAssert2(pszX500 != NULL, NULL);
- xmlSecAssert2(len != NULL, NULL);
-
- if (!CertStrToName(dwCertEncodingType, pszX500, dwStrType,
-! NULL, NULL, len, &ppszError)) {
- /* this might not be an error, string might just not exist */
-+ DWORD dw = GetLastError();
- return(NULL);
- }
-
-*** misc/xmlsec1-1.2.6/src/mscrypto/digests.c Tue Sep 30 04:09:51 2003
---- misc/build/xmlsec1-1.2.6/src/mscrypto/digests.c Fri May 11 14:47:19 2007
-***************
-*** 96,107 ****
-
- /* TODO: Check what provider is best suited here.... */
- if (!CryptAcquireContext(&ctx->provider, NULL, MS_STRONG_PROV, PROV_RSA_FULL, CRYPT_VERIFYCONTEXT)) {
-! xmlSecError(XMLSEC_ERRORS_HERE,
-! xmlSecErrorsSafeString(xmlSecTransformGetName(transform)),
-! NULL,
-! XMLSEC_ERRORS_R_CRYPTO_FAILED,
-! XMLSEC_ERRORS_NO_MESSAGE);
-! return(-1);
- }
-
- return(0);
---- 96,110 ----
-
- /* TODO: Check what provider is best suited here.... */
- if (!CryptAcquireContext(&ctx->provider, NULL, MS_STRONG_PROV, PROV_RSA_FULL, CRYPT_VERIFYCONTEXT)) {
-! //#i57942# This is also committed in rev 1.4 of this file in the xmlsec project
-! if (!CryptAcquireContext(&ctx->provider, NULL, MS_ENHANCED_PROV, PROV_RSA_FULL, CRYPT_VERIFYCONTEXT)) {
-! xmlSecError(XMLSEC_ERRORS_HERE,
-! xmlSecErrorsSafeString(xmlSecTransformGetName(transform)),
-! NULL,
-! XMLSEC_ERRORS_R_CRYPTO_FAILED,
-! XMLSEC_ERRORS_NO_MESSAGE);
-! }
-! return(0);
- }
-
- return(0);
-***************
-*** 298,304 ****
---- 301,311 ----
- * SHA1
- *
- *****************************************************************************/
-+ #ifdef __MINGW32__ // for runtime-pseudo-reloc
-+ static struct _xmlSecTransformKlass xmlSecMSCryptoSha1Klass = {
-+ #else
- static xmlSecTransformKlass xmlSecMSCryptoSha1Klass = {
-+ #endif
- /* klass/object sizes */
- sizeof(xmlSecTransformKlass), /* size_t klassSize */
- xmlSecMSCryptoDigestSize, /* size_t objSize */
-*** misc/xmlsec1-1.2.6/src/mscrypto/keysstore.c Sat Sep 27 05:12:22 2003
---- misc/build/xmlsec1-1.2.6/src/mscrypto/keysstore.c Fri May 11 14:47:19 2007
-***************
-*** 62,68 ****
---- 62,72 ----
- const xmlChar* name,
- xmlSecKeyInfoCtxPtr keyInfoCtx);
-
-+ #ifdef __MINGW32__ // for runtime-pseudo-reloc
-+ static struct _xmlSecKeyStoreKlass xmlSecMSCryptoKeysStoreKlass = {
-+ #else
- static xmlSecKeyStoreKlass xmlSecMSCryptoKeysStoreKlass = {
-+ #endif
- sizeof(xmlSecKeyStoreKlass),
- xmlSecMSCryptoKeysStoreSize,
-
-*** misc/xmlsec1-1.2.6/src/mscrypto/kt_rsa.c Fri Sep 26 22:29:25 2003
---- misc/build/xmlsec1-1.2.6/src/mscrypto/kt_rsa.c Fri May 11 14:47:19 2007
-***************
-*** 66,72 ****
---- 66,76 ----
- static int xmlSecMSCryptoRsaPkcs1Process (xmlSecTransformPtr transform,
- xmlSecTransformCtxPtr transformCtx);
-
-+ #ifdef __MINGW32__ // for runtime-pseudo-reloc
-+ static struct _xmlSecTransformKlass xmlSecMSCryptoRsaPkcs1Klass = {
-+ #else
- static xmlSecTransformKlass xmlSecMSCryptoRsaPkcs1Klass = {
-+ #endif
- /* klass/object sizes */
- sizeof(xmlSecTransformKlass), /* xmlSecSize klassSize */
- xmlSecMSCryptoRsaPkcs1Size, /* xmlSecSize objSize */
-*** misc/xmlsec1-1.2.6/src/mscrypto/signatures.c Fri Sep 26 22:29:25 2003
---- misc/build/xmlsec1-1.2.6/src/mscrypto/signatures.c Fri May 11 14:47:19 2007
-***************
-*** 483,489 ****
---- 483,493 ----
- * RSA-SHA1 signature transform
- *
- ***************************************************************************/
-+ #ifdef __MINGW32__ // for runtime-pseudo-reloc
-+ static struct _xmlSecTransformKlass xmlSecMSCryptoRsaSha1Klass = {
-+ #else
- static xmlSecTransformKlass xmlSecMSCryptoRsaSha1Klass = {
-+ #endif
- /* klass/object sizes */
- sizeof(xmlSecTransformKlass), /* xmlSecSize klassSize */
- xmlSecMSCryptoSignatureSize, /* xmlSecSize objSize */
-***************
-*** 531,537 ****
---- 535,545 ----
- *
- ***************************************************************************/
-
-+ #ifdef __MINGW32__ // for runtime-pseudo-reloc
-+ static struct _xmlSecTransformKlass xmlSecMSCryptoDsaSha1Klass = {
-+ #else
- static xmlSecTransformKlass xmlSecMSCryptoDsaSha1Klass = {
-+ #endif
- /* klass/object sizes */
- sizeof(xmlSecTransformKlass), /* xmlSecSize klassSize */
- xmlSecMSCryptoSignatureSize, /* xmlSecSize objSize */
-*** misc/xmlsec1-1.2.6/src/mscrypto/symkeys.c Fri Sep 26 02:58:13 2003
---- misc/build/xmlsec1-1.2.6/src/mscrypto/symkeys.c Fri May 11 14:47:19 2007
-***************
-*** 72,78 ****
---- 72,82 ----
- * <xmlsec:AESKeyValue> processing
- *
- *************************************************************************/
-+ #ifdef __MINGW32__ // for runtime-pseudo-reloc
-+ static struct _xmlSecKeyDataKlass xmlSecMSCryptoKeyDataAesKlass = {
-+ #else
- static xmlSecKeyDataKlass xmlSecMSCryptoKeyDataAesKlass = {
-+ #endif
- sizeof(xmlSecKeyDataKlass),
- xmlSecKeyDataBinarySize,
-
-***************
-*** 153,159 ****
---- 157,167 ----
- * <xmlsec:DESKeyValue> processing
- *
- *************************************************************************/
-+ #ifdef __MINGW32__ // for runtime-pseudo-reloc
-+ static struct _xmlSecKeyDataKlass xmlSecMSCryptoKeyDataDesKlass = {
-+ #else
- static xmlSecKeyDataKlass xmlSecMSCryptoKeyDataDesKlass = {
-+ #endif
- sizeof(xmlSecKeyDataKlass),
- xmlSecKeyDataBinarySize,
-
-*** misc/xmlsec1-1.2.6/src/mscrypto/x509.c Fri Sep 26 02:58:13 2003
---- misc/build/xmlsec1-1.2.6/src/mscrypto/x509.c Fri May 11 14:47:19 2007
-***************
-*** 240,246 ****
---- 240,250 ----
-
-
-
-+ #ifdef __MINGW32__ // for runtime-pseudo-reloc
-+ static struct _xmlSecKeyDataKlass xmlSecMSCryptoKeyDataX509Klass = {
-+ #else
- static xmlSecKeyDataKlass xmlSecMSCryptoKeyDataX509Klass = {
-+ #endif
- sizeof(xmlSecKeyDataKlass),
- xmlSecMSCryptoX509DataSize,
-
-***************
-*** 1572,1577 ****
---- 1576,1582 ----
- xmlSecKeyInfoCtxPtr keyInfoCtx) {
- xmlSecMSCryptoX509DataCtxPtr ctx;
- xmlSecKeyDataStorePtr x509Store;
-+ PCCERT_CONTEXT pCert ;
- int ret;
-
- xmlSecAssert2(xmlSecKeyDataCheckId(data, xmlSecMSCryptoKeyDataX509Id), -1);
-***************
-*** 1610,1615 ****
---- 1615,1667 ----
- return(-1);
- }
-
-+ /*
-+ * I'll search key according to KeyReq.
-+ */
-+ pCert = CertDuplicateCertificateContext( ctx->keyCert ) ;
-+ if( pCert == NULL ) {
-+ xmlSecError( XMLSEC_ERRORS_HERE,
-+ xmlSecErrorsSafeString(xmlSecKeyDataGetName(data)),
-+ "CertDuplicateCertificateContext",
-+ XMLSEC_ERRORS_R_CRYPTO_FAILED,
-+ XMLSEC_ERRORS_NO_MESSAGE);
-+
-+ return(-1);
-+ }
-+
-+ if( ( keyInfoCtx->keyReq.keyType & xmlSecKeyDataTypePrivate ) == xmlSecKeyDataTypePrivate ) {
-+ keyValue = xmlSecMSCryptoCertAdopt( pCert, xmlSecKeyDataTypePrivate ) ;
-+ if(keyValue == NULL) {
-+ xmlSecError(XMLSEC_ERRORS_HERE,
-+ xmlSecErrorsSafeString(xmlSecKeyDataGetName(data)),
-+ "xmlSecMSCryptoCertAdopt",
-+ XMLSEC_ERRORS_R_XMLSEC_FAILED,
-+ XMLSEC_ERRORS_NO_MESSAGE);
-+
-+ CertFreeCertificateContext( pCert ) ;
-+ return(-1);
-+ }
-+ pCert = NULL ;
-+ } else if( ( keyInfoCtx->keyReq.keyType & xmlSecKeyDataTypePublic ) == xmlSecKeyDataTypePublic ) {
-+ keyValue = xmlSecMSCryptoCertAdopt( pCert, xmlSecKeyDataTypePublic ) ;
-+ if(keyValue == NULL) {
-+ xmlSecError(XMLSEC_ERRORS_HERE,
-+ xmlSecErrorsSafeString(xmlSecKeyDataGetName(data)),
-+ "xmlSecMSCryptoCertAdopt",
-+ XMLSEC_ERRORS_R_XMLSEC_FAILED,
-+ XMLSEC_ERRORS_NO_MESSAGE);
-+
-+ CertFreeCertificateContext( pCert ) ;
-+ return(-1);
-+ }
-+ pCert = NULL ;
-+ }
-+
-+
-+
-+ /*-
-+ * Get Public key from cert, which does not always work for sign action.
-+ *
- keyValue = xmlSecMSCryptoX509CertGetKey(ctx->keyCert);
- if(keyValue == NULL) {
- xmlSecError(XMLSEC_ERRORS_HERE,
-***************
-*** 1619,1624 ****
---- 1671,1721 ----
- XMLSEC_ERRORS_NO_MESSAGE);
- return(-1);
- }
-+ */
-+
-+ /*-
-+ * I'll search key according to KeyReq.
-+ */
-+ pCert = CertDuplicateCertificateContext( ctx->keyCert ) ;
-+ if( pCert == NULL ) {
-+ xmlSecError( XMLSEC_ERRORS_HERE,
-+ xmlSecErrorsSafeString(xmlSecKeyDataGetName(data)),
-+ "CertDuplicateCertificateContext",
-+ XMLSEC_ERRORS_R_CRYPTO_FAILED,
-+ XMLSEC_ERRORS_NO_MESSAGE);
-+
-+ return(-1);
-+ }
-+
-+ if( ( keyInfoCtx->keyReq.keyType & xmlSecKeyDataTypePrivate ) == xmlSecKeyDataTypePrivate ) {
-+ keyValue = xmlSecMSCryptoCertAdopt( pCert, xmlSecKeyDataTypePrivate ) ;
-+ if(keyValue == NULL) {
-+ xmlSecError(XMLSEC_ERRORS_HERE,
-+ xmlSecErrorsSafeString(xmlSecKeyDataGetName(data)),
-+ "xmlSecMSCryptoCertAdopt",
-+ XMLSEC_ERRORS_R_XMLSEC_FAILED,
-+ XMLSEC_ERRORS_NO_MESSAGE);
-+
-+ CertFreeCertificateContext( pCert ) ;
-+ return(-1);
-+ }
-+ pCert = NULL ;
-+ } else if( ( keyInfoCtx->keyReq.keyType & xmlSecKeyDataTypePublic ) == xmlSecKeyDataTypePublic ) {
-+ keyValue = xmlSecMSCryptoCertAdopt( pCert, xmlSecKeyDataTypePublic ) ;
-+ if(keyValue == NULL) {
-+ xmlSecError(XMLSEC_ERRORS_HERE,
-+ xmlSecErrorsSafeString(xmlSecKeyDataGetName(data)),
-+ "xmlSecMSCryptoCertAdopt",
-+ XMLSEC_ERRORS_R_XMLSEC_FAILED,
-+ XMLSEC_ERRORS_NO_MESSAGE);
-+
-+ CertFreeCertificateContext( pCert ) ;
-+ return(-1);
-+ }
-+ pCert = NULL ;
-+ }
-+
-+
-
- /* verify that the key matches our expectations */
- if(xmlSecKeyReqMatchKeyValue(&(keyInfoCtx->keyReq), keyValue) != 1) {
-***************
-*** 1882,1888 ****
- xmlSecAssert2(nm->pbData != NULL, NULL);
- xmlSecAssert2(nm->cbData > 0, NULL);
-
-! csz = CertNameToStr(X509_ASN_ENCODING | PKCS_7_ASN_ENCODING, nm, CERT_X500_NAME_STR, NULL, 0);
- str = (char *)xmlMalloc(csz);
- if (NULL == str) {
- xmlSecError(XMLSEC_ERRORS_HERE,
---- 1979,1985 ----
- xmlSecAssert2(nm->pbData != NULL, NULL);
- xmlSecAssert2(nm->cbData > 0, NULL);
-
-! csz = CertNameToStr(X509_ASN_ENCODING | PKCS_7_ASN_ENCODING, nm, CERT_X500_NAME_STR | CERT_NAME_STR_REVERSE_FLAG, NULL, 0);
- str = (char *)xmlMalloc(csz);
- if (NULL == str) {
- xmlSecError(XMLSEC_ERRORS_HERE,
-***************
-*** 1893,1899 ****
- return (NULL);
- }
-
-! csz = CertNameToStr(X509_ASN_ENCODING | PKCS_7_ASN_ENCODING, nm, CERT_X500_NAME_STR, str, csz);
- if (csz < 1) {
- xmlSecError(XMLSEC_ERRORS_HERE,
- NULL,
---- 1990,1996 ----
- return (NULL);
- }
-
-! csz = CertNameToStr(X509_ASN_ENCODING | PKCS_7_ASN_ENCODING, nm, CERT_X500_NAME_STR | CERT_NAME_STR_REVERSE_FLAG, str, csz);
- if (csz < 1) {
- xmlSecError(XMLSEC_ERRORS_HERE,
- NULL,
-***************
-*** 1904,1920 ****
- return(NULL);
- }
-
-! res = xmlStrdup(BAD_CAST str);
-! if(res == NULL) {
-! xmlSecError(XMLSEC_ERRORS_HERE,
-! NULL,
-! "xmlStrdup",
-! XMLSEC_ERRORS_R_MALLOC_FAILED,
-! XMLSEC_ERRORS_NO_MESSAGE);
-! xmlFree(str);
-! return(NULL);
- }
--
- xmlFree(str);
- return(res);
- }
---- 2001,2037 ----
- return(NULL);
- }
-
-! /* aleksey: this is a hack, but mscrypto can not read E= flag and wants Email= instead.
-! * don't ask me how is it possible not to read something you wrote yourself but also
-! * see comment in the xmlSecMSCryptoX509FindCert function.
-! */
-! if(strncmp(str, "E=", 2) == 0) {
-! res = xmlMalloc(strlen(str) + 13 + 1);
-! if(res == NULL) {
-! xmlSecError(XMLSEC_ERRORS_HERE,
-! NULL,
-! "xmlMalloc",
-! XMLSEC_ERRORS_R_MALLOC_FAILED,
-! "size=%d",
-! strlen(str) + 13 + 1);
-! xmlFree(str);
-! return(NULL);
-! }
-!
-! memcpy(res, "emailAddress=", 13);
-! strcpy(res + 13, BAD_CAST (str + 2));
-! } else {
-! res = xmlStrdup(BAD_CAST str);
-! if(res == NULL) {
-! xmlSecError(XMLSEC_ERRORS_HERE,
-! NULL,
-! "xmlStrdup",
-! XMLSEC_ERRORS_R_MALLOC_FAILED,
-! XMLSEC_ERRORS_NO_MESSAGE);
-! xmlFree(str);
-! return(NULL);
-! }
- }
- xmlFree(str);
- return(res);
- }
-***************
-*** 2153,2159 ****
---- 2270,2280 ----
- xmlSecSize bufSize,
- xmlSecKeyInfoCtxPtr keyInfoCtx);
-
-+ #ifdef __MINGW32__ // for runtime-pseudo-reloc
-+ static struct _xmlSecKeyDataKlass xmlSecMSCryptoKeyDataRawX509CertKlass = {
-+ #else
- static xmlSecKeyDataKlass xmlSecMSCryptoKeyDataRawX509CertKlass = {
-+ #endif
- sizeof(xmlSecKeyDataKlass),
- sizeof(xmlSecKeyData),
-
-*** misc/xmlsec1-1.2.6/src/mscrypto/x509vfy.c Sat Sep 27 05:12:22 2003
---- misc/build/xmlsec1-1.2.6/src/mscrypto/x509vfy.c Fri May 11 14:47:19 2007
-***************
-*** 70,76 ****
---- 70,80 ----
- static xmlSecByte * xmlSecMSCryptoX509NameRead (xmlSecByte *str,
- int len);
-
-+ #ifdef __MINGW32__ // for runtime-pseudo-reloc
-+ static struct _xmlSecKeyDataStoreKlass xmlSecMSCryptoX509StoreKlass = {
-+ #else
- static xmlSecKeyDataStoreKlass xmlSecMSCryptoX509StoreKlass = {
-+ #endif
- sizeof(xmlSecKeyDataStoreKlass),
- xmlSecMSCryptoX509StoreSize,
-
-***************
-*** 125,130 ****
---- 129,135 ----
- xmlChar *issuerName, xmlChar *issuerSerial,
- xmlChar *ski, xmlSecKeyInfoCtx* keyInfoCtx) {
- xmlSecMSCryptoX509StoreCtxPtr ctx;
-+ PCCERT_CONTEXT pCert ;
-
- xmlSecAssert2(xmlSecKeyDataStoreCheckId(store, xmlSecMSCryptoX509StoreId), NULL);
- xmlSecAssert2(keyInfoCtx != NULL, NULL);
-***************
-*** 132,141 ****
- ctx = xmlSecMSCryptoX509StoreGetCtx(store);
- xmlSecAssert2(ctx != NULL, NULL);
- xmlSecAssert2(ctx->untrusted != NULL, NULL);
-
-! return(xmlSecMSCryptoX509FindCert(ctx->untrusted, subjectName, issuerName, issuerSerial, ski));
-! }
-
-
- static void
- xmlSecMSCryptoUnixTimeToFileTime(time_t t, LPFILETIME pft) {
---- 137,153 ----
- ctx = xmlSecMSCryptoX509StoreGetCtx(store);
- xmlSecAssert2(ctx != NULL, NULL);
- xmlSecAssert2(ctx->untrusted != NULL, NULL);
-+ xmlSecAssert2(ctx->trusted != NULL, NULL);
-
-! pCert = NULL ;
-! if( ctx->untrusted != NULL )
-! pCert = xmlSecMSCryptoX509FindCert( ctx->untrusted, subjectName, issuerName, issuerSerial, ski ) ;
-!
-! if( ctx->trusted != NULL && pCert == NULL )
-! pCert = xmlSecMSCryptoX509FindCert( ctx->trusted, subjectName, issuerName, issuerSerial, ski ) ;
-
-+ return( pCert ) ;
-+ }
-
- static void
- xmlSecMSCryptoUnixTimeToFileTime(time_t t, LPFILETIME pft) {
-***************
-*** 252,268 ****
- }
-
- static BOOL
-! xmlSecMSCryptoX509StoreConstructCertsChain(xmlSecKeyDataStorePtr store, PCCERT_CONTEXT cert, HCERTSTORE certs,
-! xmlSecKeyInfoCtx* keyInfoCtx) {
- xmlSecMSCryptoX509StoreCtxPtr ctx;
- PCCERT_CONTEXT issuerCert = NULL;
- FILETIME fTime;
- DWORD flags;
-
- xmlSecAssert2(xmlSecKeyDataStoreCheckId(store, xmlSecMSCryptoX509StoreId), FALSE);
- xmlSecAssert2(cert != NULL, FALSE);
- xmlSecAssert2(cert->pCertInfo != NULL, FALSE);
-! xmlSecAssert2(certs != NULL, FALSE);
- xmlSecAssert2(keyInfoCtx != NULL, FALSE);
-
- ctx = xmlSecMSCryptoX509StoreGetCtx(store);
---- 264,285 ----
- }
-
- static BOOL
-! xmlSecMSCryptoX509StoreConstructCertsChain(
-! xmlSecKeyDataStorePtr store ,
-! PCCERT_CONTEXT cert ,
-! HCERTSTORE certStore ,
-! xmlSecKeyInfoCtx* keyInfoCtx
-! ) {
- xmlSecMSCryptoX509StoreCtxPtr ctx;
- PCCERT_CONTEXT issuerCert = NULL;
- FILETIME fTime;
- DWORD flags;
-+ BOOL selfSigned ;
-
- xmlSecAssert2(xmlSecKeyDataStoreCheckId(store, xmlSecMSCryptoX509StoreId), FALSE);
- xmlSecAssert2(cert != NULL, FALSE);
- xmlSecAssert2(cert->pCertInfo != NULL, FALSE);
-! xmlSecAssert2(certStore != NULL, FALSE);
- xmlSecAssert2(keyInfoCtx != NULL, FALSE);
-
- ctx = xmlSecMSCryptoX509StoreGetCtx(store);
-***************
-*** 283,342 ****
- return(FALSE);
- }
-
-! if (!xmlSecMSCryptoCheckRevocation(certs, cert)) {
- return(FALSE);
- }
-
-! /* try the untrusted certs in the chain */
-! issuerCert = CertFindCertificateInStore(certs,
- X509_ASN_ENCODING | PKCS_7_ASN_ENCODING,
- 0,
- CERT_FIND_SUBJECT_NAME,
-! &(cert->pCertInfo->Issuer),
- NULL);
-! if(issuerCert == cert) {
-! /* self signed cert, forget it */
-! CertFreeCertificateContext(issuerCert);
-! } else if(issuerCert != NULL) {
-! flags = CERT_STORE_REVOCATION_FLAG | CERT_STORE_SIGNATURE_FLAG;
-! if(!CertVerifySubjectCertificateContext(cert, issuerCert, &flags)) {
-! xmlSecMSCryptoX509StoreCertError(store, issuerCert, flags);
-! CertFreeCertificateContext(issuerCert);
-! return(FALSE);
-! }
-! if(!xmlSecMSCryptoX509StoreConstructCertsChain(store, issuerCert, certs, keyInfoCtx)) {
-! xmlSecMSCryptoX509StoreCertError(store, issuerCert, flags);
-! CertFreeCertificateContext(issuerCert);
-! return(FALSE);
-! }
-! CertFreeCertificateContext(issuerCert);
-! return(TRUE);
- }
-
-! /* try the untrusted certs in the store */
-! issuerCert = CertFindCertificateInStore(ctx->untrusted,
- X509_ASN_ENCODING | PKCS_7_ASN_ENCODING,
- 0,
- CERT_FIND_SUBJECT_NAME,
- &(cert->pCertInfo->Issuer),
- NULL);
-! if(issuerCert == cert) {
-! /* self signed cert, forget it */
-! CertFreeCertificateContext(issuerCert);
-! } else if(issuerCert != NULL) {
-! flags = CERT_STORE_REVOCATION_FLAG | CERT_STORE_SIGNATURE_FLAG;
-! if(!CertVerifySubjectCertificateContext(cert, issuerCert, &flags)) {
-! xmlSecMSCryptoX509StoreCertError(store, issuerCert, flags);
-! CertFreeCertificateContext(issuerCert);
-! return(FALSE);
-! }
-! if(!xmlSecMSCryptoX509StoreConstructCertsChain(store, issuerCert, certs, keyInfoCtx)) {
-! CertFreeCertificateContext(issuerCert);
-! return(FALSE);
- }
-- CertFreeCertificateContext(issuerCert);
-- return(TRUE);
-- }
-
- /* try to find issuer cert in the trusted cert in the store */
- issuerCert = CertFindCertificateInStore(ctx->trusted,
---- 300,384 ----
- return(FALSE);
- }
-
-! if (!xmlSecMSCryptoCheckRevocation(certStore, cert)) {
- return(FALSE);
- }
-
-! /*-
-! * Firstly try to find the cert in the trusted cert store. We will trust
-! * the certificate in the trusted store.
-! */
-! issuerCert = CertFindCertificateInStore(ctx->trusted,
- X509_ASN_ENCODING | PKCS_7_ASN_ENCODING,
- 0,
- CERT_FIND_SUBJECT_NAME,
-! &(cert->pCertInfo->Subject),
- NULL);
-! if( issuerCert != NULL ) {
-! /* We have found the trusted cert, so return true */
-! CertFreeCertificateContext( issuerCert ) ;
-! return( TRUE ) ;
- }
-
-! /* Check whether the certificate is self signed certificate */
-! selfSigned = CertCompareCertificateName( X509_ASN_ENCODING | PKCS_7_ASN_ENCODING, &(cert->pCertInfo->Subject), &(cert->pCertInfo->Issuer) ) ;
-!
-! /* try the untrusted certs in the chain */
-! if( !selfSigned ) {
-! issuerCert = CertFindCertificateInStore(certStore,
- X509_ASN_ENCODING | PKCS_7_ASN_ENCODING,
- 0,
- CERT_FIND_SUBJECT_NAME,
- &(cert->pCertInfo->Issuer),
- NULL);
-! if( issuerCert != NULL && CertCompareCertificate( X509_ASN_ENCODING | PKCS_7_ASN_ENCODING, cert->pCertInfo, issuerCert->pCertInfo ) ) {
-! /* self signed cert, forget it */
-! CertFreeCertificateContext(issuerCert);
-! } else if(issuerCert != NULL) {
-! flags = CERT_STORE_REVOCATION_FLAG | CERT_STORE_SIGNATURE_FLAG;
-! if(!CertVerifySubjectCertificateContext(cert, issuerCert, &flags)) {
-! xmlSecMSCryptoX509StoreCertError(store, issuerCert, flags);
-! CertFreeCertificateContext(issuerCert);
-! return(FALSE);
-! }
-! if(!xmlSecMSCryptoX509StoreConstructCertsChain(store, issuerCert, certStore, keyInfoCtx)) {
-! xmlSecMSCryptoX509StoreCertError(store, issuerCert, flags);
-! CertFreeCertificateContext(issuerCert);
-! return(FALSE);
-! }
-!
-! CertFreeCertificateContext(issuerCert);
-! return(TRUE);
-! }
-! }
-!
-! /* try the untrusted certs in the store */
-! if( !selfSigned ) {
-! issuerCert = CertFindCertificateInStore(ctx->untrusted,
-! X509_ASN_ENCODING | PKCS_7_ASN_ENCODING,
-! 0,
-! CERT_FIND_SUBJECT_NAME,
-! &(cert->pCertInfo->Issuer),
-! NULL);
-! if( issuerCert != NULL && CertCompareCertificate( X509_ASN_ENCODING | PKCS_7_ASN_ENCODING, cert->pCertInfo, issuerCert->pCertInfo ) ) {
-! /* self signed cert, forget it */
-! CertFreeCertificateContext(issuerCert);
-! } else if(issuerCert != NULL) {
-! flags = CERT_STORE_REVOCATION_FLAG | CERT_STORE_SIGNATURE_FLAG;
-! if(!CertVerifySubjectCertificateContext(cert, issuerCert, &flags)) {
-! xmlSecMSCryptoX509StoreCertError(store, issuerCert, flags);
-! CertFreeCertificateContext(issuerCert);
-! return(FALSE);
-! }
-! if(!xmlSecMSCryptoX509StoreConstructCertsChain(store, issuerCert, certStore, keyInfoCtx)) {
-! CertFreeCertificateContext(issuerCert);
-! return(FALSE);
-! }
-!
-! CertFreeCertificateContext(issuerCert);
-! return(TRUE);
-! }
- }
-
- /* try to find issuer cert in the trusted cert in the store */
- issuerCert = CertFindCertificateInStore(ctx->trusted,
-***************
-*** 379,404 ****
- xmlSecAssert2(certs != NULL, NULL);
- xmlSecAssert2(keyInfoCtx != NULL, NULL);
-
-! while((cert = CertEnumCertificatesInStore(certs, cert)) != NULL){
-! PCCERT_CONTEXT nextCert = NULL;
-
-! xmlSecAssert2(cert->pCertInfo != NULL, NULL);
-
-! /* if cert is the issuer of any other cert in the list, then it is
-! * to be skipped */
-! nextCert = CertFindCertificateInStore(certs,
- X509_ASN_ENCODING | PKCS_7_ASN_ENCODING,
- 0,
- CERT_FIND_ISSUER_NAME,
- &(cert->pCertInfo->Subject),
-! NULL);
-! if(nextCert != NULL) {
-! CertFreeCertificateContext(nextCert);
-! continue;
-! }
-! if(xmlSecMSCryptoX509StoreConstructCertsChain(store, cert, certs, keyInfoCtx)) {
-! return(cert);
-! }
- }
-
- return (NULL);
---- 421,481 ----
- xmlSecAssert2(certs != NULL, NULL);
- xmlSecAssert2(keyInfoCtx != NULL, NULL);
-
-! while( ( cert = CertEnumCertificatesInStore( certs, cert ) ) != NULL ) {
-! PCCERT_CONTEXT nextCert ;
-! unsigned char selected ;
-
-! xmlSecAssert2( cert->pCertInfo != NULL, NULL ) ;
-
-! /* if cert is the issuer of any other cert in the list, then it is
-! * to be skipped except that the cert list only have one self-signed
-! * certificate.
-! */
-! for( selected = 0, nextCert = NULL ; ; ) {
-! nextCert = CertFindCertificateInStore( certs,
- X509_ASN_ENCODING | PKCS_7_ASN_ENCODING,
- 0,
- CERT_FIND_ISSUER_NAME,
- &(cert->pCertInfo->Subject),
-! nextCert ) ;
-! if( nextCert != NULL ) {
-! if( CertCompareCertificate( X509_ASN_ENCODING | PKCS_7_ASN_ENCODING, cert->pCertInfo, nextCert->pCertInfo ) ) {
-! selected = 1 ;
-! continue ;
-! } else {
-! selected = 0 ;
-! break ;
-! }
-! } else {
-! selected = 1 ;
-! break ;
-! }
-! }
-!
-! if( nextCert != NULL )
-! CertFreeCertificateContext( nextCert ) ;
-!
-! if( !selected ) {
-! continue ;
-! }
-!
-! /* JL: OpenOffice.org implements its own certificate verification routine.
-! The goal is to seperate validation of the signature
-! and the certificate. For example, OOo could show that the document signature is valid,
-! but the certificate could not be verified. If we do not prevent the verification of
-! the certificate by libxmlsec and the verification fails, then the XML signature will not be
-! verified. This would happen, for example, if the root certificate is not installed.
-!
-! In the store schould only be the certificate from the X509Certificate element
-! and the X509IssuerSerial element. The latter is only there
-! if the certificate is installed. Both certificates must be the same!
-! In case of writing the signature, the store contains only the certificate that
-! was created based on the information from the X509IssuerSerial element. */
-! return cert;
-!
-! /* if( xmlSecMSCryptoX509StoreConstructCertsChain( store, cert, certs, keyInfoCtx ) ) {
-! return( cert ) ;
-! } */
- }
-
- return (NULL);
-***************
-*** 458,466 ****
---- 535,660 ----
- return(0);
- }
-
-+ int
-+ xmlSecMSCryptoX509StoreAdoptKeyStore (
-+ xmlSecKeyDataStorePtr store,
-+ HCERTSTORE keyStore
-+ ) {
-+ xmlSecMSCryptoX509StoreCtxPtr ctx;
-+ int ret;
-+
-+ xmlSecAssert2(xmlSecKeyDataStoreCheckId(store, xmlSecMSCryptoX509StoreId), -1);
-+ xmlSecAssert2( keyStore != NULL, -1);
-+
-+ ctx = xmlSecMSCryptoX509StoreGetCtx(store);
-+ xmlSecAssert2(ctx != NULL, -1);
-+ xmlSecAssert2(ctx->trusted != NULL, -1);
-+
-+ if( !CertAddStoreToCollection ( ctx->trusted , keyStore , CERT_PHYSICAL_STORE_ADD_ENABLE_FLAG , 2 ) ) {
-+ xmlSecError(XMLSEC_ERRORS_HERE,
-+ xmlSecErrorsSafeString(xmlSecKeyDataStoreGetName(store)),
-+ "CertAddStoreToCollection",
-+ XMLSEC_ERRORS_R_CRYPTO_FAILED,
-+ XMLSEC_ERRORS_NO_MESSAGE);
-+ return(-1);
-+ }
-+
-+ {
-+ PCCERT_CONTEXT ptCert ;
-+
-+ ptCert = NULL ;
-+ while( 1 ) {
-+ ptCert = CertEnumCertificatesInStore( ctx->trusted, ptCert ) ;
-+ if( ptCert == NULL )
-+ break ;
-+ }
-+ }
-+
-+ return(0);
-+ }
-+
-+ int
-+ xmlSecMSCryptoX509StoreAdoptTrustedStore (
-+ xmlSecKeyDataStorePtr store,
-+ HCERTSTORE trustedStore
-+ ) {
-+ xmlSecMSCryptoX509StoreCtxPtr ctx;
-+ int ret;
-+
-+ xmlSecAssert2(xmlSecKeyDataStoreCheckId(store, xmlSecMSCryptoX509StoreId), -1);
-+ xmlSecAssert2( trustedStore != NULL, -1);
-+
-+ ctx = xmlSecMSCryptoX509StoreGetCtx(store);
-+ xmlSecAssert2(ctx != NULL, -1);
-+ xmlSecAssert2(ctx->trusted != NULL, -1);
-+
-+ if( !CertAddStoreToCollection ( ctx->trusted , trustedStore , CERT_PHYSICAL_STORE_ADD_ENABLE_FLAG , 3 ) ) {
-+ xmlSecError(XMLSEC_ERRORS_HERE,
-+ xmlSecErrorsSafeString(xmlSecKeyDataStoreGetName(store)),
-+ "CertAddStoreToCollection",
-+ XMLSEC_ERRORS_R_CRYPTO_FAILED,
-+ XMLSEC_ERRORS_NO_MESSAGE);
-+ return(-1);
-+ }
-+
-+ {
-+ PCCERT_CONTEXT ptCert ;
-+
-+ ptCert = NULL ;
-+ while( 1 ) {
-+ ptCert = CertEnumCertificatesInStore( ctx->trusted, ptCert ) ;
-+ if( ptCert == NULL )
-+ break ;
-+ }
-+ }
-+
-+ return(0);
-+ }
-+
-+ int
-+ xmlSecMSCryptoX509StoreAdoptUntrustedStore (
-+ xmlSecKeyDataStorePtr store,
-+ HCERTSTORE untrustedStore
-+ ) {
-+ xmlSecMSCryptoX509StoreCtxPtr ctx;
-+ int ret;
-+
-+ xmlSecAssert2(xmlSecKeyDataStoreCheckId(store, xmlSecMSCryptoX509StoreId), -1);
-+ xmlSecAssert2( untrustedStore != NULL, -1);
-+
-+ ctx = xmlSecMSCryptoX509StoreGetCtx(store);
-+ xmlSecAssert2(ctx != NULL, -1);
-+ xmlSecAssert2(ctx->untrusted != NULL, -1);
-+
-+ if( !CertAddStoreToCollection ( ctx->untrusted , untrustedStore , CERT_PHYSICAL_STORE_ADD_ENABLE_FLAG , 2 ) ) {
-+ xmlSecError(XMLSEC_ERRORS_HERE,
-+ xmlSecErrorsSafeString(xmlSecKeyDataStoreGetName(store)),
-+ "CertAddStoreToCollection",
-+ XMLSEC_ERRORS_R_CRYPTO_FAILED,
-+ XMLSEC_ERRORS_NO_MESSAGE);
-+ return(-1);
-+ }
-+
-+ {
-+ PCCERT_CONTEXT ptCert ;
-+
-+ ptCert = NULL ;
-+ while( 1 ) {
-+ ptCert = CertEnumCertificatesInStore( ctx->untrusted, ptCert ) ;
-+ if( ptCert == NULL )
-+ break ;
-+ }
-+ }
-+
-+ return(0);
-+ }
-+
- static int
- xmlSecMSCryptoX509StoreInitialize(xmlSecKeyDataStorePtr store) {
- xmlSecMSCryptoX509StoreCtxPtr ctx;
-+ HCERTSTORE hTrustedMemStore ;
-+ HCERTSTORE hUntrustedMemStore ;
-+
- xmlSecAssert2(xmlSecKeyDataStoreCheckId(store, xmlSecMSCryptoX509StoreId), -1);
-
- ctx = xmlSecMSCryptoX509StoreGetCtx(store);
-***************
-*** 468,503 ****
-
- memset(ctx, 0, sizeof(xmlSecMSCryptoX509StoreCtx));
-
- /* create trusted certs store */
-! ctx->trusted = CertOpenStore(CERT_STORE_PROV_MEMORY,
- X509_ASN_ENCODING | PKCS_7_ASN_ENCODING,
- 0,
- CERT_STORE_CREATE_NEW_FLAG,
- NULL);
-! if(ctx->trusted == NULL) {
- xmlSecError(XMLSEC_ERRORS_HERE,
- xmlSecErrorsSafeString(xmlSecKeyDataStoreGetName(store)),
- "CertOpenStore",
- XMLSEC_ERRORS_R_CRYPTO_FAILED,
- XMLSEC_ERRORS_NO_MESSAGE);
- return(-1);
- }
-
-! /* create trusted certs store */
-! ctx->untrusted = CertOpenStore(CERT_STORE_PROV_MEMORY,
- X509_ASN_ENCODING | PKCS_7_ASN_ENCODING,
- 0,
- CERT_STORE_CREATE_NEW_FLAG,
- NULL);
-! if(ctx->untrusted == NULL) {
- xmlSecError(XMLSEC_ERRORS_HERE,
- xmlSecErrorsSafeString(xmlSecKeyDataStoreGetName(store)),
- "CertOpenStore",
- XMLSEC_ERRORS_R_CRYPTO_FAILED,
- XMLSEC_ERRORS_NO_MESSAGE);
- return(-1);
- }
-
- return(0);
- }
-
---- 662,765 ----
-
- memset(ctx, 0, sizeof(xmlSecMSCryptoX509StoreCtx));
-
-+ /* create trusted certs store collection */
-+ ctx->trusted = CertOpenStore(CERT_STORE_PROV_COLLECTION,
-+ 0,
-+ NULL,
-+ 0,
-+ NULL);
-+ if(ctx->trusted == NULL) {
-+ xmlSecError(XMLSEC_ERRORS_HERE,
-+ xmlSecErrorsSafeString(xmlSecKeyDataStoreGetName(store)),
-+ "CertOpenStore",
-+ XMLSEC_ERRORS_R_CRYPTO_FAILED,
-+ XMLSEC_ERRORS_NO_MESSAGE);
-+ return(-1);
-+ }
-+
- /* create trusted certs store */
-! hTrustedMemStore = CertOpenStore(CERT_STORE_PROV_MEMORY,
- X509_ASN_ENCODING | PKCS_7_ASN_ENCODING,
- 0,
- CERT_STORE_CREATE_NEW_FLAG,
- NULL);
-! if(hTrustedMemStore == NULL) {
- xmlSecError(XMLSEC_ERRORS_HERE,
- xmlSecErrorsSafeString(xmlSecKeyDataStoreGetName(store)),
- "CertOpenStore",
- XMLSEC_ERRORS_R_CRYPTO_FAILED,
- XMLSEC_ERRORS_NO_MESSAGE);
-+ CertCloseStore(ctx->trusted, CERT_CLOSE_STORE_FORCE_FLAG);
-+ ctx->trusted = NULL ;
- return(-1);
- }
-
-! /* add the memory trusted certs store to trusted certs store collection */
-! if( !CertAddStoreToCollection( ctx->trusted, hTrustedMemStore, CERT_PHYSICAL_STORE_ADD_ENABLE_FLAG, 1 ) ) {
-! xmlSecError(XMLSEC_ERRORS_HERE,
-! xmlSecErrorsSafeString(xmlSecKeyDataStoreGetName(store)),
-! "CertAddStoreToCollection",
-! XMLSEC_ERRORS_R_CRYPTO_FAILED,
-! XMLSEC_ERRORS_NO_MESSAGE);
-! CertCloseStore(ctx->trusted, CERT_CLOSE_STORE_FORCE_FLAG);
-! CertCloseStore(hTrustedMemStore, CERT_CLOSE_STORE_CHECK_FLAG);
-! ctx->trusted = NULL ;
-! return(-1);
-! }
-! CertCloseStore(hTrustedMemStore, CERT_CLOSE_STORE_CHECK_FLAG);
-!
-! /* create untrusted certs store collection */
-! ctx->untrusted = CertOpenStore(CERT_STORE_PROV_COLLECTION,
-! 0,
-! NULL,
-! 0,
-! NULL);
-! if(ctx->untrusted == NULL) {
-! xmlSecError(XMLSEC_ERRORS_HERE,
-! xmlSecErrorsSafeString(xmlSecKeyDataStoreGetName(store)),
-! "CertOpenStore",
-! XMLSEC_ERRORS_R_CRYPTO_FAILED,
-! XMLSEC_ERRORS_NO_MESSAGE);
-! CertCloseStore(ctx->trusted, CERT_CLOSE_STORE_FORCE_FLAG);
-! ctx->trusted = NULL ;
-! return(-1);
-! }
-!
-! /* create untrusted certs store */
-! hUntrustedMemStore = CertOpenStore(CERT_STORE_PROV_MEMORY,
- X509_ASN_ENCODING | PKCS_7_ASN_ENCODING,
- 0,
- CERT_STORE_CREATE_NEW_FLAG,
- NULL);
-! if(hUntrustedMemStore == NULL) {
- xmlSecError(XMLSEC_ERRORS_HERE,
- xmlSecErrorsSafeString(xmlSecKeyDataStoreGetName(store)),
- "CertOpenStore",
- XMLSEC_ERRORS_R_CRYPTO_FAILED,
- XMLSEC_ERRORS_NO_MESSAGE);
-+ CertCloseStore(ctx->trusted, CERT_CLOSE_STORE_FORCE_FLAG);
-+ CertCloseStore(ctx->untrusted, CERT_CLOSE_STORE_FORCE_FLAG);
-+ ctx->trusted = NULL ;
-+ ctx->untrusted = NULL ;
- return(-1);
- }
-
-+ /* add the memory trusted certs store to untrusted certs store collection */
-+ if( !CertAddStoreToCollection( ctx->untrusted, hUntrustedMemStore, CERT_PHYSICAL_STORE_ADD_ENABLE_FLAG, 1 ) ) {
-+ xmlSecError(XMLSEC_ERRORS_HERE,
-+ xmlSecErrorsSafeString(xmlSecKeyDataStoreGetName(store)),
-+ "CertAddStoreToCollection",
-+ XMLSEC_ERRORS_R_CRYPTO_FAILED,
-+ XMLSEC_ERRORS_NO_MESSAGE);
-+ CertCloseStore(ctx->untrusted, CERT_CLOSE_STORE_FORCE_FLAG);
-+ CertCloseStore(ctx->trusted, CERT_CLOSE_STORE_FORCE_FLAG);
-+ CertCloseStore(hUntrustedMemStore, CERT_CLOSE_STORE_CHECK_FLAG);
-+ ctx->trusted = NULL ;
-+ ctx->untrusted = NULL ;
-+ return(-1);
-+ }
-+ CertCloseStore(hUntrustedMemStore, CERT_CLOSE_STORE_CHECK_FLAG);
-+
- return(0);
- }
-
-***************
-*** 567,576 ****
---- 829,869 ----
-
- if((pCert == NULL) && (NULL != issuerName) && (NULL != issuerSerial)) {
- xmlSecBn issuerSerialBn;
-+ xmlChar * p;
- CERT_NAME_BLOB cnb;
-+ CRYPT_INTEGER_BLOB cib;
- BYTE *cName = NULL;
- DWORD cNameLen = 0;
-+
-+ /* aleksey: for some unknown to me reasons, mscrypto wants Email
-+ * instead of emailAddress. This code is not bullet proof and may
-+ * produce incorrect results if someone has "emailAddress=" string
-+ * in one of the fields, but it is best I can suggest to fix this problem.
-+ * Also see xmlSecMSCryptoX509NameWrite function.
-+ */
-+ while( (p = (xmlChar*)xmlStrstr(issuerName, BAD_CAST "emailAddress=")) != NULL) {
-+ memcpy(p, " Email=", 13);
-+ }
-+
-
-+
-+ /* get issuer name */
-+ cName = xmlSecMSCryptoCertStrToName(X509_ASN_ENCODING | PKCS_7_ASN_ENCODING,
-+ issuerName,
-+ CERT_NAME_STR_ENABLE_UTF8_UNICODE_FLAG | CERT_OID_NAME_STR | CERT_NAME_STR_REVERSE_FLAG,
-+ &cNameLen);
-+ if(cName == NULL) {
-+ xmlSecError(XMLSEC_ERRORS_HERE,
-+ NULL,
-+ "xmlSecMSCryptoCertStrToName",
-+ XMLSEC_ERRORS_R_XMLSEC_FAILED,
-+ XMLSEC_ERRORS_NO_MESSAGE);
-+ return (NULL);
-+ }
-+ cnb.pbData = cName;
-+ cnb.cbData = cNameLen;
-+
-+ /* get serial number */
- ret = xmlSecBnInitialize(&issuerSerialBn, 0);
- if(ret < 0) {
- xmlSecError(XMLSEC_ERRORS_HERE,
-***************
-*** 578,583 ****
---- 871,877 ----
- "xmlSecBnInitialize",
- XMLSEC_ERRORS_R_XMLSEC_FAILED,
- XMLSEC_ERRORS_NO_MESSAGE);
-+ xmlFree(cName);
- return(NULL);
- }
-
-***************
-*** 589,614 ****
- XMLSEC_ERRORS_R_XMLSEC_FAILED,
- XMLSEC_ERRORS_NO_MESSAGE);
- xmlSecBnFinalize(&issuerSerialBn);
-! return(NULL);
- }
-
-! cName = xmlSecMSCryptoCertStrToName(X509_ASN_ENCODING | PKCS_7_ASN_ENCODING,
-! issuerName,
-! CERT_OID_NAME_STR | CERT_NAME_STR_REVERSE_FLAG,
-! &cNameLen);
-! if(cName == NULL) {
- xmlSecError(XMLSEC_ERRORS_HERE,
- NULL,
-! "xmlSecMSCryptoCertStrToName",
- XMLSEC_ERRORS_R_XMLSEC_FAILED,
- XMLSEC_ERRORS_NO_MESSAGE);
- xmlSecBnFinalize(&issuerSerialBn);
-! return (NULL);
- }
-
-! cnb.pbData = cName;
-! cnb.cbData = cNameLen;
-! while((pCert = CertFindCertificateInStore(store,
- PKCS_7_ASN_ENCODING | X509_ASN_ENCODING,
- 0,
- CERT_FIND_ISSUER_NAME,
---- 883,912 ----
- XMLSEC_ERRORS_R_XMLSEC_FAILED,
- XMLSEC_ERRORS_NO_MESSAGE);
- xmlSecBnFinalize(&issuerSerialBn);
-! xmlFree(cName);
-! return(NULL);
- }
-
-! /* I have no clue why at a sudden a swap is needed to
-! * convert from lsb... This code is purely based upon
-! * trial and error :( WK
-! */
-! ret = xmlSecBnReverse(&issuerSerialBn);
-! if(ret < 0) {
- xmlSecError(XMLSEC_ERRORS_HERE,
- NULL,
-! "xmlSecBnReverse",
- XMLSEC_ERRORS_R_XMLSEC_FAILED,
- XMLSEC_ERRORS_NO_MESSAGE);
- xmlSecBnFinalize(&issuerSerialBn);
-! xmlFree(cName);
-! return(NULL);
- }
-
-! cib.pbData = xmlSecBufferGetData(&issuerSerialBn);
-! cib.cbData = xmlSecBufferGetSize(&issuerSerialBn);
-!
-! while((pCert = CertFindCertificateInStore(store,
- PKCS_7_ASN_ENCODING | X509_ASN_ENCODING,
- 0,
- CERT_FIND_ISSUER_NAME,
-***************
-*** 622,631 ****
- if((pCert->pCertInfo != NULL) &&
- (pCert->pCertInfo->SerialNumber.pbData != NULL) &&
- (pCert->pCertInfo->SerialNumber.cbData > 0) &&
-! (0 == xmlSecBnCompareReverse(&issuerSerialBn, pCert->pCertInfo->SerialNumber.pbData,
-! pCert->pCertInfo->SerialNumber.cbData))) {
-!
-! break;
- }
- }
- xmlFree(cName);
---- 920,928 ----
- if((pCert->pCertInfo != NULL) &&
- (pCert->pCertInfo->SerialNumber.pbData != NULL) &&
- (pCert->pCertInfo->SerialNumber.cbData > 0) &&
-! (CertCompareIntegerBlob(&(pCert->pCertInfo->SerialNumber), &cib) == TRUE)
-! ) {
-! break;
- }
- }
- xmlFree(cName);
-*** misc/xmlsec1-1.2.6/src/nss/Makefile.am Tue Sep 16 11:43:03 2003
---- misc/build/xmlsec1-1.2.6/src/nss/Makefile.am Fri May 11 14:47:19 2007
-***************
-*** 20,40 ****
- $(NULL)
-
- libxmlsec1_nss_la_SOURCES =\
- app.c \
- bignum.c \
- ciphers.c \
- crypto.c \
- digests.c \
- hmac.c \
- pkikeys.c \
- signatures.c \
- symkeys.c \
- x509.c \
- x509vfy.c \
-- keysstore.c \
-- kt_rsa.c \
-- kw_des.c \
-- kw_aes.c \
- $(NULL)
-
- libxmlsec1_nss_la_LIBADD = \
---- 20,41 ----
- $(NULL)
-
- libxmlsec1_nss_la_SOURCES =\
-+ akmngr.c \
- app.c \
- bignum.c \
- ciphers.c \
- crypto.c \
- digests.c \
- hmac.c \
-+ keysstore.c \
-+ keytrans.c \
-+ keywrapers.c \
- pkikeys.c \
- signatures.c \
- symkeys.c \
-+ tokens.c \
- x509.c \
- x509vfy.c \
- $(NULL)
-
- libxmlsec1_nss_la_LIBADD = \
-*** misc/xmlsec1-1.2.6/src/nss/Makefile.in Thu Aug 26 08:00:32 2004
---- misc/build/xmlsec1-1.2.6/src/nss/Makefile.in Fri May 11 14:47:19 2007
-***************
-*** 54,62 ****
- $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
- $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
- am__objects_1 =
-! am_libxmlsec1_nss_la_OBJECTS = app.lo bignum.lo ciphers.lo crypto.lo \
- digests.lo hmac.lo pkikeys.lo signatures.lo symkeys.lo x509.lo \
-! x509vfy.lo keysstore.lo kt_rsa.lo kw_des.lo kw_aes.lo \
- $(am__objects_1)
- libxmlsec1_nss_la_OBJECTS = $(am_libxmlsec1_nss_la_OBJECTS)
- DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)
---- 54,62 ----
- $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
- $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
- am__objects_1 =
-! am_libxmlsec1_nss_la_OBJECTS = akmngr.lo app.lo bignum.lo ciphers.lo crypto.lo \
- digests.lo hmac.lo pkikeys.lo signatures.lo symkeys.lo x509.lo \
-! x509vfy.lo keysstore.lo tokens.lo keytrans.lo keywrapers.lo \
- $(am__objects_1)
- libxmlsec1_nss_la_OBJECTS = $(am_libxmlsec1_nss_la_OBJECTS)
- DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)
-***************
-*** 65,75 ****
- @AMDEP_TRUE@DEP_FILES = ./$(DEPDIR)/app.Plo ./$(DEPDIR)/bignum.Plo \
- @AMDEP_TRUE@ ./$(DEPDIR)/ciphers.Plo ./$(DEPDIR)/crypto.Plo \
- @AMDEP_TRUE@ ./$(DEPDIR)/digests.Plo ./$(DEPDIR)/hmac.Plo \
-! @AMDEP_TRUE@ ./$(DEPDIR)/keysstore.Plo ./$(DEPDIR)/kt_rsa.Plo \
-! @AMDEP_TRUE@ ./$(DEPDIR)/kw_aes.Plo ./$(DEPDIR)/kw_des.Plo \
- @AMDEP_TRUE@ ./$(DEPDIR)/pkikeys.Plo ./$(DEPDIR)/signatures.Plo \
- @AMDEP_TRUE@ ./$(DEPDIR)/symkeys.Plo ./$(DEPDIR)/x509.Plo \
-! @AMDEP_TRUE@ ./$(DEPDIR)/x509vfy.Plo
- COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
- $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
- LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) \
---- 65,75 ----
- @AMDEP_TRUE@DEP_FILES = ./$(DEPDIR)/app.Plo ./$(DEPDIR)/bignum.Plo \
- @AMDEP_TRUE@ ./$(DEPDIR)/ciphers.Plo ./$(DEPDIR)/crypto.Plo \
- @AMDEP_TRUE@ ./$(DEPDIR)/digests.Plo ./$(DEPDIR)/hmac.Plo \
-! @AMDEP_TRUE@ ./$(DEPDIR)/keysstore.Plo ./$(DEPDIR)/tokens.Plo \
-! @AMDEP_TRUE@ ./$(DEPDIR)/keywrapers.Plo ./$(DEPDIR)/keytrans.Plo \
- @AMDEP_TRUE@ ./$(DEPDIR)/pkikeys.Plo ./$(DEPDIR)/signatures.Plo \
- @AMDEP_TRUE@ ./$(DEPDIR)/symkeys.Plo ./$(DEPDIR)/x509.Plo \
-! @AMDEP_TRUE@ ./$(DEPDIR)/x509vfy.Plo ./$(DEPDIR)/akmngr.Plo
- COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
- $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
- LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) \
-***************
-*** 321,341 ****
- $(NULL)
-
- libxmlsec1_nss_la_SOURCES = \
- app.c \
- bignum.c \
- ciphers.c \
- crypto.c \
- digests.c \
- hmac.c \
- pkikeys.c \
- signatures.c \
- symkeys.c \
- x509.c \
- x509vfy.c \
-- keysstore.c \
-- kt_rsa.c \
-- kw_des.c \
-- kw_aes.c \
- $(NULL)
-
- libxmlsec1_nss_la_LIBADD = \
---- 321,342 ----
- $(NULL)
-
- libxmlsec1_nss_la_SOURCES = \
-+ akmngr.c \
- app.c \
- bignum.c \
- ciphers.c \
- crypto.c \
- digests.c \
- hmac.c \
-+ keysstore.c \
-+ keytrans.c \
-+ keywrappers.c \
- pkikeys.c \
- signatures.c \
- symkeys.c \
-+ tokens.c \
- x509.c \
- x509vfy.c \
- $(NULL)
-
- libxmlsec1_nss_la_LIBADD = \
-***************
-*** 418,423 ****
---- 419,425 ----
- distclean-compile:
- -rm -f *.tab.c
-
-+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/akmngr.Plo@am__quote@
- @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/app.Plo@am__quote@
- @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bignum.Plo@am__quote@
- @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ciphers.Plo@am__quote@
-***************
-*** 425,433 ****
- @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/digests.Plo@am__quote@
- @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hmac.Plo@am__quote@
- @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/keysstore.Plo@am__quote@
-! @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/kt_rsa.Plo@am__quote@
-! @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/kw_aes.Plo@am__quote@
-! @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/kw_des.Plo@am__quote@
- @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pkikeys.Plo@am__quote@
- @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/signatures.Plo@am__quote@
- @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/symkeys.Plo@am__quote@
---- 427,435 ----
- @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/digests.Plo@am__quote@
- @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hmac.Plo@am__quote@
- @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/keysstore.Plo@am__quote@
-! @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tokens.Plo@am__quote@
-! @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/keywrapers.Plo@am__quote@
-! @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/keytrans.Plo@am__quote@
- @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pkikeys.Plo@am__quote@
- @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/signatures.Plo@am__quote@
- @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/symkeys.Plo@am__quote@
-*** misc/xmlsec1-1.2.6/src/nss/akmngr.c Fri May 11 14:47:44 2007
---- misc/build/xmlsec1-1.2.6/src/nss/akmngr.c Fri May 11 14:47:19 2007
-***************
-*** 1 ****
-! dummy
---- 1,384 ----
-! /**
-! * XMLSec library
-! *
-! * This is free software; see Copyright file in the source
-! * distribution for preciese wording.
-! *
-! * Copyright.........................
-! */
-! #include "globals.h"
-!
-! #include <nspr.h>
-! #include <nss.h>
-! #include <pk11func.h>
-! #include <cert.h>
-! #include <keyhi.h>
-!
-! #include <xmlsec/xmlsec.h>
-! #include <xmlsec/keys.h>
-! #include <xmlsec/transforms.h>
-! #include <xmlsec/errors.h>
-!
-! #include <xmlsec/nss/crypto.h>
-! #include <xmlsec/nss/tokens.h>
-! #include <xmlsec/nss/akmngr.h>
-! #include <xmlsec/nss/pkikeys.h>
-! #include <xmlsec/nss/ciphers.h>
-! #include <xmlsec/nss/keysstore.h>
-!
-! /**
-! * xmlSecNssAppliedKeysMngrCreate:
-! * @slot: array of pointers to NSS PKCS#11 slot infomation.
-! * @cSlots: number of slots in the array
-! * @handler: the pointer to NSS certificate database.
-! *
-! * Create and load NSS crypto slot and certificate database into keys manager
-! *
-! * Returns keys manager pointer on success or NULL otherwise.
-! */
-! xmlSecKeysMngrPtr
-! xmlSecNssAppliedKeysMngrCreate(
-! PK11SlotInfo** slots,
-! int cSlots,
-! CERTCertDBHandle* handler
-! ) {
-! xmlSecKeyDataStorePtr certStore = NULL ;
-! xmlSecKeysMngrPtr keyMngr = NULL ;
-! xmlSecKeyStorePtr keyStore = NULL ;
-! int islot = 0;
-! keyStore = xmlSecKeyStoreCreate( xmlSecNssKeysStoreId ) ;
-! if( keyStore == NULL ) {
-! xmlSecError( XMLSEC_ERRORS_HERE ,
-! NULL ,
-! "xmlSecKeyStoreCreate" ,
-! XMLSEC_ERRORS_R_XMLSEC_FAILED ,
-! XMLSEC_ERRORS_NO_MESSAGE ) ;
-! return NULL ;
-! }
-!
-! for (islot = 0; islot < cSlots; islot++)
-! {
-! xmlSecNssKeySlotPtr keySlot ;
-!
-! /* Create a key slot */
-! keySlot = xmlSecNssKeySlotCreate() ;
-! if( keySlot == NULL ) {
-! xmlSecError( XMLSEC_ERRORS_HERE ,
-! xmlSecErrorsSafeString( xmlSecKeyStoreGetName( keyStore ) ) ,
-! "xmlSecNssKeySlotCreate" ,
-! XMLSEC_ERRORS_R_XMLSEC_FAILED ,
-! XMLSEC_ERRORS_NO_MESSAGE ) ;
-!
-! xmlSecKeyStoreDestroy( keyStore ) ;
-! return NULL ;
-! }
-!
-! /* Set slot */
-! if( xmlSecNssKeySlotSetSlot( keySlot , slots[islot] ) < 0 ) {
-! xmlSecError( XMLSEC_ERRORS_HERE ,
-! xmlSecErrorsSafeString( xmlSecKeyStoreGetName( keyStore ) ) ,
-! "xmlSecNssKeySlotSetSlot" ,
-! XMLSEC_ERRORS_R_XMLSEC_FAILED ,
-! XMLSEC_ERRORS_NO_MESSAGE ) ;
-!
-! xmlSecKeyStoreDestroy( keyStore ) ;
-! xmlSecNssKeySlotDestroy( keySlot ) ;
-! return NULL ;
-! }
-!
-! /* Adopt keySlot */
-! if( xmlSecNssKeysStoreAdoptKeySlot( keyStore , keySlot ) < 0 ) {
-! xmlSecError( XMLSEC_ERRORS_HERE ,
-! xmlSecErrorsSafeString( xmlSecKeyStoreGetName( keyStore ) ) ,
-! "xmlSecNssKeysStoreAdoptKeySlot" ,
-! XMLSEC_ERRORS_R_XMLSEC_FAILED ,
-! XMLSEC_ERRORS_NO_MESSAGE ) ;
-!
-! xmlSecKeyStoreDestroy( keyStore ) ;
-! xmlSecNssKeySlotDestroy( keySlot ) ;
-! return NULL ;
-! }
-! }
-!
-! keyMngr = xmlSecKeysMngrCreate() ;
-! if( keyMngr == NULL ) {
-! xmlSecError( XMLSEC_ERRORS_HERE ,
-! NULL ,
-! "xmlSecKeysMngrCreate" ,
-! XMLSEC_ERRORS_R_XMLSEC_FAILED ,
-! XMLSEC_ERRORS_NO_MESSAGE ) ;
-!
-! xmlSecKeyStoreDestroy( keyStore ) ;
-! return NULL ;
-! }
-!
-! /*-
-! * Add key store to manager, from now on keys manager destroys the store if
-! * needed
-! */
-! if( xmlSecKeysMngrAdoptKeysStore( keyMngr, keyStore ) < 0 ) {
-! xmlSecError( XMLSEC_ERRORS_HERE ,
-! xmlSecErrorsSafeString( xmlSecKeyStoreGetName( keyStore ) ) ,
-! "xmlSecKeysMngrAdoptKeyStore" ,
-! XMLSEC_ERRORS_R_XMLSEC_FAILED ,
-! XMLSEC_ERRORS_NO_MESSAGE ) ;
-!
-! xmlSecKeyStoreDestroy( keyStore ) ;
-! xmlSecKeysMngrDestroy( keyMngr ) ;
-! return NULL ;
-! }
-!
-! /*-
-! * Initialize crypto library specific data in keys manager
-! */
-! if( xmlSecNssKeysMngrInit( keyMngr ) < 0 ) {
-! xmlSecError( XMLSEC_ERRORS_HERE ,
-! NULL ,
-! "xmlSecKeysMngrCreate" ,
-! XMLSEC_ERRORS_R_XMLSEC_FAILED ,
-! XMLSEC_ERRORS_NO_MESSAGE ) ;
-!
-! xmlSecKeysMngrDestroy( keyMngr ) ;
-! return NULL ;
-! }
-!
-! /*-
-! * Set certificate databse to X509 key data store
-! */
-! /**
-! * Because Tej's implementation of certDB use the default DB, so I ignore
-! * the certDB handler at present. I'll modify the cert store sources to
-! * accept particular certDB instead of default ones.
-! certStore = xmlSecKeysMngrGetDataStore( keyMngr , xmlSecNssKeyDataStoreX509Id ) ;
-! if( certStore == NULL ) {
-! xmlSecError( XMLSEC_ERRORS_HERE ,
-! xmlSecErrorsSafeString( xmlSecKeyStoreGetName( keyStore ) ) ,
-! "xmlSecKeysMngrGetDataStore" ,
-! XMLSEC_ERRORS_R_XMLSEC_FAILED ,
-! XMLSEC_ERRORS_NO_MESSAGE ) ;
-!
-! xmlSecKeysMngrDestroy( keyMngr ) ;
-! return NULL ;
-! }
-!
-! if( xmlSecNssKeyDataStoreX509SetCertDb( certStore , handler ) < 0 ) {
-! xmlSecError( XMLSEC_ERRORS_HERE ,
-! xmlSecErrorsSafeString( xmlSecKeyStoreGetName( keyStore ) ) ,
-! "xmlSecNssKeyDataStoreX509SetCertDb" ,
-! XMLSEC_ERRORS_R_XMLSEC_FAILED ,
-! XMLSEC_ERRORS_NO_MESSAGE ) ;
-!
-! xmlSecKeysMngrDestroy( keyMngr ) ;
-! return NULL ;
-! }
-! */
-!
-! /*-
-! * Set the getKey callback
-! */
-! keyMngr->getKey = xmlSecKeysMngrGetKey ;
-!
-! return keyMngr ;
-! }
-!
-! int
-! xmlSecNssAppliedKeysMngrSymKeyLoad(
-! xmlSecKeysMngrPtr mngr ,
-! PK11SymKey* symKey
-! ) {
-! xmlSecKeyPtr key ;
-! xmlSecKeyDataPtr data ;
-! xmlSecKeyStorePtr keyStore ;
-!
-! xmlSecAssert2( mngr != NULL , -1 ) ;
-! xmlSecAssert2( symKey != NULL , -1 ) ;
-!
-! keyStore = xmlSecKeysMngrGetKeysStore( mngr ) ;
-! if( keyStore == NULL ) {
-! xmlSecError( XMLSEC_ERRORS_HERE ,
-! NULL ,
-! "xmlSecKeysMngrGetKeysStore" ,
-! XMLSEC_ERRORS_R_XMLSEC_FAILED ,
-! XMLSEC_ERRORS_NO_MESSAGE ) ;
-! return(-1) ;
-! }
-! xmlSecAssert2( xmlSecKeyStoreCheckId( keyStore , xmlSecNssKeysStoreId ) , -1 ) ;
-!
-! data = xmlSecNssSymKeyDataKeyAdopt( symKey ) ;
-! if( data == NULL ) {
-! xmlSecError( XMLSEC_ERRORS_HERE ,
-! NULL ,
-! "xmlSecNssSymKeyDataKeyAdopt" ,
-! XMLSEC_ERRORS_R_XMLSEC_FAILED ,
-! XMLSEC_ERRORS_NO_MESSAGE ) ;
-! return(-1) ;
-! }
-!
-! key = xmlSecKeyCreate() ;
-! if( key == NULL ) {
-! xmlSecError( XMLSEC_ERRORS_HERE ,
-! NULL ,
-! "xmlSecNssSymKeyDataKeyAdopt" ,
-! XMLSEC_ERRORS_R_XMLSEC_FAILED ,
-! XMLSEC_ERRORS_NO_MESSAGE ) ;
-! xmlSecKeyDataDestroy( data ) ;
-! return(-1) ;
-! }
-!
-! if( xmlSecKeySetValue( key , data ) < 0 ) {
-! xmlSecError( XMLSEC_ERRORS_HERE ,
-! NULL ,
-! "xmlSecNssSymKeyDataKeyAdopt" ,
-! XMLSEC_ERRORS_R_XMLSEC_FAILED ,
-! XMLSEC_ERRORS_NO_MESSAGE ) ;
-! xmlSecKeyDataDestroy( data ) ;
-! return(-1) ;
-! }
-!
-! if( xmlSecNssKeysStoreAdoptKey( keyStore, key ) < 0 ) {
-! xmlSecError( XMLSEC_ERRORS_HERE ,
-! NULL ,
-! "xmlSecNssSymKeyDataKeyAdopt" ,
-! XMLSEC_ERRORS_R_XMLSEC_FAILED ,
-! XMLSEC_ERRORS_NO_MESSAGE ) ;
-! xmlSecKeyDestroy( key ) ;
-! return(-1) ;
-! }
-!
-! return(0) ;
-! }
-!
-! int
-! xmlSecNssAppliedKeysMngrPubKeyLoad(
-! xmlSecKeysMngrPtr mngr ,
-! SECKEYPublicKey* pubKey
-! ) {
-! xmlSecKeyPtr key ;
-! xmlSecKeyDataPtr data ;
-! xmlSecKeyStorePtr keyStore ;
-!
-! xmlSecAssert2( mngr != NULL , -1 ) ;
-! xmlSecAssert2( pubKey != NULL , -1 ) ;
-!
-! keyStore = xmlSecKeysMngrGetKeysStore( mngr ) ;
-! if( keyStore == NULL ) {
-! xmlSecError( XMLSEC_ERRORS_HERE ,
-! NULL ,
-! "xmlSecKeysMngrGetKeysStore" ,
-! XMLSEC_ERRORS_R_XMLSEC_FAILED ,
-! XMLSEC_ERRORS_NO_MESSAGE ) ;
-! return(-1) ;
-! }
-! xmlSecAssert2( xmlSecKeyStoreCheckId( keyStore , xmlSecNssKeysStoreId ) , -1 ) ;
-!
-! data = xmlSecNssPKIAdoptKey( NULL, pubKey ) ;
-! if( data == NULL ) {
-! xmlSecError( XMLSEC_ERRORS_HERE ,
-! NULL ,
-! "xmlSecNssPKIAdoptKey" ,
-! XMLSEC_ERRORS_R_XMLSEC_FAILED ,
-! XMLSEC_ERRORS_NO_MESSAGE ) ;
-! return(-1) ;
-! }
-!
-! key = xmlSecKeyCreate() ;
-! if( key == NULL ) {
-! xmlSecError( XMLSEC_ERRORS_HERE ,
-! NULL ,
-! "xmlSecNssSymKeyDataKeyAdopt" ,
-! XMLSEC_ERRORS_R_XMLSEC_FAILED ,
-! XMLSEC_ERRORS_NO_MESSAGE ) ;
-! xmlSecKeyDataDestroy( data ) ;
-! return(-1) ;
-! }
-!
-! if( xmlSecKeySetValue( key , data ) < 0 ) {
-! xmlSecError( XMLSEC_ERRORS_HERE ,
-! NULL ,
-! "xmlSecNssSymKeyDataKeyAdopt" ,
-! XMLSEC_ERRORS_R_XMLSEC_FAILED ,
-! XMLSEC_ERRORS_NO_MESSAGE ) ;
-! xmlSecKeyDataDestroy( data ) ;
-! return(-1) ;
-! }
-!
-! if( xmlSecNssKeysStoreAdoptKey( keyStore, key ) < 0 ) {
-! xmlSecError( XMLSEC_ERRORS_HERE ,
-! NULL ,
-! "xmlSecNssSymKeyDataKeyAdopt" ,
-! XMLSEC_ERRORS_R_XMLSEC_FAILED ,
-! XMLSEC_ERRORS_NO_MESSAGE ) ;
-! xmlSecKeyDestroy( key ) ;
-! return(-1) ;
-! }
-!
-! return(0) ;
-! }
-!
-! int
-! xmlSecNssAppliedKeysMngrPriKeyLoad(
-! xmlSecKeysMngrPtr mngr ,
-! SECKEYPrivateKey* priKey
-! ) {
-! xmlSecKeyPtr key ;
-! xmlSecKeyDataPtr data ;
-! xmlSecKeyStorePtr keyStore ;
-!
-! xmlSecAssert2( mngr != NULL , -1 ) ;
-! xmlSecAssert2( priKey != NULL , -1 ) ;
-!
-! keyStore = xmlSecKeysMngrGetKeysStore( mngr ) ;
-! if( keyStore == NULL ) {
-! xmlSecError( XMLSEC_ERRORS_HERE ,
-! NULL ,
-! "xmlSecKeysMngrGetKeysStore" ,
-! XMLSEC_ERRORS_R_XMLSEC_FAILED ,
-! XMLSEC_ERRORS_NO_MESSAGE ) ;
-! return(-1) ;
-! }
-! xmlSecAssert2( xmlSecKeyStoreCheckId( keyStore , xmlSecNssKeysStoreId ) , -1 ) ;
-!
-! data = xmlSecNssPKIAdoptKey( priKey, NULL ) ;
-! if( data == NULL ) {
-! xmlSecError( XMLSEC_ERRORS_HERE ,
-! NULL ,
-! "xmlSecNssPKIAdoptKey" ,
-! XMLSEC_ERRORS_R_XMLSEC_FAILED ,
-! XMLSEC_ERRORS_NO_MESSAGE ) ;
-! return(-1) ;
-! }
-!
-! key = xmlSecKeyCreate() ;
-! if( key == NULL ) {
-! xmlSecError( XMLSEC_ERRORS_HERE ,
-! NULL ,
-! "xmlSecNssSymKeyDataKeyAdopt" ,
-! XMLSEC_ERRORS_R_XMLSEC_FAILED ,
-! XMLSEC_ERRORS_NO_MESSAGE ) ;
-! xmlSecKeyDataDestroy( data ) ;
-! return(-1) ;
-! }
-!
-! if( xmlSecKeySetValue( key , data ) < 0 ) {
-! xmlSecError( XMLSEC_ERRORS_HERE ,
-! NULL ,
-! "xmlSecNssSymKeyDataKeyAdopt" ,
-! XMLSEC_ERRORS_R_XMLSEC_FAILED ,
-! XMLSEC_ERRORS_NO_MESSAGE ) ;
-! xmlSecKeyDataDestroy( data ) ;
-! return(-1) ;
-! }
-!
-! if( xmlSecNssKeysStoreAdoptKey( keyStore, key ) < 0 ) {
-! xmlSecError( XMLSEC_ERRORS_HERE ,
-! NULL ,
-! "xmlSecNssSymKeyDataKeyAdopt" ,
-! XMLSEC_ERRORS_R_XMLSEC_FAILED ,
-! XMLSEC_ERRORS_NO_MESSAGE ) ;
-! xmlSecKeyDestroy( key ) ;
-! return(-1) ;
-! }
-!
-! return(0) ;
-! }
-!
-*** misc/xmlsec1-1.2.6/src/nss/ciphers.c Fri Sep 26 02:58:15 2003
---- misc/build/xmlsec1-1.2.6/src/nss/ciphers.c Fri May 11 14:47:19 2007
-***************
-*** 1,838 ****
-! /**
-! * XMLSec library
-! *
-! * This is free software; see Copyright file in the source
-! * distribution for preciese wording.
-! *
-! * Copyright (C) 2002-2003 Aleksey Sanin <aleksey@aleksey.com>
-! * Copyright (c) 2003 America Online, Inc. All rights reserved.
-! */
- #include "globals.h"
-
- #include <string.h>
-
-- #include <nspr.h>
- #include <nss.h>
-- #include <secoid.h>
- #include <pk11func.h>
-
- #include <xmlsec/xmlsec.h>
- #include <xmlsec/keys.h>
- #include <xmlsec/transforms.h>
- #include <xmlsec/errors.h>
-
- #include <xmlsec/nss/crypto.h>
-
-! #define XMLSEC_NSS_MAX_KEY_SIZE 32
-! #define XMLSEC_NSS_MAX_IV_SIZE 32
-! #define XMLSEC_NSS_MAX_BLOCK_SIZE 32
-!
-! /**************************************************************************
-! *
-! * Internal Nss Block cipher CTX
- *
-! *****************************************************************************/
-! typedef struct _xmlSecNssBlockCipherCtx xmlSecNssBlockCipherCtx,
-! *xmlSecNssBlockCipherCtxPtr;
- struct _xmlSecNssBlockCipherCtx {
-! CK_MECHANISM_TYPE cipher;
-! PK11Context* cipherCtx;
-! xmlSecKeyDataId keyId;
-! int keyInitialized;
-! int ctxInitialized;
-! xmlSecByte key[XMLSEC_NSS_MAX_KEY_SIZE];
-! xmlSecSize keySize;
-! xmlSecByte iv[XMLSEC_NSS_MAX_IV_SIZE];
-! xmlSecSize ivSize;
-! };
-! static int xmlSecNssBlockCipherCtxInit (xmlSecNssBlockCipherCtxPtr ctx,
-! xmlSecBufferPtr in,
-! xmlSecBufferPtr out,
-! int encrypt,
-! const xmlChar* cipherName,
-! xmlSecTransformCtxPtr transformCtx);
-! static int xmlSecNssBlockCipherCtxUpdate (xmlSecNssBlockCipherCtxPtr ctx,
-! xmlSecBufferPtr in,
-! xmlSecBufferPtr out,
-! int encrypt,
-! const xmlChar* cipherName,
-! xmlSecTransformCtxPtr transformCtx);
-! static int xmlSecNssBlockCipherCtxFinal (xmlSecNssBlockCipherCtxPtr ctx,
-! xmlSecBufferPtr in,
-! xmlSecBufferPtr out,
-! int encrypt,
-! const xmlChar* cipherName,
-! xmlSecTransformCtxPtr transformCtx);
-! static int
-! xmlSecNssBlockCipherCtxInit(xmlSecNssBlockCipherCtxPtr ctx,
-! xmlSecBufferPtr in, xmlSecBufferPtr out,
-! int encrypt,
-! const xmlChar* cipherName,
-! xmlSecTransformCtxPtr transformCtx) {
-! SECItem keyItem;
-! SECItem ivItem;
-! PK11SlotInfo* slot;
-! PK11SymKey* symKey;
-! int ivLen;
-! SECStatus rv;
-! int ret;
-!
-! xmlSecAssert2(ctx != NULL, -1);
-! xmlSecAssert2(ctx->cipher != 0, -1);
-! xmlSecAssert2(ctx->cipherCtx == NULL, -1);
-! xmlSecAssert2(ctx->keyInitialized != 0, -1);
-! xmlSecAssert2(ctx->ctxInitialized == 0, -1);
-! xmlSecAssert2(in != NULL, -1);
-! xmlSecAssert2(out != NULL, -1);
-! xmlSecAssert2(transformCtx != NULL, -1);
-!
-! ivLen = PK11_GetIVLength(ctx->cipher);
-! xmlSecAssert2(ivLen > 0, -1);
-! xmlSecAssert2((xmlSecSize)ivLen <= sizeof(ctx->iv), -1);
-!
-! if(encrypt) {
-! /* generate random iv */
-! rv = PK11_GenerateRandom(ctx->iv, ivLen);
-! if(rv != SECSuccess) {
-! xmlSecError(XMLSEC_ERRORS_HERE,
-! xmlSecErrorsSafeString(cipherName),
-! "PK11_GenerateRandom",
-! XMLSEC_ERRORS_R_CRYPTO_FAILED,
-! "size=%d", ivLen);
-! return(-1);
-! }
-!
-! /* write iv to the output */
-! ret = xmlSecBufferAppend(out, ctx->iv, ivLen);
-! if(ret < 0) {
-! xmlSecError(XMLSEC_ERRORS_HERE,
-! xmlSecErrorsSafeString(cipherName),
-! "xmlSecBufferAppend",
-! XMLSEC_ERRORS_R_XMLSEC_FAILED,
-! "size=%d", ivLen);
-! return(-1);
-! }
-!
-! } else {
-! /* if we don't have enough data, exit and hope that
-! * we'll have iv next time */
-! if(xmlSecBufferGetSize(in) < (xmlSecSize)ivLen) {
-! return(0);
-! }
-!
-! /* copy iv to our buffer*/
-! xmlSecAssert2(xmlSecBufferGetData(in) != NULL, -1);
-! memcpy(ctx->iv, xmlSecBufferGetData(in), ivLen);
-!
-! /* and remove from input */
-! ret = xmlSecBufferRemoveHead(in, ivLen);
-! if(ret < 0) {
-! xmlSecError(XMLSEC_ERRORS_HERE,
-! xmlSecErrorsSafeString(cipherName),
-! "xmlSecBufferRemoveHead",
-! XMLSEC_ERRORS_R_XMLSEC_FAILED,
-! "size=%d", ivLen);
-! return(-1);
- }
-! }
-
-! memset(&keyItem, 0, sizeof(keyItem));
-! keyItem.data = ctx->key;
-! keyItem.len = ctx->keySize;
-! memset(&ivItem, 0, sizeof(ivItem));
-! ivItem.data = ctx->iv;
-! ivItem.len = ctx->ivSize;
-!
-! slot = PK11_GetBestSlot(ctx->cipher, NULL);
-! if(slot == NULL) {
-! xmlSecError(XMLSEC_ERRORS_HERE,
-! xmlSecErrorsSafeString(cipherName),
-! "PK11_GetBestSlot",
-! XMLSEC_ERRORS_R_CRYPTO_FAILED,
-! XMLSEC_ERRORS_NO_MESSAGE);
-! return(-1);
-! }
-!
-! symKey = PK11_ImportSymKey(slot, ctx->cipher, PK11_OriginDerive,
-! CKA_SIGN, &keyItem, NULL);
-! if(symKey == NULL) {
-! xmlSecError(XMLSEC_ERRORS_HERE,
-! xmlSecErrorsSafeString(cipherName),
-! "PK11_ImportSymKey",
-! XMLSEC_ERRORS_R_CRYPTO_FAILED,
-! XMLSEC_ERRORS_NO_MESSAGE);
-! PK11_FreeSlot(slot);
-! return(-1);
-! }
-
-! ctx->cipherCtx = PK11_CreateContextBySymKey(ctx->cipher,
-! (encrypt) ? CKA_ENCRYPT : CKA_DECRYPT,
-! symKey, &ivItem);
-! if(ctx->cipherCtx == NULL) {
-! xmlSecError(XMLSEC_ERRORS_HERE,
-! xmlSecErrorsSafeString(cipherName),
-! "PK11_CreateContextBySymKey",
-! XMLSEC_ERRORS_R_CRYPTO_FAILED,
-! XMLSEC_ERRORS_NO_MESSAGE);
-! PK11_FreeSymKey(symKey);
-! PK11_FreeSlot(slot);
-! return(-1);
- }
-!
-! ctx->ctxInitialized = 1;
-! PK11_FreeSymKey(symKey);
-! PK11_FreeSlot(slot);
-! return(0);
- }
-
-! static int
-! xmlSecNssBlockCipherCtxUpdate(xmlSecNssBlockCipherCtxPtr ctx,
-! xmlSecBufferPtr in, xmlSecBufferPtr out,
-! int encrypt,
-! const xmlChar* cipherName,
-! xmlSecTransformCtxPtr transformCtx) {
-! xmlSecSize inSize, inBlocks, outSize;
-! int blockLen;
-! int outLen = 0;
-! xmlSecByte* outBuf;
-! SECStatus rv;
-! int ret;
-!
-! xmlSecAssert2(ctx != NULL, -1);
-! xmlSecAssert2(ctx->cipher != 0, -1);
-! xmlSecAssert2(ctx->cipherCtx != NULL, -1);
-! xmlSecAssert2(ctx->ctxInitialized != 0, -1);
-! xmlSecAssert2(in != NULL, -1);
-! xmlSecAssert2(out != NULL, -1);
-! xmlSecAssert2(transformCtx != NULL, -1);
-
-! blockLen = PK11_GetBlockSize(ctx->cipher, NULL);
-! xmlSecAssert2(blockLen > 0, -1);
-
-! inSize = xmlSecBufferGetSize(in);
-! outSize = xmlSecBufferGetSize(out);
-!
-! if(inSize < (xmlSecSize)blockLen) {
-! return(0);
-! }
-
-! if(encrypt) {
-! inBlocks = inSize / ((xmlSecSize)blockLen);
-! } else {
-! /* we want to have the last block in the input buffer
-! * for padding check */
-! inBlocks = (inSize - 1) / ((xmlSecSize)blockLen);
-! }
-! inSize = inBlocks * ((xmlSecSize)blockLen);
-
-! /* we write out the input size plus may be one block */
-! ret = xmlSecBufferSetMaxSize(out, outSize + inSize + blockLen);
-! if(ret < 0) {
-! xmlSecError(XMLSEC_ERRORS_HERE,
-! xmlSecErrorsSafeString(cipherName),
-! "xmlSecBufferSetMaxSize",
-! XMLSEC_ERRORS_R_XMLSEC_FAILED,
-! "size=%d", outSize + inSize + blockLen);
-! return(-1);
-! }
-! outBuf = xmlSecBufferGetData(out) + outSize;
-!
-! rv = PK11_CipherOp(ctx->cipherCtx, outBuf, &outLen, inSize + blockLen,
-! xmlSecBufferGetData(in), inSize);
-! if(rv != SECSuccess) {
-! xmlSecError(XMLSEC_ERRORS_HERE,
-! xmlSecErrorsSafeString(cipherName),
-! "PK11_CipherOp",
-! XMLSEC_ERRORS_R_CRYPTO_FAILED,
-! XMLSEC_ERRORS_NO_MESSAGE);
-! return(-1);
-! }
-! xmlSecAssert2((xmlSecSize)outLen == inSize, -1);
-!
-! /* set correct output buffer size */
-! ret = xmlSecBufferSetSize(out, outSize + outLen);
-! if(ret < 0) {
-! xmlSecError(XMLSEC_ERRORS_HERE,
-! xmlSecErrorsSafeString(cipherName),
-! "xmlSecBufferSetSize",
-! XMLSEC_ERRORS_R_XMLSEC_FAILED,
-! "size=%d", outSize + outLen);
-! return(-1);
-! }
-!
-! /* remove the processed block from input */
-! ret = xmlSecBufferRemoveHead(in, inSize);
-! if(ret < 0) {
-! xmlSecError(XMLSEC_ERRORS_HERE,
-! xmlSecErrorsSafeString(cipherName),
-! "xmlSecBufferRemoveHead",
-! XMLSEC_ERRORS_R_XMLSEC_FAILED,
-! "size=%d", inSize);
-! return(-1);
-! }
-! return(0);
- }
-
-! static int
-! xmlSecNssBlockCipherCtxFinal(xmlSecNssBlockCipherCtxPtr ctx,
-! xmlSecBufferPtr in,
-! xmlSecBufferPtr out,
-! int encrypt,
-! const xmlChar* cipherName,
-! xmlSecTransformCtxPtr transformCtx) {
-! xmlSecSize inSize, outSize;
-! int blockLen, outLen = 0;
-! xmlSecByte* inBuf;
-! xmlSecByte* outBuf;
-! SECStatus rv;
-! int ret;
-!
-! xmlSecAssert2(ctx != NULL, -1);
-! xmlSecAssert2(ctx->cipher != 0, -1);
-! xmlSecAssert2(ctx->cipherCtx != NULL, -1);
-! xmlSecAssert2(ctx->ctxInitialized != 0, -1);
-! xmlSecAssert2(in != NULL, -1);
-! xmlSecAssert2(out != NULL, -1);
-! xmlSecAssert2(transformCtx != NULL, -1);
-!
-! blockLen = PK11_GetBlockSize(ctx->cipher, NULL);
-! xmlSecAssert2(blockLen > 0, -1);
-
-! inSize = xmlSecBufferGetSize(in);
-! outSize = xmlSecBufferGetSize(out);
-
-! if(encrypt != 0) {
-! xmlSecAssert2(inSize < (xmlSecSize)blockLen, -1);
-!
-! /* create padding */
-! ret = xmlSecBufferSetMaxSize(in, blockLen);
-! if(ret < 0) {
-! xmlSecError(XMLSEC_ERRORS_HERE,
-! xmlSecErrorsSafeString(cipherName),
-! "xmlSecBufferSetMaxSize",
-! XMLSEC_ERRORS_R_XMLSEC_FAILED,
-! "size=%d", blockLen);
-! return(-1);
-! }
-! inBuf = xmlSecBufferGetData(in);
-!
-! /* generate random padding */
-! if((xmlSecSize)blockLen > (inSize + 1)) {
-! rv = PK11_GenerateRandom(inBuf + inSize, blockLen - inSize - 1);
-! if(rv != SECSuccess) {
-! xmlSecError(XMLSEC_ERRORS_HERE,
-! xmlSecErrorsSafeString(cipherName),
-! "PK11_GenerateRandom",
-! XMLSEC_ERRORS_R_CRYPTO_FAILED,
-! "size=%d", blockLen - inSize - 1);
-! return(-1);
-! }
-! }
-! inBuf[blockLen - 1] = blockLen - inSize;
-! inSize = blockLen;
-! } else {
-! if(inSize != (xmlSecSize)blockLen) {
-! xmlSecError(XMLSEC_ERRORS_HERE,
-! xmlSecErrorsSafeString(cipherName),
-! NULL,
-! XMLSEC_ERRORS_R_INVALID_DATA,
-! "data=%d;block=%d", inSize, blockLen);
-! return(-1);
- }
-- }
--
-- /* process last block */
-- ret = xmlSecBufferSetMaxSize(out, outSize + 2 * blockLen);
-- if(ret < 0) {
-- xmlSecError(XMLSEC_ERRORS_HERE,
-- xmlSecErrorsSafeString(cipherName),
-- "xmlSecBufferSetMaxSize",
-- XMLSEC_ERRORS_R_XMLSEC_FAILED,
-- "size=%d", outSize + 2 * blockLen);
-- return(-1);
-- }
-- outBuf = xmlSecBufferGetData(out) + outSize;
-
-! rv = PK11_CipherOp(ctx->cipherCtx, outBuf, &outLen, 2 * blockLen,
-! xmlSecBufferGetData(in), inSize);
-! if(rv != SECSuccess) {
-! xmlSecError(XMLSEC_ERRORS_HERE,
-! xmlSecErrorsSafeString(cipherName),
-! "PK11_CipherOp",
-! XMLSEC_ERRORS_R_CRYPTO_FAILED,
-! XMLSEC_ERRORS_NO_MESSAGE);
-! return(-1);
-! }
-! xmlSecAssert2((xmlSecSize)outLen == inSize, -1);
-!
-! if(encrypt == 0) {
-! /* check padding */
-! if(outLen < outBuf[blockLen - 1]) {
-! xmlSecError(XMLSEC_ERRORS_HERE,
-! xmlSecErrorsSafeString(cipherName),
-! NULL,
-! XMLSEC_ERRORS_R_INVALID_DATA,
-! "padding=%d;buffer=%d",
-! outBuf[blockLen - 1], outLen);
-! return(-1);
-! }
-! outLen -= outBuf[blockLen - 1];
-! }
-!
-! /* set correct output buffer size */
-! ret = xmlSecBufferSetSize(out, outSize + outLen);
-! if(ret < 0) {
-! xmlSecError(XMLSEC_ERRORS_HERE,
-! xmlSecErrorsSafeString(cipherName),
-! "xmlSecBufferSetSize",
-! XMLSEC_ERRORS_R_XMLSEC_FAILED,
-! "size=%d", outSize + outLen);
-! return(-1);
-! }
-
-! /* remove the processed block from input */
-! ret = xmlSecBufferRemoveHead(in, inSize);
-! if(ret < 0) {
-! xmlSecError(XMLSEC_ERRORS_HERE,
-! xmlSecErrorsSafeString(cipherName),
-! "xmlSecBufferRemoveHead",
-! XMLSEC_ERRORS_R_XMLSEC_FAILED,
-! "size=%d", inSize);
-! return(-1);
-! }
-
-! return(0);
- }
-
-!
-! /******************************************************************************
-! *
-! * EVP Block Cipher transforms
- *
-! * xmlSecNssBlockCipherCtx block is located after xmlSecTransform structure
- *
-! *****************************************************************************/
-! #define xmlSecNssBlockCipherSize \
-! (sizeof(xmlSecTransform) + sizeof(xmlSecNssBlockCipherCtx))
-! #define xmlSecNssBlockCipherGetCtx(transform) \
-! ((xmlSecNssBlockCipherCtxPtr)(((xmlSecByte*)(transform)) + sizeof(xmlSecTransform)))
-!
-! static int xmlSecNssBlockCipherInitialize (xmlSecTransformPtr transform);
-! static void xmlSecNssBlockCipherFinalize (xmlSecTransformPtr transform);
-! static int xmlSecNssBlockCipherSetKeyReq (xmlSecTransformPtr transform,
-! xmlSecKeyReqPtr keyReq);
-! static int xmlSecNssBlockCipherSetKey (xmlSecTransformPtr transform,
-! xmlSecKeyPtr key);
-! static int xmlSecNssBlockCipherExecute (xmlSecTransformPtr transform,
-! int last,
-! xmlSecTransformCtxPtr transformCtx);
-! static int xmlSecNssBlockCipherCheckId (xmlSecTransformPtr transform);
-!
-!
-
-! static int
-! xmlSecNssBlockCipherCheckId(xmlSecTransformPtr transform) {
-! #ifndef XMLSEC_NO_DES
-! if(xmlSecTransformCheckId(transform, xmlSecNssTransformDes3CbcId)) {
-! return(1);
-! }
-! #endif /* XMLSEC_NO_DES */
-
-! #ifndef XMLSEC_NO_AES
-! if(xmlSecTransformCheckId(transform, xmlSecNssTransformAes128CbcId) ||
-! xmlSecTransformCheckId(transform, xmlSecNssTransformAes192CbcId) ||
-! xmlSecTransformCheckId(transform, xmlSecNssTransformAes256CbcId)) {
-!
-! return(1);
-! }
-! #endif /* XMLSEC_NO_AES */
-!
-! return(0);
- }
-
-! static int
-! xmlSecNssBlockCipherInitialize(xmlSecTransformPtr transform) {
-! xmlSecNssBlockCipherCtxPtr ctx;
-!
-! xmlSecAssert2(xmlSecNssBlockCipherCheckId(transform), -1);
-! xmlSecAssert2(xmlSecTransformCheckSize(transform, xmlSecNssBlockCipherSize), -1);
-
-! ctx = xmlSecNssBlockCipherGetCtx(transform);
-! xmlSecAssert2(ctx != NULL, -1);
-!
-! memset(ctx, 0, sizeof(xmlSecNssBlockCipherCtx));
-
-! #ifndef XMLSEC_NO_DES
-! if(transform->id == xmlSecNssTransformDes3CbcId) {
-! ctx->cipher = CKM_DES3_CBC;
-! ctx->keyId = xmlSecNssKeyDataDesId;
-! ctx->keySize = 24;
-! } else
-! #endif /* XMLSEC_NO_DES */
-!
-! #ifndef XMLSEC_NO_AES
-! if(transform->id == xmlSecNssTransformAes128CbcId) {
-! ctx->cipher = CKM_AES_CBC;
-! ctx->keyId = xmlSecNssKeyDataAesId;
-! ctx->keySize = 16;
-! } else if(transform->id == xmlSecNssTransformAes192CbcId) {
-! ctx->cipher = CKM_AES_CBC;
-! ctx->keyId = xmlSecNssKeyDataAesId;
-! ctx->keySize = 24;
-! } else if(transform->id == xmlSecNssTransformAes256CbcId) {
-! ctx->cipher = CKM_AES_CBC;
-! ctx->keyId = xmlSecNssKeyDataAesId;
-! ctx->keySize = 32;
-! } else
-! #endif /* XMLSEC_NO_AES */
-!
-! if(1) {
-! xmlSecError(XMLSEC_ERRORS_HERE,
-! xmlSecErrorsSafeString(xmlSecTransformGetName(transform)),
-! NULL,
-! XMLSEC_ERRORS_R_INVALID_TRANSFORM,
-! XMLSEC_ERRORS_NO_MESSAGE);
-! return(-1);
-! }
-!
-! return(0);
- }
-
-! static void
-! xmlSecNssBlockCipherFinalize(xmlSecTransformPtr transform) {
-! xmlSecNssBlockCipherCtxPtr ctx;
-!
-! xmlSecAssert(xmlSecNssBlockCipherCheckId(transform));
-! xmlSecAssert(xmlSecTransformCheckSize(transform, xmlSecNssBlockCipherSize));
-
-! ctx = xmlSecNssBlockCipherGetCtx(transform);
-! xmlSecAssert(ctx != NULL);
-
-! if(ctx->cipherCtx != NULL) {
-! PK11_DestroyContext(ctx->cipherCtx, PR_TRUE);
-! }
-!
-! memset(ctx, 0, sizeof(xmlSecNssBlockCipherCtx));
- }
-
-! static int
-! xmlSecNssBlockCipherSetKeyReq(xmlSecTransformPtr transform, xmlSecKeyReqPtr keyReq) {
-! xmlSecNssBlockCipherCtxPtr ctx;
-!
-! xmlSecAssert2(xmlSecNssBlockCipherCheckId(transform), -1);
-! xmlSecAssert2((transform->operation == xmlSecTransformOperationEncrypt) || (transform->operation == xmlSecTransformOperationDecrypt), -1);
-! xmlSecAssert2(xmlSecTransformCheckSize(transform, xmlSecNssBlockCipherSize), -1);
-! xmlSecAssert2(keyReq != NULL, -1);
-!
-! ctx = xmlSecNssBlockCipherGetCtx(transform);
-! xmlSecAssert2(ctx != NULL, -1);
-! xmlSecAssert2(ctx->keyId != NULL, -1);
-!
-! keyReq->keyId = ctx->keyId;
-! keyReq->keyType = xmlSecKeyDataTypeSymmetric;
-! if(transform->operation == xmlSecTransformOperationEncrypt) {
-! keyReq->keyUsage = xmlSecKeyUsageEncrypt;
-! } else {
-! keyReq->keyUsage = xmlSecKeyUsageDecrypt;
-! }
-! keyReq->keyBitsSize = 8 * ctx->keySize;
-! return(0);
-! }
-
-! static int
-! xmlSecNssBlockCipherSetKey(xmlSecTransformPtr transform, xmlSecKeyPtr key) {
-! xmlSecNssBlockCipherCtxPtr ctx;
-! xmlSecBufferPtr buffer;
-!
-! xmlSecAssert2(xmlSecNssBlockCipherCheckId(transform), -1);
-! xmlSecAssert2((transform->operation == xmlSecTransformOperationEncrypt) || (transform->operation == xmlSecTransformOperationDecrypt), -1);
-! xmlSecAssert2(xmlSecTransformCheckSize(transform, xmlSecNssBlockCipherSize), -1);
-! xmlSecAssert2(key != NULL, -1);
-!
-! ctx = xmlSecNssBlockCipherGetCtx(transform);
-! xmlSecAssert2(ctx != NULL, -1);
-! xmlSecAssert2(ctx->cipher != 0, -1);
-! xmlSecAssert2(ctx->keyInitialized == 0, -1);
-! xmlSecAssert2(ctx->keyId != NULL, -1);
-! xmlSecAssert2(xmlSecKeyCheckId(key, ctx->keyId), -1);
-!
-! xmlSecAssert2(ctx->keySize > 0, -1);
-! xmlSecAssert2(ctx->keySize <= sizeof(ctx->key), -1);
-!
-! buffer = xmlSecKeyDataBinaryValueGetBuffer(xmlSecKeyGetValue(key));
-! xmlSecAssert2(buffer != NULL, -1);
-!
-! if(xmlSecBufferGetSize(buffer) < ctx->keySize) {
-! xmlSecError(XMLSEC_ERRORS_HERE,
-! xmlSecErrorsSafeString(xmlSecTransformGetName(transform)),
-! NULL,
-! XMLSEC_ERRORS_R_INVALID_KEY_DATA_SIZE,
-! "keySize=%d;expected=%d",
-! xmlSecBufferGetSize(buffer), ctx->keySize);
-! return(-1);
-! }
-!
-! xmlSecAssert2(xmlSecBufferGetData(buffer) != NULL, -1);
-! memcpy(ctx->key, xmlSecBufferGetData(buffer), ctx->keySize);
-!
-! ctx->keyInitialized = 1;
-! return(0);
- }
-
- static int
-! xmlSecNssBlockCipherExecute(xmlSecTransformPtr transform, int last, xmlSecTransformCtxPtr transformCtx) {
-! xmlSecNssBlockCipherCtxPtr ctx;
-! xmlSecBufferPtr in, out;
-! int ret;
-!
-! xmlSecAssert2(xmlSecNssBlockCipherCheckId(transform), -1);
-! xmlSecAssert2((transform->operation == xmlSecTransformOperationEncrypt) || (transform->operation == xmlSecTransformOperationDecrypt), -1);
-! xmlSecAssert2(xmlSecTransformCheckSize(transform, xmlSecNssBlockCipherSize), -1);
-! xmlSecAssert2(transformCtx != NULL, -1);
-!
-! in = &(transform->inBuf);
-! out = &(transform->outBuf);
-!
-! ctx = xmlSecNssBlockCipherGetCtx(transform);
-! xmlSecAssert2(ctx != NULL, -1);
-
-! if(transform->status == xmlSecTransformStatusNone) {
-! transform->status = xmlSecTransformStatusWorking;
-! }
-!
-! if(transform->status == xmlSecTransformStatusWorking) {
-! if(ctx->ctxInitialized == 0) {
-! ret = xmlSecNssBlockCipherCtxInit(ctx, in, out,
-! (transform->operation == xmlSecTransformOperationEncrypt) ? 1 : 0,
-! xmlSecTransformGetName(transform), transformCtx);
-! if(ret < 0) {
-! xmlSecError(XMLSEC_ERRORS_HERE,
-! xmlSecErrorsSafeString(xmlSecTransformGetName(transform)),
-! "xmlSecNssBlockCipherCtxInit",
-! XMLSEC_ERRORS_R_XMLSEC_FAILED,
-! XMLSEC_ERRORS_NO_MESSAGE);
-! return(-1);
-! }
-! }
-! if((ctx->ctxInitialized == 0) && (last != 0)) {
-! xmlSecError(XMLSEC_ERRORS_HERE,
-! xmlSecErrorsSafeString(xmlSecTransformGetName(transform)),
-! NULL,
-! XMLSEC_ERRORS_R_INVALID_DATA,
-! "not enough data to initialize transform");
-! return(-1);
-! }
-!
-! if(ctx->ctxInitialized != 0) {
-! ret = xmlSecNssBlockCipherCtxUpdate(ctx, in, out,
-! (transform->operation == xmlSecTransformOperationEncrypt) ? 1 : 0,
-! xmlSecTransformGetName(transform), transformCtx);
-! if(ret < 0) {
-! xmlSecError(XMLSEC_ERRORS_HERE,
-! xmlSecErrorsSafeString(xmlSecTransformGetName(transform)),
-! "xmlSecNssBlockCipherCtxUpdate",
-! XMLSEC_ERRORS_R_XMLSEC_FAILED,
-! XMLSEC_ERRORS_NO_MESSAGE);
-! return(-1);
-! }
-! }
-!
-! if(last) {
-! ret = xmlSecNssBlockCipherCtxFinal(ctx, in, out,
-! (transform->operation == xmlSecTransformOperationEncrypt) ? 1 : 0,
-! xmlSecTransformGetName(transform), transformCtx);
-! if(ret < 0) {
-! xmlSecError(XMLSEC_ERRORS_HERE,
-! xmlSecErrorsSafeString(xmlSecTransformGetName(transform)),
-! "xmlSecNssBlockCipherCtxFinal",
-! XMLSEC_ERRORS_R_XMLSEC_FAILED,
-! XMLSEC_ERRORS_NO_MESSAGE);
-! return(-1);
-! }
-! transform->status = xmlSecTransformStatusFinished;
-! }
-! } else if(transform->status == xmlSecTransformStatusFinished) {
-! /* the only way we can get here is if there is no input */
-! xmlSecAssert2(xmlSecBufferGetSize(in) == 0, -1);
-! } else if(transform->status == xmlSecTransformStatusNone) {
-! /* the only way we can get here is if there is no enough data in the input */
-! xmlSecAssert2(last == 0, -1);
-! } else {
-! xmlSecError(XMLSEC_ERRORS_HERE,
-! xmlSecErrorsSafeString(xmlSecTransformGetName(transform)),
-! NULL,
-! XMLSEC_ERRORS_R_INVALID_STATUS,
-! "status=%d", transform->status);
-! return(-1);
-! }
-!
-! return(0);
- }
-
-
-! #ifndef XMLSEC_NO_AES
-! /*********************************************************************
- *
-! * AES CBC cipher transforms
- *
-! ********************************************************************/
- static xmlSecTransformKlass xmlSecNssAes128CbcKlass = {
-! /* klass/object sizes */
-! sizeof(xmlSecTransformKlass), /* xmlSecSize klassSize */
-! xmlSecNssBlockCipherSize, /* xmlSecSize objSize */
-!
-! xmlSecNameAes128Cbc, /* const xmlChar* name; */
-! xmlSecHrefAes128Cbc, /* const xmlChar* href; */
-! xmlSecTransformUsageEncryptionMethod, /* xmlSecAlgorithmUsage usage; */
-!
-! xmlSecNssBlockCipherInitialize, /* xmlSecTransformInitializeMethod initialize; */
-! xmlSecNssBlockCipherFinalize, /* xmlSecTransformFinalizeMethod finalize; */
-! NULL, /* xmlSecTransformNodeReadMethod readNode; */
-! NULL, /* xmlSecTransformNodeWriteMethod writeNode; */
-! xmlSecNssBlockCipherSetKeyReq, /* xmlSecTransformSetKeyMethod setKeyReq; */
-! xmlSecNssBlockCipherSetKey, /* xmlSecTransformSetKeyMethod setKey; */
-! NULL, /* xmlSecTransformValidateMethod validate; */
-! xmlSecTransformDefaultGetDataType, /* xmlSecTransformGetDataTypeMethod getDataType; */
-! xmlSecTransformDefaultPushBin, /* xmlSecTransformPushBinMethod pushBin; */
-! xmlSecTransformDefaultPopBin, /* xmlSecTransformPopBinMethod popBin; */
-! NULL, /* xmlSecTransformPushXmlMethod pushXml; */
-! NULL, /* xmlSecTransformPopXmlMethod popXml; */
-! xmlSecNssBlockCipherExecute, /* xmlSecTransformExecuteMethod execute; */
-!
-! NULL, /* void* reserved0; */
-! NULL, /* void* reserved1; */
-! };
-
- /**
-! * xmlSecNssTransformAes128CbcGetKlass:
-! *
-! * AES 128 CBC encryption transform klass.
-! *
-! * Returns pointer to AES 128 CBC encryption transform.
-! */
-! xmlSecTransformId
-! xmlSecNssTransformAes128CbcGetKlass(void) {
-! return(&xmlSecNssAes128CbcKlass);
- }
-
-- static xmlSecTransformKlass xmlSecNssAes192CbcKlass = {
-- /* klass/object sizes */
-- sizeof(xmlSecTransformKlass), /* xmlSecSize klassSize */
-- xmlSecNssBlockCipherSize, /* xmlSecSize objSize */
--
-- xmlSecNameAes192Cbc, /* const xmlChar* name; */
-- xmlSecHrefAes192Cbc, /* const xmlChar* href; */
-- xmlSecTransformUsageEncryptionMethod, /* xmlSecAlgorithmUsage usage; */
--
-- xmlSecNssBlockCipherInitialize, /* xmlSecTransformInitializeMethod initialize; */
-- xmlSecNssBlockCipherFinalize, /* xmlSecTransformFinalizeMethod finalize; */
-- NULL, /* xmlSecTransformNodeReadMethod readNode; */
-- NULL, /* xmlSecTransformNodeWriteMethod writeNode; */
-- xmlSecNssBlockCipherSetKeyReq, /* xmlSecTransformSetKeyMethod setKeyReq; */
-- xmlSecNssBlockCipherSetKey, /* xmlSecTransformSetKeyMethod setKey; */
-- NULL, /* xmlSecTransformValidateMethod validate; */
-- xmlSecTransformDefaultGetDataType, /* xmlSecTransformGetDataTypeMethod getDataType; */
-- xmlSecTransformDefaultPushBin, /* xmlSecTransformPushBinMethod pushBin; */
-- xmlSecTransformDefaultPopBin, /* xmlSecTransformPopBinMethod popBin; */
-- NULL, /* xmlSecTransformPushXmlMethod pushXml; */
-- NULL, /* xmlSecTransformPopXmlMethod popXml; */
-- xmlSecNssBlockCipherExecute, /* xmlSecTransformExecuteMethod execute; */
--
-- NULL, /* void* reserved0; */
-- NULL, /* void* reserved1; */
-- };
--
- /**
-! * xmlSecNssTransformAes192CbcGetKlass:
-! *
-! * AES 192 CBC encryption transform klass.
-! *
-! * Returns pointer to AES 192 CBC encryption transform.
-! */
-! xmlSecTransformId
-! xmlSecNssTransformAes192CbcGetKlass(void) {
-! return(&xmlSecNssAes192CbcKlass);
- }
-
-- static xmlSecTransformKlass xmlSecNssAes256CbcKlass = {
-- /* klass/object sizes */
-- sizeof(xmlSecTransformKlass), /* xmlSecSize klassSize */
-- xmlSecNssBlockCipherSize, /* xmlSecSize objSize */
--
-- xmlSecNameAes256Cbc, /* const xmlChar* name; */
-- xmlSecHrefAes256Cbc, /* const xmlChar* href; */
-- xmlSecTransformUsageEncryptionMethod, /* xmlSecAlgorithmUsage usage; */
--
-- xmlSecNssBlockCipherInitialize, /* xmlSecTransformInitializeMethod initialize; */
-- xmlSecNssBlockCipherFinalize, /* xmlSecTransformFinalizeMethod finalize; */
-- NULL, /* xmlSecTransformNodeReadMethod readNode; */
-- NULL, /* xmlSecTransformNodeWriteMethod writeNode; */
-- xmlSecNssBlockCipherSetKeyReq, /* xmlSecTransformSetKeyMethod setKeyReq; */
-- xmlSecNssBlockCipherSetKey, /* xmlSecTransformSetKeyMethod setKey; */
-- NULL, /* xmlSecTransformValidateMethod validate; */
-- xmlSecTransformDefaultGetDataType, /* xmlSecTransformGetDataTypeMethod getDataType; */
-- xmlSecTransformDefaultPushBin, /* xmlSecTransformPushBinMethod pushBin; */
-- xmlSecTransformDefaultPopBin, /* xmlSecTransformPopBinMethod popBin; */
-- NULL, /* xmlSecTransformPushXmlMethod pushXml; */
-- NULL, /* xmlSecTransformPopXmlMethod popXml; */
-- xmlSecNssBlockCipherExecute, /* xmlSecTransformExecuteMethod execute; */
--
-- NULL, /* void* reserved0; */
-- NULL, /* void* reserved1; */
-- };
--
- /**
-! * xmlSecNssTransformAes256CbcGetKlass:
-! *
-! * AES 256 CBC encryption transform klass.
-! *
-! * Returns pointer to AES 256 CBC encryption transform.
-! */
-! xmlSecTransformId
-! xmlSecNssTransformAes256CbcGetKlass(void) {
-! return(&xmlSecNssAes256CbcKlass);
- }
-
-! #endif /* XMLSEC_NO_AES */
-!
-! #ifndef XMLSEC_NO_DES
-! static xmlSecTransformKlass xmlSecNssDes3CbcKlass = {
-! /* klass/object sizes */
-! sizeof(xmlSecTransformKlass), /* xmlSecSize klassSize */
-! xmlSecNssBlockCipherSize, /* xmlSecSize objSize */
-!
-! xmlSecNameDes3Cbc, /* const xmlChar* name; */
-! xmlSecHrefDes3Cbc, /* const xmlChar* href; */
-! xmlSecTransformUsageEncryptionMethod, /* xmlSecAlgorithmUsage usage; */
-!
-! xmlSecNssBlockCipherInitialize, /* xmlSecTransformInitializeMethod initialize; */
-! xmlSecNssBlockCipherFinalize, /* xmlSecTransformFinalizeMethod finalize; */
-! NULL, /* xmlSecTransformNodeReadMethod readNode; */
-! NULL, /* xmlSecTransformNodeWriteMethod writeNode; */
-! xmlSecNssBlockCipherSetKeyReq, /* xmlSecTransformSetKeyMethod setKeyReq; */
-! xmlSecNssBlockCipherSetKey, /* xmlSecTransformSetKeyMethod setKey; */
-! NULL, /* xmlSecTransformValidateMethod validate; */
-! xmlSecTransformDefaultGetDataType, /* xmlSecTransformGetDataTypeMethod getDataType; */
-! xmlSecTransformDefaultPushBin, /* xmlSecTransformPushBinMethod pushBin; */
-! xmlSecTransformDefaultPopBin, /* xmlSecTransformPopBinMethod popBin; */
-! NULL, /* xmlSecTransformPushXmlMethod pushXml; */
-! NULL, /* xmlSecTransformPopXmlMethod popXml; */
-! xmlSecNssBlockCipherExecute, /* xmlSecTransformExecuteMethod execute; */
-!
-! NULL, /* void* reserved0; */
-! NULL, /* void* reserved1; */
-! };
-!
-! /**
-! * xmlSecNssTransformDes3CbcGetKlass:
- *
-! * Triple DES CBC encryption transform klass.
-! *
-! * Returns pointer to Triple DES encryption transform.
- */
-! xmlSecTransformId
-! xmlSecNssTransformDes3CbcGetKlass(void) {
-! return(&xmlSecNssDes3CbcKlass);
- }
-! #endif /* XMLSEC_NO_DES */
-
---- 1,967 ----
-! /* -- C Source File -- **/
- #include "globals.h"
-
-+ #include <stdlib.h>
- #include <string.h>
-
- #include <nss.h>
- #include <pk11func.h>
-
- #include <xmlsec/xmlsec.h>
-+ #include <xmlsec/xmltree.h>
-+ #include <xmlsec/base64.h>
- #include <xmlsec/keys.h>
-+ #include <xmlsec/keyinfo.h>
- #include <xmlsec/transforms.h>
- #include <xmlsec/errors.h>
-
- #include <xmlsec/nss/crypto.h>
-+ #include <xmlsec/nss/ciphers.h>
-
-! /**
-! * Internal Nss Block Cipher Context
- *
-! * This context is designed for repositing a block cipher for transform
-! */
-! typedef struct _xmlSecNssBlockCipherCtx xmlSecNssBlockCipherCtx ;
-! typedef struct _xmlSecNssBlockCipherCtx* xmlSecNssBlockCipherCtxPtr ;
-!
- struct _xmlSecNssBlockCipherCtx {
-! CK_MECHANISM_TYPE cipher ;
-! PK11SymKey* symkey ;
-! PK11Context* cipherCtx ;
-! xmlSecKeyDataId keyId ;
-! } ;
-!
-! #define xmlSecNssBlockCipherSize \
-! ( sizeof( xmlSecTransform ) + sizeof( xmlSecNssBlockCipherCtx ) )
-!
-! #define xmlSecNssBlockCipherGetCtx( transform ) \
-! ( ( xmlSecNssBlockCipherCtxPtr )( ( ( xmlSecByte* )( transform ) ) + sizeof( xmlSecTransform ) ) )
-!
-! static int
-! xmlSecNssBlockCipherCheckId(
-! xmlSecTransformPtr transform
-! ) {
-! #ifndef XMLSEC_NO_DES
-! if( xmlSecTransformCheckId( transform, xmlSecNssTransformDes3CbcId ) ) {
-! return 1 ;
- }
-! #endif /* XMLSEC_NO_DES */
-
-! #ifndef XMLSEC_NO_AES
-! if( xmlSecTransformCheckId( transform, xmlSecNssTransformAes128CbcId ) ||
-! xmlSecTransformCheckId( transform, xmlSecNssTransformAes192CbcId ) ||
-! xmlSecTransformCheckId( transform, xmlSecNssTransformAes256CbcId ) ) {
-
-! return 1 ;
- }
-! #endif /* XMLSEC_NO_AES */
-!
-! return 0 ;
- }
-
-! static int
-! xmlSecNssBlockCipherFetchCtx(
-! xmlSecNssBlockCipherCtxPtr context ,
-! xmlSecTransformId id
-! ) {
-! xmlSecAssert2( context != NULL, -1 ) ;
-!
-! #ifndef XMLSEC_NO_DES
-! if( id == xmlSecNssTransformDes3CbcId ) {
-! context->cipher = CKM_DES3_CBC ;
-! context->keyId = xmlSecNssKeyDataDesId ;
-! } else
-! #endif /* XMLSEC_NO_DES */
-!
-! #ifndef XMLSEC_NO_AES
-! if( id == xmlSecNssTransformAes128CbcId ) {
-! context->cipher = CKM_AES_CBC ;
-! context->keyId = xmlSecNssKeyDataAesId ;
-! } else
-! if( id == xmlSecNssTransformAes192CbcId ) {
-! context->cipher = CKM_AES_CBC ;
-! context->keyId = xmlSecNssKeyDataAesId ;
-! } else
-! if( id == xmlSecNssTransformAes256CbcId ) {
-! context->cipher = CKM_AES_CBC ;
-! context->keyId = xmlSecNssKeyDataAesId ;
-! } else
-! #endif /* XMLSEC_NO_AES */
-!
-! if( 1 ) {
-! xmlSecError( XMLSEC_ERRORS_HERE ,
-! NULL ,
-! NULL ,
-! XMLSEC_ERRORS_R_CRYPTO_FAILED ,
-! XMLSEC_ERRORS_NO_MESSAGE ) ;
-! return -1 ;
-! }
-
-! return 0 ;
-! }
-
-! /**
-! * xmlSecTransformInitializeMethod:
-! * @transform: the pointer to transform object.
-! *
-! * The transform specific initialization method.
-! *
-! * Returns 0 on success or a negative value otherwise.
-! */
-! static int
-! xmlSecNssBlockCipherInitialize(
-! xmlSecTransformPtr transform
-! ) {
-! xmlSecNssBlockCipherCtxPtr context = NULL ;
-!
-! xmlSecAssert2( xmlSecNssBlockCipherCheckId( transform ), -1 ) ;
-! xmlSecAssert2( xmlSecTransformCheckSize( transform, xmlSecNssBlockCipherSize ), -1 ) ;
-!
-! context = xmlSecNssBlockCipherGetCtx( transform ) ;
-! if( context == NULL ) {
-! xmlSecError( XMLSEC_ERRORS_HERE ,
-! xmlSecErrorsSafeString( xmlSecTransformGetName( transform ) ) ,
-! "xmlSecNssBlockCipherGetCtx" ,
-! XMLSEC_ERRORS_R_CRYPTO_FAILED ,
-! XMLSEC_ERRORS_NO_MESSAGE ) ;
-! return -1 ;
-! }
-!
-! if( xmlSecNssBlockCipherFetchCtx( context , transform->id ) < 0 ) {
-! xmlSecError( XMLSEC_ERRORS_HERE ,
-! xmlSecErrorsSafeString( xmlSecTransformGetName( transform ) ) ,
-! "xmlSecNssBlockCipherFetchCtx" ,
-! XMLSEC_ERRORS_R_CRYPTO_FAILED ,
-! XMLSEC_ERRORS_NO_MESSAGE ) ;
-! return -1 ;
-! }
-
-! context->symkey = NULL ;
-! context->cipherCtx = NULL ;
-
-! return 0 ;
- }
-
-! /**
-! * xmlSecTransformFinalizeMethod:
-! * @transform: the pointer to transform object.
-! *
-! * The transform specific destroy method.
-! */
-! static void
-! xmlSecNssBlockCipherFinalize(
-! xmlSecTransformPtr transform
-! ) {
-! xmlSecNssBlockCipherCtxPtr context = NULL ;
-
-! xmlSecAssert( xmlSecNssBlockCipherCheckId( transform ) ) ;
-! xmlSecAssert( xmlSecTransformCheckSize( transform, xmlSecNssBlockCipherSize ) ) ;
-
-! context = xmlSecNssBlockCipherGetCtx( transform ) ;
-! if( context == NULL ) {
-! xmlSecError( XMLSEC_ERRORS_HERE ,
-! xmlSecErrorsSafeString( xmlSecTransformGetName( transform ) ) ,
-! "xmlSecNssBlockCipherGetCtx" ,
-! XMLSEC_ERRORS_R_CRYPTO_FAILED ,
-! XMLSEC_ERRORS_NO_MESSAGE ) ;
-! return ;
- }
-
-! if( context->cipherCtx != NULL ) {
-! PK11_DestroyContext( context->cipherCtx, PR_TRUE ) ;
-! context->cipherCtx = NULL ;
-! }
-
-! if( context->symkey != NULL ) {
-! PK11_FreeSymKey( context->symkey ) ;
-! context->symkey = NULL ;
-! }
-
-! context->cipher = CKM_INVALID_MECHANISM ;
-! context->keyId = NULL ;
- }
-
-! /**
-! * xmlSecTransformSetKeyRequirementsMethod:
-! * @transform: the pointer to transform object.
-! * @keyReq: the pointer to key requirements structure.
- *
-! * Transform specific method to set transform's key requirements.
- *
-! * Returns 0 on success or a negative value otherwise.
-! */
-! static int
-! xmlSecNssBlockCipherSetKeyReq(
-! xmlSecTransformPtr transform ,
-! xmlSecKeyReqPtr keyReq
-! ) {
-! xmlSecNssBlockCipherCtxPtr context = NULL ;
-! xmlSecSize cipherSize = 0 ;
-!
-! xmlSecAssert2( xmlSecNssBlockCipherCheckId( transform ), -1 ) ;
-! xmlSecAssert2( xmlSecTransformCheckSize( transform, xmlSecNssBlockCipherSize ), -1 ) ;
-! xmlSecAssert2( keyReq != NULL , -1 ) ;
-! xmlSecAssert2( ( transform->operation == xmlSecTransformOperationEncrypt ) || ( transform->operation == xmlSecTransformOperationDecrypt ), -1 ) ;
-!
-! context = xmlSecNssBlockCipherGetCtx( transform ) ;
-! if( context == NULL ) {
-! xmlSecError( XMLSEC_ERRORS_HERE ,
-! xmlSecErrorsSafeString( xmlSecTransformGetName( transform ) ) ,
-! "xmlSecNssBlockCipherGetCtx" ,
-! XMLSEC_ERRORS_R_CRYPTO_FAILED ,
-! XMLSEC_ERRORS_NO_MESSAGE ) ;
-! return -1 ;
-! }
-!
-! keyReq->keyId = context->keyId ;
-! keyReq->keyType = xmlSecKeyDataTypeSymmetric ;
-!
-! if( transform->operation == xmlSecTransformOperationEncrypt ) {
-! keyReq->keyUsage = xmlSecKeyUsageEncrypt ;
-! } else {
-! keyReq->keyUsage = xmlSecKeyUsageDecrypt ;
-! }
-!
-! /*
-! if( context->symkey != NULL )
-! cipherSize = PK11_GetKeyLength( context->symkey ) ;
-
-! keyReq->keyBitsSize = cipherSize * 8 ;
-! */
-
-! return 0 ;
- }
-
-! /**
-! * xmlSecTransformSetKeyMethod:
-! * @transform: the pointer to transform object.
-! * @key: the pointer to key.
-! *
-! * The transform specific method to set the key for use.
-! *
-! * Returns 0 on success or a negative value otherwise.
-! */
-! static int
-! xmlSecNssBlockCipherSetKey(
-! xmlSecTransformPtr transform ,
-! xmlSecKeyPtr key
-! ) {
-! xmlSecNssBlockCipherCtxPtr context = NULL ;
-! xmlSecKeyDataPtr keyData = NULL ;
-! PK11SymKey* symkey = NULL ;
-! CK_ATTRIBUTE_TYPE operation ;
-! int ivLen ;
-!
-! xmlSecAssert2( xmlSecNssBlockCipherCheckId( transform ), -1 ) ;
-! xmlSecAssert2( xmlSecTransformCheckSize( transform, xmlSecNssBlockCipherSize ), -1 ) ;
-! xmlSecAssert2( key != NULL , -1 ) ;
-! xmlSecAssert2( ( transform->operation == xmlSecTransformOperationEncrypt ) || ( transform->operation == xmlSecTransformOperationDecrypt ), -1 ) ;
-!
-! context = xmlSecNssBlockCipherGetCtx( transform ) ;
-! if( context == NULL || context->keyId == NULL || context->symkey != NULL ) {
-! xmlSecError( XMLSEC_ERRORS_HERE ,
-! xmlSecErrorsSafeString( xmlSecTransformGetName( transform ) ) ,
-! "xmlSecNssBlockCipherGetCtx" ,
-! XMLSEC_ERRORS_R_CRYPTO_FAILED ,
-! XMLSEC_ERRORS_NO_MESSAGE ) ;
-! return -1 ;
-! }
-! xmlSecAssert2( xmlSecKeyCheckId( key, context->keyId ), -1 ) ;
-!
-! keyData = xmlSecKeyGetValue( key ) ;
-! if( keyData == NULL ) {
-! xmlSecError( XMLSEC_ERRORS_HERE ,
-! xmlSecErrorsSafeString( xmlSecKeyGetName( key ) ) ,
-! "xmlSecKeyGetValue" ,
-! XMLSEC_ERRORS_R_CRYPTO_FAILED ,
-! XMLSEC_ERRORS_NO_MESSAGE ) ;
-! return -1 ;
-! }
-!
-! if( ( symkey = xmlSecNssSymKeyDataGetKey( keyData ) ) == NULL ) {
-! xmlSecError( XMLSEC_ERRORS_HERE ,
-! xmlSecErrorsSafeString( xmlSecKeyDataGetName( keyData ) ) ,
-! "xmlSecNssSymKeyDataGetKey" ,
-! XMLSEC_ERRORS_R_CRYPTO_FAILED ,
-! XMLSEC_ERRORS_NO_MESSAGE ) ;
-! return -1 ;
-! }
-
-! context->symkey = symkey ;
-
-! return 0 ;
- }
-
-! /**
-! * Block cipher transform init
-! */
-! static int
-! xmlSecNssBlockCipherCtxInit(
-! xmlSecNssBlockCipherCtxPtr ctx ,
-! xmlSecBufferPtr in ,
-! xmlSecBufferPtr out ,
-! int encrypt ,
-! const xmlChar* cipherName ,
-! xmlSecTransformCtxPtr transformCtx
-! ) {
-! SECItem ivItem ;
-! SECItem* secParam = NULL ;
-! xmlSecBufferPtr ivBuf = NULL ;
-! int ivLen ;
-!
-! xmlSecAssert2( ctx != NULL , -1 ) ;
-! xmlSecAssert2( ctx->cipher != CKM_INVALID_MECHANISM , -1 ) ;
-! xmlSecAssert2( ctx->symkey != NULL , -1 ) ;
-! xmlSecAssert2( ctx->cipherCtx == NULL , -1 ) ;
-! xmlSecAssert2( ctx->keyId != NULL , -1 ) ;
-! xmlSecAssert2( in != NULL , -1 ) ;
-! xmlSecAssert2( out != NULL , -1 ) ;
-! xmlSecAssert2( transformCtx != NULL , -1 ) ;
-!
-! ivLen = PK11_GetIVLength( ctx->cipher ) ;
-! if( ivLen < 0 ) {
-! xmlSecError( XMLSEC_ERRORS_HERE ,
-! NULL ,
-! "PK11_GetIVLength" ,
-! XMLSEC_ERRORS_R_CRYPTO_FAILED ,
-! XMLSEC_ERRORS_NO_MESSAGE ) ;
-! return -1 ;
-! }
-!
-! if( ( ivBuf = xmlSecBufferCreate( ivLen ) ) == NULL ) {
-! xmlSecError( XMLSEC_ERRORS_HERE ,
-! NULL ,
-! "xmlSecBufferCreate" ,
-! XMLSEC_ERRORS_R_CRYPTO_FAILED ,
-! XMLSEC_ERRORS_NO_MESSAGE ) ;
-! return -1 ;
-! }
-!
-! if( encrypt ) {
-! if( PK11_GenerateRandom( ivBuf->data , ivLen ) != SECSuccess ) {
-! xmlSecError( XMLSEC_ERRORS_HERE ,
-! xmlSecErrorsSafeString( cipherName ) ,
-! "PK11_GenerateRandom" ,
-! XMLSEC_ERRORS_R_CRYPTO_FAILED ,
-! XMLSEC_ERRORS_NO_MESSAGE ) ;
-! xmlSecBufferDestroy( ivBuf ) ;
-! return -1 ;
-! }
-! if( xmlSecBufferSetSize( ivBuf , ivLen ) < 0 ) {
-! xmlSecError( XMLSEC_ERRORS_HERE ,
-! NULL ,
-! "xmlSecBufferSetSize" ,
-! XMLSEC_ERRORS_R_CRYPTO_FAILED ,
-! XMLSEC_ERRORS_NO_MESSAGE ) ;
-! xmlSecBufferDestroy( ivBuf ) ;
-! return -1 ;
-! }
-!
-! if( xmlSecBufferAppend( out , ivBuf->data , ivLen ) < 0 ) {
-! xmlSecError( XMLSEC_ERRORS_HERE ,
-! xmlSecErrorsSafeString( cipherName ) ,
-! "xmlSecBufferAppend" ,
-! XMLSEC_ERRORS_R_CRYPTO_FAILED ,
-! XMLSEC_ERRORS_NO_MESSAGE ) ;
-! xmlSecBufferDestroy( ivBuf ) ;
-! return -1 ;
-! }
-! } else {
-! if( xmlSecBufferSetData( ivBuf , in->data , ivLen ) < 0 ) {
-! xmlSecError( XMLSEC_ERRORS_HERE ,
-! xmlSecErrorsSafeString( cipherName ) ,
-! "xmlSecBufferSetData" ,
-! XMLSEC_ERRORS_R_CRYPTO_FAILED ,
-! XMLSEC_ERRORS_NO_MESSAGE ) ;
-! xmlSecBufferDestroy( ivBuf ) ;
-! return -1 ;
-! }
-!
-! if( xmlSecBufferRemoveHead( in , ivLen ) < 0 ) {
-! xmlSecError( XMLSEC_ERRORS_HERE ,
-! xmlSecErrorsSafeString( cipherName ) ,
-! "xmlSecBufferRemoveHead" ,
-! XMLSEC_ERRORS_R_CRYPTO_FAILED ,
-! XMLSEC_ERRORS_NO_MESSAGE ) ;
-! xmlSecBufferDestroy( ivBuf ) ;
-! return -1 ;
-! }
-! }
-!
-! ivItem.data = xmlSecBufferGetData( ivBuf ) ;
-! ivItem.len = xmlSecBufferGetSize( ivBuf ) ;
-! if( ( secParam = PK11_ParamFromIV( ctx->cipher , &ivItem ) ) == NULL ) {
-! xmlSecError( XMLSEC_ERRORS_HERE ,
-! xmlSecErrorsSafeString( cipherName ) ,
-! "PK11_ParamFromIV" ,
-! XMLSEC_ERRORS_R_CRYPTO_FAILED ,
-! XMLSEC_ERRORS_NO_MESSAGE ) ;
-! xmlSecBufferDestroy( ivBuf ) ;
-! return -1 ;
-! }
-!
-! ctx->cipherCtx = PK11_CreateContextBySymKey( ctx->cipher , encrypt ? CKA_ENCRYPT : CKA_DECRYPT , ctx->symkey , secParam ) ;
-! if( ctx->cipherCtx == NULL ) {
-! xmlSecError( XMLSEC_ERRORS_HERE ,
-! xmlSecErrorsSafeString( cipherName ) ,
-! "xmlSecBufferRemoveHead" ,
-! XMLSEC_ERRORS_R_CRYPTO_FAILED ,
-! XMLSEC_ERRORS_NO_MESSAGE ) ;
-! SECITEM_FreeItem( secParam , PR_TRUE ) ;
-! xmlSecBufferDestroy( ivBuf ) ;
-! return -1 ;
-! }
-
-! SECITEM_FreeItem( secParam , PR_TRUE ) ;
-! xmlSecBufferDestroy( ivBuf ) ;
-
-! return 0 ;
- }
-
-! /**
-! * Block cipher transform update
-! */
-! static int
-! xmlSecNssBlockCipherCtxUpdate(
-! xmlSecNssBlockCipherCtxPtr ctx ,
-! xmlSecBufferPtr in ,
-! xmlSecBufferPtr out ,
-! int encrypt ,
-! const xmlChar* cipherName ,
-! xmlSecTransformCtxPtr transformCtx
-! ) {
-! xmlSecSize inSize ;
-! xmlSecSize outSize ;
-! xmlSecSize inBlocks ;
-! int blockSize ;
-! int outLen ;
-! xmlSecByte* outBuf ;
-!
-! xmlSecAssert2( ctx != NULL , -1 ) ;
-! xmlSecAssert2( ctx->cipher != CKM_INVALID_MECHANISM , -1 ) ;
-! xmlSecAssert2( ctx->symkey != NULL , -1 ) ;
-! xmlSecAssert2( ctx->cipherCtx != NULL , -1 ) ;
-! xmlSecAssert2( ctx->keyId != NULL , -1 ) ;
-! xmlSecAssert2( in != NULL , -1 ) ;
-! xmlSecAssert2( out != NULL , -1 ) ;
-! xmlSecAssert2( transformCtx != NULL , -1 ) ;
-!
-! if( ( blockSize = PK11_GetBlockSize( ctx->cipher , NULL ) ) < 0 ) {
-! xmlSecError( XMLSEC_ERRORS_HERE ,
-! xmlSecErrorsSafeString( cipherName ) ,
-! "PK11_GetBlockSize" ,
-! XMLSEC_ERRORS_R_CRYPTO_FAILED ,
-! XMLSEC_ERRORS_NO_MESSAGE ) ;
-! return -1 ;
-! }
-!
-! inSize = xmlSecBufferGetSize( in ) ;
-! outSize = xmlSecBufferGetSize( out ) ;
-!
-! inBlocks = ( encrypt != 0 ? inSize : ( inSize - 1 ) ) / blockSize ;
-! inSize = inBlocks * blockSize ;
-!
-! if( inSize < blockSize ) {
-! return 0 ;
-! }
-!
-! if( xmlSecBufferSetMaxSize( out , outSize + inSize + blockSize ) < 0 ) {
-! xmlSecError( XMLSEC_ERRORS_HERE ,
-! xmlSecErrorsSafeString( cipherName ) ,
-! "xmlSecBufferSetMaxSize" ,
-! XMLSEC_ERRORS_R_CRYPTO_FAILED ,
-! XMLSEC_ERRORS_NO_MESSAGE ) ;
-! return -1 ;
-! }
-! outBuf = xmlSecBufferGetData( out ) + outSize ;
-!
-! if( PK11_CipherOp( ctx->cipherCtx , outBuf , &outLen , inSize + blockSize , xmlSecBufferGetData( in ) , inSize ) != SECSuccess ) {
-! xmlSecError( XMLSEC_ERRORS_HERE ,
-! xmlSecErrorsSafeString( cipherName ) ,
-! "PK11_CipherOp" ,
-! XMLSEC_ERRORS_R_CRYPTO_FAILED ,
-! XMLSEC_ERRORS_NO_MESSAGE ) ;
-! return -1 ;
-! }
-!
-! if( xmlSecBufferSetSize( out , outSize + outLen ) < 0 ) {
-! xmlSecError( XMLSEC_ERRORS_HERE ,
-! xmlSecErrorsSafeString( cipherName ) ,
-! "xmlSecBufferSetSize" ,
-! XMLSEC_ERRORS_R_CRYPTO_FAILED ,
-! XMLSEC_ERRORS_NO_MESSAGE ) ;
-! return -1 ;
-! }
-!
-! if( xmlSecBufferRemoveHead( in , inSize ) < 0 ) {
-! xmlSecError( XMLSEC_ERRORS_HERE ,
-! xmlSecErrorsSafeString( cipherName ) ,
-! "xmlSecBufferRemoveHead" ,
-! XMLSEC_ERRORS_R_CRYPTO_FAILED ,
-! XMLSEC_ERRORS_NO_MESSAGE ) ;
-! return -1 ;
-! }
-
-! return 0 ;
- }
-
-+ /**
-+ * Block cipher transform final
-+ */
- static int
-! xmlSecNssBlockCipherCtxFinal(
-! xmlSecNssBlockCipherCtxPtr ctx ,
-! xmlSecBufferPtr in ,
-! xmlSecBufferPtr out ,
-! int encrypt ,
-! const xmlChar* cipherName ,
-! xmlSecTransformCtxPtr transformCtx
-! ) {
-! xmlSecSize inSize ;
-! xmlSecSize outSize ;
-! int blockSize ;
-! int outLen ;
-! xmlSecByte* inBuf ;
-! xmlSecByte* outBuf ;
-!
-! xmlSecAssert2( ctx != NULL , -1 ) ;
-! xmlSecAssert2( ctx->cipher != CKM_INVALID_MECHANISM , -1 ) ;
-! xmlSecAssert2( ctx->symkey != NULL , -1 ) ;
-! xmlSecAssert2( ctx->cipherCtx != NULL , -1 ) ;
-! xmlSecAssert2( ctx->keyId != NULL , -1 ) ;
-! xmlSecAssert2( in != NULL , -1 ) ;
-! xmlSecAssert2( out != NULL , -1 ) ;
-! xmlSecAssert2( transformCtx != NULL , -1 ) ;
-!
-! if( ( blockSize = PK11_GetBlockSize( ctx->cipher , NULL ) ) < 0 ) {
-! xmlSecError( XMLSEC_ERRORS_HERE ,
-! xmlSecErrorsSafeString( cipherName ) ,
-! "PK11_GetBlockSize" ,
-! XMLSEC_ERRORS_R_CRYPTO_FAILED ,
-! XMLSEC_ERRORS_NO_MESSAGE ) ;
-! return -1 ;
-! }
-!
-! inSize = xmlSecBufferGetSize( in ) ;
-! outSize = xmlSecBufferGetSize( out ) ;
-!
-! /******************************************************************/
-! if( encrypt != 0 ) {
-! xmlSecAssert2( inSize < blockSize, -1 ) ;
-!
-! /* create padding */
-! if( xmlSecBufferSetMaxSize( in , blockSize ) < 0 ) {
-! xmlSecError( XMLSEC_ERRORS_HERE ,
-! xmlSecErrorsSafeString( cipherName ) ,
-! "xmlSecBufferSetMaxSize" ,
-! XMLSEC_ERRORS_R_CRYPTO_FAILED ,
-! XMLSEC_ERRORS_NO_MESSAGE ) ;
-! return -1 ;
-! }
-! inBuf = xmlSecBufferGetData( in ) ;
-!
-! /* generate random */
-! if( blockSize > ( inSize + 1 ) ) {
-! if( PK11_GenerateRandom( inBuf + inSize, blockSize - inSize - 1 ) != SECSuccess ) {
-! xmlSecError( XMLSEC_ERRORS_HERE ,
-! xmlSecErrorsSafeString( cipherName ) ,
-! "PK11_GenerateRandom" ,
-! XMLSEC_ERRORS_R_CRYPTO_FAILED ,
-! XMLSEC_ERRORS_NO_MESSAGE ) ;
-! return -1 ;
-! }
-! }
-!
-! inBuf[blockSize-1] = blockSize - inSize ;
-! inSize = blockSize ;
-! } else {
-! if( inSize != blockSize ) {
-! xmlSecError( XMLSEC_ERRORS_HERE ,
-! xmlSecErrorsSafeString( cipherName ) ,
-! NULL ,
-! XMLSEC_ERRORS_R_CRYPTO_FAILED ,
-! XMLSEC_ERRORS_NO_MESSAGE ) ;
-! return -1 ;
-! }
-! }
-!
-! /* process the last block */
-! if( xmlSecBufferSetMaxSize( out , outSize + inSize + blockSize ) < 0 ) {
-! xmlSecError( XMLSEC_ERRORS_HERE ,
-! xmlSecErrorsSafeString( cipherName ) ,
-! "xmlSecBufferSetMaxSize" ,
-! XMLSEC_ERRORS_R_CRYPTO_FAILED ,
-! XMLSEC_ERRORS_NO_MESSAGE ) ;
-! return -1 ;
-! }
-! outBuf = xmlSecBufferGetData( out ) + outSize ;
-!
-! if( PK11_CipherOp( ctx->cipherCtx , outBuf , &outLen , inSize + blockSize , xmlSecBufferGetData( in ) , inSize ) != SECSuccess ) {
-! xmlSecError( XMLSEC_ERRORS_HERE ,
-! xmlSecErrorsSafeString( cipherName ) ,
-! "PK11_CipherOp" ,
-! XMLSEC_ERRORS_R_CRYPTO_FAILED ,
-! XMLSEC_ERRORS_NO_MESSAGE ) ;
-! return -1 ;
-! }
-!
-! if( encrypt == 0 ) {
-! /* check padding */
-! if( outLen < outBuf[blockSize-1] ) {
-! xmlSecError( XMLSEC_ERRORS_HERE ,
-! xmlSecErrorsSafeString( cipherName ) ,
-! NULL ,
-! XMLSEC_ERRORS_R_CRYPTO_FAILED ,
-! XMLSEC_ERRORS_NO_MESSAGE ) ;
-! return -1 ;
-! }
-!
-! outLen -= outBuf[blockSize-1] ;
-! }
-! /******************************************************************/
-!
-! /******************************************************************
-! if( xmlSecBufferSetMaxSize( out , outSize + blockSize ) < 0 ) {
-! xmlSecError( XMLSEC_ERRORS_HERE ,
-! xmlSecErrorsSafeString( cipherName ) ,
-! "xmlSecBufferSetMaxSize" ,
-! XMLSEC_ERRORS_R_CRYPTO_FAILED ,
-! XMLSEC_ERRORS_NO_MESSAGE ) ;
-! return -1 ;
-! }
-!
-! outBuf = xmlSecBufferGetData( out ) + outSize ;
-!
-! if( PK11_DigestFinal( ctx->cipherCtx , outBuf , &outLen , blockSize ) != SECSuccess ) {
-! xmlSecError( XMLSEC_ERRORS_HERE ,
-! xmlSecErrorsSafeString( cipherName ) ,
-! "PK11_DigestFinal" ,
-! XMLSEC_ERRORS_R_CRYPTO_FAILED ,
-! XMLSEC_ERRORS_NO_MESSAGE ) ;
-! return -1 ;
-! }
-! ******************************************************************/
-!
-! if( xmlSecBufferSetSize( out , outSize + outLen ) < 0 ) {
-! xmlSecError( XMLSEC_ERRORS_HERE ,
-! xmlSecErrorsSafeString( cipherName ) ,
-! "xmlSecBufferSetSize" ,
-! XMLSEC_ERRORS_R_CRYPTO_FAILED ,
-! XMLSEC_ERRORS_NO_MESSAGE ) ;
-! return -1 ;
-! }
-!
-! if( xmlSecBufferRemoveHead( in , inSize ) < 0 ) {
-! xmlSecError( XMLSEC_ERRORS_HERE ,
-! xmlSecErrorsSafeString( cipherName ) ,
-! "xmlSecBufferRemoveHead" ,
-! XMLSEC_ERRORS_R_CRYPTO_FAILED ,
-! XMLSEC_ERRORS_NO_MESSAGE ) ;
-! return -1 ;
-! }
-!
-! /* PK11_Finalize( ctx->cipherCtx ) ;*/
-! PK11_DestroyContext( ctx->cipherCtx , PR_TRUE ) ;
-! ctx->cipherCtx = NULL ;
-
-! return 0 ;
- }
-
-
-!
-! /**
-! * xmlSecTransformExecuteMethod:
-! * @transform: the pointer to transform object.
-! * @last: the flag: if set to 1 then it's the last data chunk.
-! * @transformCtx: the pointer to transform context object.
- *
-! * Transform specific method to process a chunk of data.
- *
-! * Returns 0 on success or a negative value otherwise.
-! */
-! static int
-! xmlSecNssBlockCipherExecute(
-! xmlSecTransformPtr transform ,
-! int last ,
-! xmlSecTransformCtxPtr transformCtx
-! ) {
-! xmlSecNssBlockCipherCtxPtr context = NULL ;
-! xmlSecBufferPtr inBuf = NULL ;
-! xmlSecBufferPtr outBuf = NULL ;
-! const xmlChar* cipherName ;
-! int operation ;
-! int rtv ;
-!
-! xmlSecAssert2( xmlSecNssBlockCipherCheckId( transform ), -1 ) ;
-! xmlSecAssert2( xmlSecTransformCheckSize( transform, xmlSecNssBlockCipherSize ), -1 ) ;
-! xmlSecAssert2( ( transform->operation == xmlSecTransformOperationEncrypt ) || ( transform->operation == xmlSecTransformOperationDecrypt ), -1 ) ;
-! xmlSecAssert2( transformCtx != NULL , -1 ) ;
-!
-! context = xmlSecNssBlockCipherGetCtx( transform ) ;
-! if( context == NULL ) {
-! xmlSecError( XMLSEC_ERRORS_HERE ,
-! xmlSecErrorsSafeString( xmlSecTransformGetName( transform ) ) ,
-! "xmlSecNssBlockCipherGetCtx" ,
-! XMLSEC_ERRORS_R_CRYPTO_FAILED ,
-! XMLSEC_ERRORS_NO_MESSAGE ) ;
-! return -1 ;
-! }
-!
-! inBuf = &( transform->inBuf ) ;
-! outBuf = &( transform->outBuf ) ;
-!
-! if( transform->status == xmlSecTransformStatusNone ) {
-! transform->status = xmlSecTransformStatusWorking ;
-! }
-!
-! operation = ( transform->operation == xmlSecTransformOperationEncrypt ) ? 1 : 0 ;
-! cipherName = xmlSecTransformGetName( transform ) ;
-!
-! if( transform->status == xmlSecTransformStatusWorking ) {
-! if( context->cipherCtx == NULL ) {
-! rtv = xmlSecNssBlockCipherCtxInit( context, inBuf , outBuf , operation , cipherName , transformCtx ) ;
-! if( rtv < 0 ) {
-! xmlSecError( XMLSEC_ERRORS_HERE ,
-! xmlSecErrorsSafeString( xmlSecTransformGetName( transform ) ) ,
-! "xmlSecNssBlockCipherCtxInit" ,
-! XMLSEC_ERRORS_R_INVALID_STATUS ,
-! XMLSEC_ERRORS_NO_MESSAGE ) ;
-! return -1 ;
-! }
-! }
-!
-! if( context->cipherCtx == NULL && last != 0 ) {
-! xmlSecError( XMLSEC_ERRORS_HERE ,
-! xmlSecErrorsSafeString( xmlSecTransformGetName( transform ) ) ,
-! NULL ,
-! XMLSEC_ERRORS_R_INVALID_STATUS ,
-! "No enough data to intialize transform" ) ;
-! return -1 ;
-! }
-!
-! if( context->cipherCtx != NULL ) {
-! rtv = xmlSecNssBlockCipherCtxUpdate( context, inBuf , outBuf , operation , cipherName , transformCtx ) ;
-! if( rtv < 0 ) {
-! xmlSecError( XMLSEC_ERRORS_HERE ,
-! xmlSecErrorsSafeString( xmlSecTransformGetName( transform ) ) ,
-! "xmlSecNssBlockCipherCtxUpdate" ,
-! XMLSEC_ERRORS_R_INVALID_STATUS ,
-! XMLSEC_ERRORS_NO_MESSAGE ) ;
-! return -1 ;
-! }
-! }
-!
-! if( last ) {
-! rtv = xmlSecNssBlockCipherCtxFinal( context, inBuf , outBuf , operation , cipherName , transformCtx ) ;
-! if( rtv < 0 ) {
-! xmlSecError( XMLSEC_ERRORS_HERE ,
-! xmlSecErrorsSafeString( xmlSecTransformGetName( transform ) ) ,
-! "xmlSecNssBlockCipherCtxFinal" ,
-! XMLSEC_ERRORS_R_INVALID_STATUS ,
-! XMLSEC_ERRORS_NO_MESSAGE ) ;
-! return -1 ;
-! }
-! transform->status = xmlSecTransformStatusFinished ;
-! }
-! } else if( transform->status == xmlSecTransformStatusFinished ) {
-! if( xmlSecBufferGetSize( inBuf ) != 0 ) {
-! xmlSecError( XMLSEC_ERRORS_HERE ,
-! xmlSecErrorsSafeString( xmlSecTransformGetName( transform ) ) ,
-! NULL ,
-! XMLSEC_ERRORS_R_INVALID_STATUS ,
-! "status=%d", transform->status ) ;
-! return -1 ;
-! }
-! } else {
-! xmlSecError( XMLSEC_ERRORS_HERE ,
-! xmlSecErrorsSafeString( xmlSecTransformGetName( transform ) ) ,
-! NULL ,
-! XMLSEC_ERRORS_R_INVALID_STATUS ,
-! "status=%d", transform->status ) ;
-! return -1 ;
-! }
-!
-! return 0 ;
-! }
-!
-! #ifdef __MINGW32__ // for runtime-pseudo-reloc
-! static struct _xmlSecTransformKlass xmlSecNssAes128CbcKlass = {
-! #else
- static xmlSecTransformKlass xmlSecNssAes128CbcKlass = {
-! #endif
-! sizeof( xmlSecTransformKlass ) ,
-! xmlSecNssBlockCipherSize ,
-!
-! xmlSecNameAes128Cbc ,
-! xmlSecHrefAes128Cbc ,
-! xmlSecTransformUsageEncryptionMethod ,
-!
-! xmlSecNssBlockCipherInitialize ,
-! xmlSecNssBlockCipherFinalize ,
-! NULL ,
-! NULL ,
-!
-! xmlSecNssBlockCipherSetKeyReq ,
-! xmlSecNssBlockCipherSetKey ,
-! NULL ,
-! xmlSecTransformDefaultGetDataType ,
-!
-! xmlSecTransformDefaultPushBin ,
-! xmlSecTransformDefaultPopBin ,
-! NULL ,
-! NULL ,
-! xmlSecNssBlockCipherExecute ,
-!
-! NULL ,
-! NULL
-! } ;
-!
-!
-! #ifdef __MINGW32__ // for runtime-pseudo-reloc
-! static struct _xmlSecTransformKlass xmlSecNssAes192CbcKlass = {
-! #else
-! static xmlSecTransformKlass xmlSecNssAes192CbcKlass = {
-! #endif
-! sizeof( xmlSecTransformKlass ) ,
-! xmlSecNssBlockCipherSize ,
-!
-! xmlSecNameAes192Cbc ,
-! xmlSecHrefAes192Cbc ,
-! xmlSecTransformUsageEncryptionMethod ,
-!
-! xmlSecNssBlockCipherInitialize ,
-! xmlSecNssBlockCipherFinalize ,
-! NULL ,
-! NULL ,
-!
-! xmlSecNssBlockCipherSetKeyReq ,
-! xmlSecNssBlockCipherSetKey ,
-! NULL ,
-! xmlSecTransformDefaultGetDataType ,
-!
-! xmlSecTransformDefaultPushBin ,
-! xmlSecTransformDefaultPopBin ,
-! NULL ,
-! NULL ,
-! xmlSecNssBlockCipherExecute ,
-!
-! NULL ,
-! NULL
-! } ;
-!
-!
-! #ifdef __MINGW32__ // for runtime-pseudo-reloc
-! static struct _xmlSecTransformKlass xmlSecNssAes256CbcKlass = {
-! #else
-! static xmlSecTransformKlass xmlSecNssAes256CbcKlass = {
-! #endif
-! sizeof( xmlSecTransformKlass ) ,
-! xmlSecNssBlockCipherSize ,
-!
-! xmlSecNameAes256Cbc ,
-! xmlSecHrefAes256Cbc ,
-! xmlSecTransformUsageEncryptionMethod ,
-!
-! xmlSecNssBlockCipherInitialize ,
-! xmlSecNssBlockCipherFinalize ,
-! NULL ,
-! NULL ,
-!
-! xmlSecNssBlockCipherSetKeyReq ,
-! xmlSecNssBlockCipherSetKey ,
-! NULL ,
-! xmlSecTransformDefaultGetDataType ,
-!
-! xmlSecTransformDefaultPushBin ,
-! xmlSecTransformDefaultPopBin ,
-! NULL ,
-! NULL ,
-! xmlSecNssBlockCipherExecute ,
-!
-! NULL ,
-! NULL
-! } ;
-!
-! #ifdef __MINGW32__ // for runtime-pseudo-reloc
-! static struct _xmlSecTransformKlass xmlSecNssDes3CbcKlass = {
-! #else
-! static xmlSecTransformKlass xmlSecNssDes3CbcKlass = {
-! #endif
-! sizeof( xmlSecTransformKlass ) ,
-! xmlSecNssBlockCipherSize ,
-!
-! xmlSecNameDes3Cbc ,
-! xmlSecHrefDes3Cbc ,
-! xmlSecTransformUsageEncryptionMethod ,
-!
-! xmlSecNssBlockCipherInitialize ,
-! xmlSecNssBlockCipherFinalize ,
-! NULL ,
-! NULL ,
-!
-! xmlSecNssBlockCipherSetKeyReq ,
-! xmlSecNssBlockCipherSetKey ,
-! NULL ,
-! xmlSecTransformDefaultGetDataType ,
-!
-! xmlSecTransformDefaultPushBin ,
-! xmlSecTransformDefaultPopBin ,
-! NULL ,
-! NULL ,
-! xmlSecNssBlockCipherExecute ,
-!
-! NULL ,
-! NULL
-! } ;
-
- /**
-! * xmlSecNssTransformAes128CbcGetKlass
-! *
-! * Get the AES128_CBC transform klass
-! *
-! * Return AES128_CBC transform klass
-! */
-! xmlSecTransformId
-! xmlSecNssTransformAes128CbcGetKlass( void ) {
-! return ( &xmlSecNssAes128CbcKlass ) ;
- }
-
- /**
-! * xmlSecNssTransformAes192CbcGetKlass
-! *
-! * Get the AES192_CBC transform klass
-! *
-! * Return AES192_CBC transform klass
-! */
-! xmlSecTransformId
-! xmlSecNssTransformAes192CbcGetKlass( void ) {
-! return ( &xmlSecNssAes192CbcKlass ) ;
- }
-
- /**
-! * xmlSecNssTransformAes256CbcGetKlass
-! *
-! * Get the AES256_CBC transform klass
-! *
-! * Return AES256_CBC transform klass
-! */
-! xmlSecTransformId
-! xmlSecNssTransformAes256CbcGetKlass( void ) {
-! return ( &xmlSecNssAes256CbcKlass ) ;
- }
-
-! /**
-! * xmlSecNssTransformDes3CbcGetKlass
- *
-! * Get the DES3_CBC transform klass
-! *
-! * Return DES3_CBC transform klass
- */
-! xmlSecTransformId
-! xmlSecNssTransformDes3CbcGetKlass( void ) {
-! return ( &xmlSecNssDes3CbcKlass ) ;
- }
-!
-
-*** misc/xmlsec1-1.2.6/src/nss/crypto.c Wed Oct 29 16:57:25 2003
---- misc/build/xmlsec1-1.2.6/src/nss/crypto.c Fri May 11 14:47:20 2007
-***************
-*** 130,135 ****
---- 130,136 ----
- /**
- * High level routines form xmlsec command line utility
- */
-+ /*
- gXmlSecNssFunctions->cryptoAppInit = xmlSecNssAppInit;
- gXmlSecNssFunctions->cryptoAppShutdown = xmlSecNssAppShutdown;
- gXmlSecNssFunctions->cryptoAppDefaultKeysMngrInit = xmlSecNssAppDefaultKeysMngrInit;
-***************
-*** 143,152 ****
- gXmlSecNssFunctions->cryptoAppPkcs12LoadMemory = xmlSecNssAppPkcs12LoadMemory;
- gXmlSecNssFunctions->cryptoAppKeyCertLoad = xmlSecNssAppKeyCertLoad;
- gXmlSecNssFunctions->cryptoAppKeyCertLoadMemory = xmlSecNssAppKeyCertLoadMemory;
-! #endif /* XMLSEC_NO_X509 */
- gXmlSecNssFunctions->cryptoAppKeyLoad = xmlSecNssAppKeyLoad;
- gXmlSecNssFunctions->cryptoAppKeyLoadMemory = xmlSecNssAppKeyLoadMemory;
- gXmlSecNssFunctions->cryptoAppDefaultPwdCallback = (void*)xmlSecNssAppGetDefaultPwdCallback;
-
- return(gXmlSecNssFunctions);
- }
---- 144,172 ----
- gXmlSecNssFunctions->cryptoAppPkcs12LoadMemory = xmlSecNssAppPkcs12LoadMemory;
- gXmlSecNssFunctions->cryptoAppKeyCertLoad = xmlSecNssAppKeyCertLoad;
- gXmlSecNssFunctions->cryptoAppKeyCertLoadMemory = xmlSecNssAppKeyCertLoadMemory;
-! #endif
- gXmlSecNssFunctions->cryptoAppKeyLoad = xmlSecNssAppKeyLoad;
- gXmlSecNssFunctions->cryptoAppKeyLoadMemory = xmlSecNssAppKeyLoadMemory;
- gXmlSecNssFunctions->cryptoAppDefaultPwdCallback = (void*)xmlSecNssAppGetDefaultPwdCallback;
++#ifndef __XMLSEC_MSCRYPTO_AKMNGR_H__
++#define __XMLSEC_MSCRYPTO_AKMNGR_H__
++
++#include <windows.h>
++#include <wincrypt.h>
++
++#include <xmlsec/xmlsec.h>
++#include <xmlsec/keys.h>
++#include <xmlsec/transforms.h>
++
++#ifdef __cplusplus
++extern "C" {
++#endif /* __cplusplus */
++
++XMLSEC_CRYPTO_EXPORT xmlSecKeysMngrPtr
++xmlSecMSCryptoAppliedKeysMngrCreate(
++ HCERTSTORE keyStore ,
++ HCERTSTORE certStore
++) ;
++
++XMLSEC_CRYPTO_EXPORT int
++xmlSecMSCryptoAppliedKeysMngrSymKeyLoad(
++ xmlSecKeysMngrPtr mngr ,
++ HCRYPTKEY symKey
++) ;
++
++XMLSEC_CRYPTO_EXPORT int
++xmlSecMSCryptoAppliedKeysMngrPubKeyLoad(
++ xmlSecKeysMngrPtr mngr ,
++ HCRYPTKEY pubKey
++) ;
++
++XMLSEC_CRYPTO_EXPORT int
++xmlSecMSCryptoAppliedKeysMngrPriKeyLoad(
++ xmlSecKeysMngrPtr mngr ,
++ HCRYPTKEY priKey
++) ;
++
++XMLSEC_CRYPTO_EXPORT int
++xmlSecMSCryptoAppliedKeysMngrAdoptKeyStore (
++ xmlSecKeysMngrPtr mngr ,
++ HCERTSTORE keyStore
++) ;
++
++XMLSEC_CRYPTO_EXPORT int
++xmlSecMSCryptoAppliedKeysMngrAdoptTrustedStore (
++ xmlSecKeysMngrPtr mngr ,
++ HCERTSTORE trustedStore
++) ;
++
++XMLSEC_CRYPTO_EXPORT int
++xmlSecMSCryptoAppliedKeysMngrAdoptUntrustedStore (
++ xmlSecKeysMngrPtr mngr ,
++ HCERTSTORE untrustedStore
++) ;
++
++#ifdef __cplusplus
++}
++#endif /* __cplusplus */
++
++#endif /* __XMLSEC_MSCRYPTO_AKMNGR_H__ */
++
++
+--- misc/xmlsec1-1.2.6/include/xmlsec/mscrypto/x509.h 2003-09-26 08:12:46.000000000 +0200
++++ misc/build/xmlsec1-1.2.6/include/xmlsec/mscrypto/x509.h 2008-06-29 23:44:19.000000000 +0200
+@@ -77,6 +77,21 @@
+ PCCERT_CONTEXT cert,
+ xmlSecKeyDataType type);
+
++XMLSEC_CRYPTO_EXPORT int xmlSecMSCryptoX509StoreAdoptKeyStore (
++ xmlSecKeyDataStorePtr store,
++ HCERTSTORE keyStore
++ ) ;
++
++XMLSEC_CRYPTO_EXPORT int xmlSecMSCryptoX509StoreAdoptTrustedStore (
++ xmlSecKeyDataStorePtr store,
++ HCERTSTORE trustedStore
++ ) ;
++
++XMLSEC_CRYPTO_EXPORT int xmlSecMSCryptoX509StoreAdoptUntrustedStore (
++ xmlSecKeyDataStorePtr store,
++ HCERTSTORE untrustedStore
++ ) ;
++
+
+ #endif /* XMLSEC_NO_X509 */
+
+--- misc/xmlsec1-1.2.6/include/xmlsec/nss/Makefile.am 2003-07-30 04:46:35.000000000 +0200
++++ misc/build/xmlsec1-1.2.6/include/xmlsec/nss/Makefile.am 2008-06-29 23:44:19.000000000 +0200
+@@ -3,6 +3,7 @@
+ xmlsecnssincdir = $(includedir)/xmlsec1/xmlsec/nss
+
+ xmlsecnssinc_HEADERS = \
++akmngr.h \
+ app.h \
+ crypto.h \
+ symbols.h \
+@@ -10,6 +11,8 @@
+ keysstore.h \
+ pkikeys.h \
+ x509.h \
++tokens.h \
++ciphers.h \
+ $(NULL)
+
+ install-exec-hook:
+--- misc/xmlsec1-1.2.6/include/xmlsec/nss/Makefile.in 2004-08-26 08:00:31.000000000 +0200
++++ misc/build/xmlsec1-1.2.6/include/xmlsec/nss/Makefile.in 2008-06-29 23:44:19.000000000 +0200
+@@ -273,6 +273,7 @@
+ NULL =
+ xmlsecnssincdir = $(includedir)/xmlsec1/xmlsec/nss
+ xmlsecnssinc_HEADERS = \
++akmngr.h \
+ app.h \
+ crypto.h \
+ symbols.h \
+@@ -280,6 +281,8 @@
+ keysstore.h \
+ pkikeys.h \
+ x509.h \
++tokens.h \
++ciphers.h \
+ $(NULL)
+
+ all: all-am
+--- misc/xmlsec1-1.2.6/include/xmlsec/nss/akmngr.h 2008-06-29 23:44:39.000000000 +0200
++++ misc/build/xmlsec1-1.2.6/include/xmlsec/nss/akmngr.h 2008-06-29 23:44:19.000000000 +0200
+@@ -1 +1,56 @@
+-dummy
++/**
++ * XMLSec library
++ *
++ * This is free software; see Copyright file in the source
++ * distribution for preciese wording.
++ *
++ * Copyright ..........................
+ */
-+
-+ gXmlSecNssFunctions->cryptoAppInit = NULL ;
-+ gXmlSecNssFunctions->cryptoAppShutdown = NULL ;
-+ gXmlSecNssFunctions->cryptoAppDefaultKeysMngrInit = NULL ;
-+ gXmlSecNssFunctions->cryptoAppDefaultKeysMngrAdoptKey = NULL ;
-+ gXmlSecNssFunctions->cryptoAppDefaultKeysMngrLoad = NULL ;
-+ gXmlSecNssFunctions->cryptoAppDefaultKeysMngrSave = NULL ;
-+ #ifndef XMLSEC_NO_X509
-+ gXmlSecNssFunctions->cryptoAppKeysMngrCertLoad = NULL ;
-+ gXmlSecNssFunctions->cryptoAppKeysMngrCertLoadMemory= NULL ;
-+ gXmlSecNssFunctions->cryptoAppPkcs12Load = NULL ;
-+ gXmlSecNssFunctions->cryptoAppPkcs12LoadMemory = NULL ;
-+ gXmlSecNssFunctions->cryptoAppKeyCertLoad = NULL ;
-+ gXmlSecNssFunctions->cryptoAppKeyCertLoadMemory = NULL ;
-+ #endif /* XMLSEC_NO_X509 */
-+ gXmlSecNssFunctions->cryptoAppKeyLoad = NULL ;
-+ gXmlSecNssFunctions->cryptoAppKeyLoadMemory = NULL ;
-+ gXmlSecNssFunctions->cryptoAppDefaultPwdCallback = (void*)NULL ;
-
- return(gXmlSecNssFunctions);
- }
-*** misc/xmlsec1-1.2.6/src/nss/digests.c Fri Sep 26 02:58:15 2003
---- misc/build/xmlsec1-1.2.6/src/nss/digests.c Fri May 11 14:47:20 2007
-***************
-*** 21,27 ****
- #include <xmlsec/transforms.h>
- #include <xmlsec/errors.h>
-
-- #include <xmlsec/nss/app.h>
- #include <xmlsec/nss/crypto.h>
-
- #define XMLSEC_NSS_MAX_DIGEST_SIZE 32
---- 21,26 ----
-***************
-*** 107,113 ****
- xmlSecErrorsSafeString(xmlSecTransformGetName(transform)),
- "SECOID_FindOIDByTag",
- XMLSEC_ERRORS_R_CRYPTO_FAILED,
-! XMLSEC_ERRORS_NO_MESSAGE);
- return(-1);
- }
-
---- 106,112 ----
- xmlSecErrorsSafeString(xmlSecTransformGetName(transform)),
- "SECOID_FindOIDByTag",
- XMLSEC_ERRORS_R_CRYPTO_FAILED,
-! "error code=%d", PORT_GetError());
- return(-1);
- }
-
-***************
-*** 117,123 ****
- xmlSecErrorsSafeString(xmlSecTransformGetName(transform)),
- "PK11_CreateDigestContext",
- XMLSEC_ERRORS_R_CRYPTO_FAILED,
-! XMLSEC_ERRORS_NO_MESSAGE);
- return(-1);
- }
-
---- 116,122 ----
- xmlSecErrorsSafeString(xmlSecTransformGetName(transform)),
- "PK11_CreateDigestContext",
- XMLSEC_ERRORS_R_CRYPTO_FAILED,
-! "error code=%d", PORT_GetError());
- return(-1);
- }
-
-***************
-*** 208,214 ****
- xmlSecErrorsSafeString(xmlSecTransformGetName(transform)),
- "PK11_DigestBegin",
- XMLSEC_ERRORS_R_CRYPTO_FAILED,
-! XMLSEC_ERRORS_NO_MESSAGE);
- return(-1);
- }
- transform->status = xmlSecTransformStatusWorking;
---- 207,213 ----
- xmlSecErrorsSafeString(xmlSecTransformGetName(transform)),
- "PK11_DigestBegin",
- XMLSEC_ERRORS_R_CRYPTO_FAILED,
-! "error code=%d", PORT_GetError());
- return(-1);
- }
- transform->status = xmlSecTransformStatusWorking;
-***************
-*** 225,231 ****
- xmlSecErrorsSafeString(xmlSecTransformGetName(transform)),
- "PK11_DigestOp",
- XMLSEC_ERRORS_R_CRYPTO_FAILED,
-! XMLSEC_ERRORS_NO_MESSAGE);
- return(-1);
- }
-
---- 224,230 ----
- xmlSecErrorsSafeString(xmlSecTransformGetName(transform)),
- "PK11_DigestOp",
- XMLSEC_ERRORS_R_CRYPTO_FAILED,
-! "error code=%d", PORT_GetError());
- return(-1);
- }
-
-***************
-*** 246,252 ****
- xmlSecErrorsSafeString(xmlSecTransformGetName(transform)),
- "PK11_DigestFinal",
- XMLSEC_ERRORS_R_CRYPTO_FAILED,
-! XMLSEC_ERRORS_NO_MESSAGE);
- return(-1);
- }
- xmlSecAssert2(ctx->dgstSize > 0, -1);
---- 245,251 ----
- xmlSecErrorsSafeString(xmlSecTransformGetName(transform)),
- "PK11_DigestFinal",
- XMLSEC_ERRORS_R_CRYPTO_FAILED,
-! "error code=%d", PORT_GetError());
- return(-1);
- }
- xmlSecAssert2(ctx->dgstSize > 0, -1);
-***************
-*** 285,291 ****
---- 284,294 ----
- * SHA1 Digest transforms
- *
- *****************************************************************************/
-+ #ifdef __MINGW32__ // for runtime-pseudo-reloc
-+ static struct _xmlSecTransformKlass xmlSecNssSha1Klass = {
-+ #else
- static xmlSecTransformKlass xmlSecNssSha1Klass = {
-+ #endif
- /* klass/object sizes */
- sizeof(xmlSecTransformKlass), /* xmlSecSize klassSize */
- xmlSecNssDigestSize, /* xmlSecSize objSize */
-*** misc/xmlsec1-1.2.6/src/nss/hmac.c Fri Sep 26 02:58:15 2003
---- misc/build/xmlsec1-1.2.6/src/nss/hmac.c Fri May 11 14:47:20 2007
-***************
-*** 23,30 ****
- #include <xmlsec/transforms.h>
- #include <xmlsec/errors.h>
-
-- #include <xmlsec/nss/app.h>
- #include <xmlsec/nss/crypto.h>
-
- #define XMLSEC_NSS_MAX_HMAC_SIZE 128
-
---- 23,30 ----
- #include <xmlsec/transforms.h>
- #include <xmlsec/errors.h>
-
- #include <xmlsec/nss/crypto.h>
-+ #include <xmlsec/nss/tokens.h>
-
- #define XMLSEC_NSS_MAX_HMAC_SIZE 128
-
-***************
-*** 241,253 ****
- keyItem.data = xmlSecBufferGetData(buffer);
- keyItem.len = xmlSecBufferGetSize(buffer);
-
-! slot = PK11_GetBestSlot(ctx->digestType, NULL);
- if(slot == NULL) {
- xmlSecError(XMLSEC_ERRORS_HERE,
- xmlSecErrorsSafeString(xmlSecTransformGetName(transform)),
-! "PK11_GetBestSlot",
- XMLSEC_ERRORS_R_CRYPTO_FAILED,
-! XMLSEC_ERRORS_NO_MESSAGE);
- return(-1);
- }
-
---- 241,253 ----
- keyItem.data = xmlSecBufferGetData(buffer);
- keyItem.len = xmlSecBufferGetSize(buffer);
-
-! slot = xmlSecNssSlotGet(ctx->digestType);
- if(slot == NULL) {
- xmlSecError(XMLSEC_ERRORS_HERE,
- xmlSecErrorsSafeString(xmlSecTransformGetName(transform)),
-! "xmlSecNssSlotGet",
- XMLSEC_ERRORS_R_CRYPTO_FAILED,
-! "error code=%d", PORT_GetError());
- return(-1);
- }
-
-***************
-*** 258,264 ****
- xmlSecErrorsSafeString(xmlSecTransformGetName(transform)),
- "PK11_ImportSymKey",
- XMLSEC_ERRORS_R_CRYPTO_FAILED,
-! XMLSEC_ERRORS_NO_MESSAGE);
- PK11_FreeSlot(slot);
- return(-1);
- }
---- 258,264 ----
- xmlSecErrorsSafeString(xmlSecTransformGetName(transform)),
- "PK11_ImportSymKey",
- XMLSEC_ERRORS_R_CRYPTO_FAILED,
-! "error code=%d", PORT_GetError());
- PK11_FreeSlot(slot);
- return(-1);
- }
-***************
-*** 269,275 ****
- xmlSecErrorsSafeString(xmlSecTransformGetName(transform)),
- "PK11_CreateContextBySymKey",
- XMLSEC_ERRORS_R_CRYPTO_FAILED,
-! XMLSEC_ERRORS_NO_MESSAGE);
- PK11_FreeSymKey(symKey);
- PK11_FreeSlot(slot);
- return(-1);
---- 269,275 ----
- xmlSecErrorsSafeString(xmlSecTransformGetName(transform)),
- "PK11_CreateContextBySymKey",
- XMLSEC_ERRORS_R_CRYPTO_FAILED,
-! "error code=%d", PORT_GetError());
- PK11_FreeSymKey(symKey);
- PK11_FreeSlot(slot);
- return(-1);
-***************
-*** 368,374 ****
- xmlSecErrorsSafeString(xmlSecTransformGetName(transform)),
- "PK11_DigestBegin",
- XMLSEC_ERRORS_R_CRYPTO_FAILED,
-! XMLSEC_ERRORS_NO_MESSAGE);
- return(-1);
- }
- transform->status = xmlSecTransformStatusWorking;
---- 368,374 ----
- xmlSecErrorsSafeString(xmlSecTransformGetName(transform)),
- "PK11_DigestBegin",
- XMLSEC_ERRORS_R_CRYPTO_FAILED,
-! "error code=%d", PORT_GetError());
- return(-1);
- }
- transform->status = xmlSecTransformStatusWorking;
-***************
-*** 385,391 ****
- xmlSecErrorsSafeString(xmlSecTransformGetName(transform)),
- "PK11_DigestOp",
- XMLSEC_ERRORS_R_CRYPTO_FAILED,
-! XMLSEC_ERRORS_NO_MESSAGE);
- return(-1);
- }
-
---- 385,391 ----
- xmlSecErrorsSafeString(xmlSecTransformGetName(transform)),
- "PK11_DigestOp",
- XMLSEC_ERRORS_R_CRYPTO_FAILED,
-! "error code=%d", PORT_GetError());
- return(-1);
- }
-
-***************
-*** 408,414 ****
- xmlSecErrorsSafeString(xmlSecTransformGetName(transform)),
- "PK11_DigestFinal",
- XMLSEC_ERRORS_R_CRYPTO_FAILED,
-! XMLSEC_ERRORS_NO_MESSAGE);
- return(-1);
- }
- xmlSecAssert2(dgstSize > 0, -1);
---- 408,414 ----
- xmlSecErrorsSafeString(xmlSecTransformGetName(transform)),
- "PK11_DigestFinal",
- XMLSEC_ERRORS_R_CRYPTO_FAILED,
-! "error code=%d", PORT_GetError());
- return(-1);
- }
- xmlSecAssert2(dgstSize > 0, -1);
-***************
-*** 459,465 ****
---- 459,469 ----
- /**
- * HMAC SHA1
- */
-+ #ifdef __MINGW32__ // for runtime-pseudo-reloc
-+ static struct _xmlSecTransformKlass xmlSecNssHmacSha1Klass = {
-+ #else
- static xmlSecTransformKlass xmlSecNssHmacSha1Klass = {
-+ #endif
- /* klass/object sizes */
- sizeof(xmlSecTransformKlass), /* xmlSecSize klassSize */
- xmlSecNssHmacSize, /* xmlSecSize objSize */
-***************
-*** 501,507 ****
---- 505,515 ----
- /**
- * HMAC Ripemd160
- */
-+ #ifdef __MINGW32__ // for runtime-pseudo-reloc
-+ static struct _xmlSecTransformKlass xmlSecNssHmacRipemd160Klass = {
-+ #else
- static xmlSecTransformKlass xmlSecNssHmacRipemd160Klass = {
-+ #endif
- /* klass/object sizes */
- sizeof(xmlSecTransformKlass), /* xmlSecSize klassSize */
- xmlSecNssHmacSize, /* xmlSecSize objSize */
-***************
-*** 543,549 ****
---- 551,561 ----
- /**
- * HMAC Md5
- */
-+ #ifdef __MINGW32__ // for runtime-pseudo-reloc
-+ static struct _xmlSecTransformKlass xmlSecNssHmacMd5Klass = {
-+ #else
- static xmlSecTransformKlass xmlSecNssHmacMd5Klass = {
-+ #endif
- /* klass/object sizes */
- sizeof(xmlSecTransformKlass), /* xmlSecSize klassSize */
- xmlSecNssHmacSize, /* xmlSecSize objSize */
-*** misc/xmlsec1-1.2.6/src/nss/keysstore.c Fri Sep 26 02:58:15 2003
---- misc/build/xmlsec1-1.2.6/src/nss/keysstore.c Fri May 11 14:47:20 2007
-***************
-*** 1,119 ****
- /**
- * XMLSec library
- *
-- * Nss keys store that uses Simple Keys Store under the hood. Uses the
-- * Nss DB as a backing store for the finding keys, but the NSS DB is
-- * not written to by the keys store.
-- * So, if store->findkey is done and the key is not found in the simple
-- * keys store, the NSS DB is looked up.
-- * If store is called to adopt a key, that key is not written to the NSS
-- * DB.
-- * Thus, the NSS DB can be used to pre-load keys and becomes an alternate
-- * source of keys for xmlsec
-- *
- * This is free software; see Copyright file in the source
- * distribution for precise wording.
- *
-! * Copyright (c) 2003 America Online, Inc. All rights reserved.
- */
-- #include "globals.h"
-
-! #include <stdlib.h>
- #include <string.h>
-
-! #include <nss.h>
-! #include <cert.h>
-! #include <pk11func.h>
-! #include <keyhi.h>
-
-- #include <libxml/tree.h>
-
- #include <xmlsec/xmlsec.h>
-! #include <xmlsec/buffer.h>
-! #include <xmlsec/base64.h>
-! #include <xmlsec/errors.h>
-! #include <xmlsec/xmltree.h>
-!
- #include <xmlsec/keysmngr.h>
-
- #include <xmlsec/nss/crypto.h>
- #include <xmlsec/nss/keysstore.h>
-! #include <xmlsec/nss/x509.h>
- #include <xmlsec/nss/pkikeys.h>
-
-! /****************************************************************************
- *
-! * Nss Keys Store. Uses Simple Keys Store under the hood
-! *
-! * Simple Keys Store ptr is located after xmlSecKeyStore
- *
-! ***************************************************************************/
-! #define xmlSecNssKeysStoreSize \
-! (sizeof(xmlSecKeyStore) + sizeof(xmlSecKeyStorePtr))
-!
-! #define xmlSecNssKeysStoreGetSS(store) \
-! ((xmlSecKeyStoreCheckSize((store), xmlSecNssKeysStoreSize)) ? \
-! (xmlSecKeyStorePtr*)(((xmlSecByte*)(store)) + sizeof(xmlSecKeyStore)) : \
-! (xmlSecKeyStorePtr*)NULL)
-!
-! static int xmlSecNssKeysStoreInitialize (xmlSecKeyStorePtr store);
-! static void xmlSecNssKeysStoreFinalize (xmlSecKeyStorePtr store);
-! static xmlSecKeyPtr xmlSecNssKeysStoreFindKey (xmlSecKeyStorePtr store,
-! const xmlChar* name,
-! xmlSecKeyInfoCtxPtr keyInfoCtx);
-
-! static xmlSecKeyStoreKlass xmlSecNssKeysStoreKlass = {
-! sizeof(xmlSecKeyStoreKlass),
-! xmlSecNssKeysStoreSize,
-
-! /* data */
-! BAD_CAST "NSS-keys-store", /* const xmlChar* name; */
-!
-! /* constructors/destructor */
-! xmlSecNssKeysStoreInitialize, /* xmlSecKeyStoreInitializeMethod initialize; */
-! xmlSecNssKeysStoreFinalize, /* xmlSecKeyStoreFinalizeMethod finalize; */
-! xmlSecNssKeysStoreFindKey, /* xmlSecKeyStoreFindKeyMethod findKey; */
-!
-! /* reserved for the future */
-! NULL, /* void* reserved0; */
-! NULL, /* void* reserved1; */
-! };
-
-! /**
-! * xmlSecNssKeysStoreGetKlass:
-! *
-! * The Nss list based keys store klass.
- *
-! * Returns Nss list based keys store klass.
- */
-! xmlSecKeyStoreId
-! xmlSecNssKeysStoreGetKlass(void) {
-! return(&xmlSecNssKeysStoreKlass);
- }
-
-! /**
-! * xmlSecNssKeysStoreAdoptKey:
-! * @store: the pointer to Nss keys store.
-! * @key: the pointer to key.
-! *
-! * Adds @key to the @store.
- *
-! * Returns 0 on success or a negative value if an error occurs.
- */
-! int
-! xmlSecNssKeysStoreAdoptKey(xmlSecKeyStorePtr store, xmlSecKeyPtr key) {
-! xmlSecKeyStorePtr *ss;
-!
-! xmlSecAssert2(xmlSecKeyStoreCheckId(store, xmlSecNssKeysStoreId), -1);
-! xmlSecAssert2((key != NULL), -1);
-
-! ss = xmlSecNssKeysStoreGetSS(store);
-! xmlSecAssert2(((ss != NULL) && (*ss != NULL) &&
-! (xmlSecKeyStoreCheckId(*ss, xmlSecSimpleKeysStoreId))), -1);
-
-! return (xmlSecSimpleKeysStoreAdoptKey(*ss, key));
- }
-
- /**
- * xmlSecNssKeysStoreLoad:
- * @store: the pointer to Nss keys store.
---- 1,522 ----
- /**
- * XMLSec library
- *
- * This is free software; see Copyright file in the source
- * distribution for precise wording.
- *
-! * Copyright................................
- */
-
-! /**
-! * NSS key store uses a key list and a slot list as the key repository. NSS slot
-! * list is a backup repository for the finding keys. If a key is not found from
-! * the key list, the NSS slot list is looked up.
-! *
-! * Any key in the key list will not save to pkcs11 slot. When a store to called
-! * to adopt a key, the key is resident in the key list; While a store to called
-! * to set a is resident in the key list; While a store to called to set a slot
-! * list, which means that the keys in the listed slot can be used for xml sign-
-! * nature or encryption.
-! *
-! * Then, a user can adjust slot list to effect the crypto behaviors of xmlSec.
-! *
-! * The framework will decrease the user interfaces to administrate xmlSec crypto
-! * engine. He can only focus on NSS layer functions. For examples, after the
-! * user set up a slot list handler to the keys store, he do not need to do any
-! * other work atop xmlSec interfaces, his action on the slot list handler, such
-! * as add a token to, delete a token from the list, will directly effect the key
-! * store behaviors.
-! *
-! * For example, a scenariio:
-! * 0. Create a slot list;( NSS interfaces )
-! * 1. Create a keys store;( xmlSec interfaces )
-! * 2. Set slot list with the keys store;( xmlSec Interfaces )
-! * 3. Add a slot to the slot list;( NSS interfaces )
-! * 4. Perform xml signature; ( xmlSec Interfaces )
-! * 5. Deleter a slot from the slot list;( NSS interfaces )
-! * 6. Perform xml encryption; ( xmlSec Interfaces )
-! * 7. Perform xml signature;( xmlSec Interfaces )
-! * 8. Destroy the keys store;( xmlSec Interfaces )
-! * 8. Destroy the slot list.( NSS Interfaces )
-! */
-!
-! #include "globals.h"
- #include <string.h>
-
-! #include <nss.h>
-! #include <pk11func.h>
-! #include <prinit.h>
-! #include <keyhi.h>
-
-
- #include <xmlsec/xmlsec.h>
-! #include <xmlsec/keys.h>
- #include <xmlsec/keysmngr.h>
-+ #include <xmlsec/transforms.h>
-+ #include <xmlsec/xmltree.h>
-+ #include <xmlsec/errors.h>
-
- #include <xmlsec/nss/crypto.h>
- #include <xmlsec/nss/keysstore.h>
-! #include <xmlsec/nss/tokens.h>
-! #include <xmlsec/nss/ciphers.h>
- #include <xmlsec/nss/pkikeys.h>
-
-! /**
-! * Internal NSS key store context
- *
-! * This context is located after xmlSecKeyStore
-! */
-! typedef struct _xmlSecNssKeysStoreCtx xmlSecNssKeysStoreCtx ;
-! typedef struct _xmlSecNssKeysStoreCtx* xmlSecNssKeysStoreCtxPtr ;
-!
-! struct _xmlSecNssKeysStoreCtx {
-! xmlSecPtrListPtr keyList ;
-! xmlSecPtrListPtr slotList ;
-! } ;
-!
-! #define xmlSecNssKeysStoreSize \
-! ( sizeof( xmlSecKeyStore ) + sizeof( xmlSecNssKeysStoreCtx ) )
-!
-! #define xmlSecNssKeysStoreGetCtx( data ) \
-! ( ( xmlSecNssKeysStoreCtxPtr )( ( ( xmlSecByte* )( data ) ) + sizeof( xmlSecKeyStore ) ) )
-!
-! int xmlSecNssKeysStoreAdoptKeySlot(
-! xmlSecKeyStorePtr store ,
-! xmlSecNssKeySlotPtr keySlot
-! ) {
-! xmlSecNssKeysStoreCtxPtr context = NULL ;
-!
-! xmlSecAssert2( xmlSecKeyStoreCheckId( store , xmlSecNssKeysStoreId ) , -1 ) ;
-! xmlSecAssert2( xmlSecKeyStoreCheckSize( store , xmlSecNssKeysStoreSize ) , -1 ) ;
-!
-! context = xmlSecNssKeysStoreGetCtx( store ) ;
-! if( context == NULL ) {
-! xmlSecError( XMLSEC_ERRORS_HERE ,
-! xmlSecErrorsSafeString( xmlSecKeyStoreGetName( store ) ) ,
-! "xmlSecNssKeysStoreGetCtx" ,
-! XMLSEC_ERRORS_R_XMLSEC_FAILED ,
-! XMLSEC_ERRORS_NO_MESSAGE ) ;
-! return -1 ;
-! }
-!
-! if( context->slotList == NULL ) {
-! if( ( context->slotList = xmlSecPtrListCreate( xmlSecNssKeySlotListId ) ) == NULL ) {
-! xmlSecError( XMLSEC_ERRORS_HERE ,
-! xmlSecErrorsSafeString( xmlSecKeyStoreGetName( store ) ) ,
-! "xmlSecPtrListCreate" ,
-! XMLSEC_ERRORS_R_XMLSEC_FAILED ,
-! XMLSEC_ERRORS_NO_MESSAGE ) ;
-! return -1 ;
-! }
-! }
-!
-! if( !xmlSecPtrListCheckId( context->slotList , xmlSecNssKeySlotListId ) ) {
-! xmlSecError( XMLSEC_ERRORS_HERE ,
-! xmlSecErrorsSafeString( xmlSecKeyStoreGetName( store ) ) ,
-! "xmlSecPtrListCheckId" ,
-! XMLSEC_ERRORS_R_XMLSEC_FAILED ,
-! XMLSEC_ERRORS_NO_MESSAGE ) ;
-! return -1 ;
-! }
-!
-! if( xmlSecPtrListAdd( context->slotList , keySlot ) < 0 ) {
-! xmlSecError( XMLSEC_ERRORS_HERE ,
-! xmlSecErrorsSafeString( xmlSecKeyStoreGetName( store ) ) ,
-! "xmlSecPtrListAdd" ,
-! XMLSEC_ERRORS_R_XMLSEC_FAILED ,
-! XMLSEC_ERRORS_NO_MESSAGE ) ;
-! return -1 ;
-! }
-!
-! return 0 ;
-! }
-!
-! int xmlSecNssKeysStoreAdoptKey(
-! xmlSecKeyStorePtr store ,
-! xmlSecKeyPtr key
-! ) {
-! xmlSecNssKeysStoreCtxPtr context = NULL ;
-!
-! xmlSecAssert2( xmlSecKeyStoreCheckId( store , xmlSecNssKeysStoreId ) , -1 ) ;
-! xmlSecAssert2( xmlSecKeyStoreCheckSize( store , xmlSecNssKeysStoreSize ) , -1 ) ;
-!
-! context = xmlSecNssKeysStoreGetCtx( store ) ;
-! if( context == NULL ) {
-! xmlSecError( XMLSEC_ERRORS_HERE ,
-! xmlSecErrorsSafeString( xmlSecKeyStoreGetName( store ) ) ,
-! "xmlSecNssKeysStoreGetCtx" ,
-! XMLSEC_ERRORS_R_XMLSEC_FAILED ,
-! XMLSEC_ERRORS_NO_MESSAGE ) ;
-! return -1 ;
-! }
-!
-! if( context->keyList == NULL ) {
-! if( ( context->keyList = xmlSecPtrListCreate( xmlSecKeyPtrListId ) ) == NULL ) {
-! xmlSecError( XMLSEC_ERRORS_HERE ,
-! xmlSecErrorsSafeString( xmlSecKeyStoreGetName( store ) ) ,
-! "xmlSecPtrListCreate" ,
-! XMLSEC_ERRORS_R_XMLSEC_FAILED ,
-! XMLSEC_ERRORS_NO_MESSAGE ) ;
-! return -1 ;
-! }
-! }
-!
-! if( !xmlSecPtrListCheckId( context->keyList , xmlSecKeyPtrListId ) ) {
-! xmlSecError( XMLSEC_ERRORS_HERE ,
-! xmlSecErrorsSafeString( xmlSecKeyStoreGetName( store ) ) ,
-! "xmlSecPtrListCheckId" ,
-! XMLSEC_ERRORS_R_XMLSEC_FAILED ,
-! XMLSEC_ERRORS_NO_MESSAGE ) ;
-! return -1 ;
-! }
-!
-! if( xmlSecPtrListAdd( context->keyList , key ) < 0 ) {
-! xmlSecError( XMLSEC_ERRORS_HERE ,
-! xmlSecErrorsSafeString( xmlSecKeyStoreGetName( store ) ) ,
-! "xmlSecPtrListAdd" ,
-! XMLSEC_ERRORS_R_XMLSEC_FAILED ,
-! XMLSEC_ERRORS_NO_MESSAGE ) ;
-! return -1 ;
-! }
-!
-! return 0 ;
-! }
-!
-! /**
-! * xmlSecKeyStoreInitializeMethod:
-! * @store: the store.
- *
-! * Keys store specific initialization method.
-! *
-! * Returns 0 on success or a negative value if an error occurs.
-! */
-! static int
-! xmlSecNssKeysStoreInitialize(
-! xmlSecKeyStorePtr store
-! ) {
-! xmlSecNssKeysStoreCtxPtr context = NULL ;
-!
-! xmlSecAssert2( xmlSecKeyStoreCheckId( store , xmlSecNssKeysStoreId ) , -1 ) ;
-! xmlSecAssert2( xmlSecKeyStoreCheckSize( store , xmlSecNssKeysStoreSize ) , -1 ) ;
-!
-! context = xmlSecNssKeysStoreGetCtx( store ) ;
-! if( context == NULL ) {
-! xmlSecError( XMLSEC_ERRORS_HERE ,
-! xmlSecErrorsSafeString( xmlSecKeyStoreGetName( store ) ) ,
-! "xmlSecNssKeysStoreGetCtx" ,
-! XMLSEC_ERRORS_R_XMLSEC_FAILED ,
-! XMLSEC_ERRORS_NO_MESSAGE ) ;
-! return -1 ;
-! }
-
-! context->keyList = NULL ;
-! context->slotList = NULL ;
-
-! return 0 ;
-! }
-
-! /**
-! * xmlSecKeyStoreFinalizeMethod:
-! * @store: the store.
- *
-! * Keys store specific finalization (destroy) method.
- */
-! void
-! xmlSecNssKeysStoreFinalize(
-! xmlSecKeyStorePtr store
-! ) {
-! xmlSecNssKeysStoreCtxPtr context = NULL ;
-!
-! xmlSecAssert( xmlSecKeyStoreCheckId( store , xmlSecNssKeysStoreId ) ) ;
-! xmlSecAssert( xmlSecKeyStoreCheckSize( store , xmlSecNssKeysStoreSize ) ) ;
-!
-! context = xmlSecNssKeysStoreGetCtx( store ) ;
-! if( context == NULL ) {
-! xmlSecError( XMLSEC_ERRORS_HERE ,
-! xmlSecErrorsSafeString( xmlSecKeyStoreGetName( store ) ) ,
-! "xmlSecNssKeysStoreGetCtx" ,
-! XMLSEC_ERRORS_R_XMLSEC_FAILED ,
-! XMLSEC_ERRORS_NO_MESSAGE ) ;
-! return ;
-! }
-!
-! if( context->keyList != NULL ) {
-! xmlSecPtrListDestroy( context->keyList ) ;
-! context->keyList = NULL ;
-! }
-!
-! if( context->slotList != NULL ) {
-! xmlSecPtrListDestroy( context->slotList ) ;
-! context->slotList = NULL ;
-! }
- }
-
-! xmlSecKeyPtr
-! xmlSecNssKeysStoreFindKeyFromSlot(
-! PK11SlotInfo* slot,
-! const xmlChar* name,
-! xmlSecKeyInfoCtxPtr keyInfoCtx
-! ) {
-! xmlSecKeyPtr key = NULL ;
-! xmlSecKeyDataPtr data = NULL ;
-! int length ;
-!
-! xmlSecAssert2( slot != NULL , NULL ) ;
-! xmlSecAssert2( name != NULL , NULL ) ;
-! xmlSecAssert2( keyInfoCtx != NULL , NULL ) ;
-!
-! if( ( keyInfoCtx->keyReq.keyType & xmlSecKeyDataTypeSymmetric ) == xmlSecKeyDataTypeSymmetric ) {
-! PK11SymKey* symKey ;
-! PK11SymKey* curKey ;
-!
-! /* Find symmetric key from the slot by name */
-! symKey = PK11_ListFixedKeysInSlot( slot , ( char* )name , NULL ) ;
-! for( curKey = symKey ; curKey != NULL ; curKey = PK11_GetNextSymKey( curKey ) ) {
-! /* Check the key request */
-! length = PK11_GetKeyLength( curKey ) ;
-! length *= 8 ;
-! if( ( keyInfoCtx->keyReq.keyBitsSize > 0 ) &&
-! ( length > 0 ) &&
-! ( length < keyInfoCtx->keyReq.keyBitsSize ) )
-! continue ;
-!
-! /* We find a eligible key */
-! data = xmlSecNssSymKeyDataKeyAdopt( curKey ) ;
-! if( data == NULL ) {
-! /* Do nothing */
-! }
-! break ;
-! }
-!
-! /* Destroy the sym key list */
-! for( curKey = symKey ; curKey != NULL ; ) {
-! symKey = curKey ;
-! curKey = PK11_GetNextSymKey( symKey ) ;
-! PK11_FreeSymKey( symKey ) ;
-! }
-! } else if( ( keyInfoCtx->keyReq.keyType & xmlSecKeyDataTypePublic ) == xmlSecKeyDataTypePublic ) {
-! SECKEYPublicKeyList* pubKeyList ;
-! SECKEYPublicKey* pubKey ;
-! SECKEYPublicKeyListNode* curPub ;
-!
-! /* Find asymmetric key from the slot by name */
-! pubKeyList = PK11_ListPublicKeysInSlot( slot , ( char* )name ) ;
-! pubKey = NULL ;
-! curPub = PUBKEY_LIST_HEAD(pubKeyList);
-! for( ; !PUBKEY_LIST_END(curPub, pubKeyList) ; curPub = PUBKEY_LIST_NEXT( curPub ) ) {
-! /* Check the key request */
-! length = SECKEY_PublicKeyStrength( curPub->key ) ;
-! length *= 8 ;
-! if( ( keyInfoCtx->keyReq.keyBitsSize > 0 ) &&
-! ( length > 0 ) &&
-! ( length < keyInfoCtx->keyReq.keyBitsSize ) )
-! continue ;
-!
-! /* We find a eligible key */
-! pubKey = curPub->key ;
-! break ;
-! }
-!
-! if( pubKey != NULL ) {
-! data = xmlSecNssPKIAdoptKey( NULL, pubKey ) ;
-! if( data == NULL ) {
-! /* Do nothing */
-! }
-! }
-!
-! /* Destroy the public key list */
-! SECKEY_DestroyPublicKeyList( pubKeyList ) ;
-! } else if( ( keyInfoCtx->keyReq.keyType & xmlSecKeyDataTypePrivate ) == xmlSecKeyDataTypePrivate ) {
-! SECKEYPrivateKeyList* priKeyList = NULL ;
-! SECKEYPrivateKey* priKey = NULL ;
-! SECKEYPrivateKeyListNode* curPri ;
-!
-! /* Find asymmetric key from the slot by name */
-! priKeyList = PK11_ListPrivKeysInSlot( slot , ( char* )name , NULL ) ;
-! priKey = NULL ;
-! curPri = PRIVKEY_LIST_HEAD(priKeyList);
-! for( ; !PRIVKEY_LIST_END(curPri, priKeyList) ; curPri = PRIVKEY_LIST_NEXT( curPri ) ) {
-! /* Check the key request */
-! length = PK11_SignatureLen( curPri->key ) ;
-! length *= 8 ;
-! if( ( keyInfoCtx->keyReq.keyBitsSize > 0 ) &&
-! ( length > 0 ) &&
-! ( length < keyInfoCtx->keyReq.keyBitsSize ) )
-! continue ;
-!
-! /* We find a eligible key */
-! priKey = curPri->key ;
-! break ;
-! }
-!
-! if( priKey != NULL ) {
-! data = xmlSecNssPKIAdoptKey( priKey, NULL ) ;
-! if( data == NULL ) {
-! /* Do nothing */
-! }
-! }
-!
-! /* Destroy the private key list */
-! SECKEY_DestroyPrivateKeyList( priKeyList ) ;
-! }
-!
-! /* If we have gotten the key value */
-! if( data != NULL ) {
-! if( ( key = xmlSecKeyCreate() ) == NULL ) {
-! xmlSecError( XMLSEC_ERRORS_HERE ,
-! NULL ,
-! "xmlSecKeyCreate" ,
-! XMLSEC_ERRORS_R_XMLSEC_FAILED ,
-! XMLSEC_ERRORS_NO_MESSAGE ) ;
-!
-! xmlSecKeyDataDestroy( data ) ;
-! return NULL ;
-! }
-!
-! if( xmlSecKeySetValue( key , data ) < 0 ) {
-! xmlSecError( XMLSEC_ERRORS_HERE ,
-! NULL ,
-! "xmlSecKeySetValue" ,
-! XMLSEC_ERRORS_R_XMLSEC_FAILED ,
-! XMLSEC_ERRORS_NO_MESSAGE ) ;
-!
-! xmlSecKeyDestroy( key ) ;
-! xmlSecKeyDataDestroy( data ) ;
-! return NULL ;
-! }
-! }
-!
-! return(key);
-! }
-!
-! /**
-! * xmlSecKeyStoreFindKeyMethod:
-! * @store: the store.
-! * @name: the desired key name.
-! * @keyInfoCtx: the pointer to key info context.
- *
-! * Keys store specific find method. The caller is responsible for destroying
-! * the returned key using #xmlSecKeyDestroy method.
-! *
-! * Returns the pointer to a key or NULL if key is not found or an error occurs.
- */
-! static xmlSecKeyPtr
-! xmlSecNssKeysStoreFindKey(
-! xmlSecKeyStorePtr store ,
-! const xmlChar* name ,
-! xmlSecKeyInfoCtxPtr keyInfoCtx
-! ) {
-! xmlSecNssKeysStoreCtxPtr context = NULL ;
-! xmlSecKeyPtr key = NULL ;
-! xmlSecNssKeySlotPtr keySlot = NULL ;
-! xmlSecSize pos ;
-! xmlSecSize size ;
-!
-! xmlSecAssert2( xmlSecKeyStoreCheckId( store , xmlSecNssKeysStoreId ) , NULL ) ;
-! xmlSecAssert2( xmlSecKeyStoreCheckSize( store , xmlSecNssKeysStoreSize ) , NULL ) ;
-! xmlSecAssert2( keyInfoCtx != NULL , NULL ) ;
-!
-! context = xmlSecNssKeysStoreGetCtx( store ) ;
-! if( context == NULL ) {
-! xmlSecError( XMLSEC_ERRORS_HERE ,
-! xmlSecErrorsSafeString( xmlSecKeyStoreGetName( store ) ) ,
-! "xmlSecNssKeysStoreGetCtx" ,
-! XMLSEC_ERRORS_R_XMLSEC_FAILED ,
-! XMLSEC_ERRORS_NO_MESSAGE ) ;
-! return NULL ;
-! }
-!
-! /*-
-! * Look for key at keyList at first.
-! */
-! if( context->keyList != NULL ) {
-! size = xmlSecPtrListGetSize( context->keyList ) ;
-! for( pos = 0 ; pos < size ; pos ++ ) {
-! key = ( xmlSecKeyPtr )xmlSecPtrListGetItem( context->keyList , pos ) ;
-! if( key != NULL && xmlSecKeyMatch( key , name , &( keyInfoCtx->keyReq ) ) ) {
-! return xmlSecKeyDuplicate( key ) ;
-! }
-! }
-! }
-!
-! /*-
-! * Find the key from slotList
-! */
-! if( context->slotList != NULL ) {
-! PK11SlotInfo* slot = NULL ;
-!
-! size = xmlSecPtrListGetSize( context->slotList ) ;
-! for( pos = 0 ; pos < size ; pos ++ ) {
-! keySlot = ( xmlSecNssKeySlotPtr )xmlSecPtrListGetItem( context->slotList , pos ) ;
-! slot = xmlSecNssKeySlotGetSlot( keySlot ) ;
-! if( slot == NULL ) {
-! continue ;
-! } else {
-! key = xmlSecNssKeysStoreFindKeyFromSlot( slot, name, keyInfoCtx ) ;
-! if( key == NULL ) {
-! continue ;
-! } else {
-! return( key ) ;
-! }
-! }
-! }
-! }
-!
-! /*-
-! * Create a session key if we can not find the key from keyList and slotList
-! */
-! if( ( keyInfoCtx->keyReq.keyType & xmlSecKeyDataTypeSession ) == xmlSecKeyDataTypeSession ) {
-! key = xmlSecKeyGenerate( keyInfoCtx->keyReq.keyId , keyInfoCtx->keyReq.keyBitsSize , xmlSecKeyDataTypeSession ) ;
-! if( key == NULL ) {
-! xmlSecError( XMLSEC_ERRORS_HERE ,
-! xmlSecErrorsSafeString( xmlSecKeyStoreGetName( store ) ) ,
-! "xmlSecKeySetValue" ,
-! XMLSEC_ERRORS_R_XMLSEC_FAILED ,
-! XMLSEC_ERRORS_NO_MESSAGE ) ;
-! return NULL ;
-! }
-!
-! return key ;
-! }
-!
-! /**
-! * We have no way to find the key any more.
-! */
-! return NULL ;
-! }
-
-! #ifdef __MINGW32__ // for runtime-pseudo-reloc
-! static struct _xmlSecKeyStoreKlass xmlSecNssKeysStoreKlass = {
-! #else
-! static xmlSecKeyStoreKlass xmlSecNssKeysStoreKlass = {
-! #endif
-! sizeof( xmlSecKeyStoreKlass ) ,
-! xmlSecNssKeysStoreSize ,
-! BAD_CAST "implicit_nss_keys_store" ,
-! xmlSecNssKeysStoreInitialize ,
-! xmlSecNssKeysStoreFinalize ,
-! xmlSecNssKeysStoreFindKey ,
-! NULL ,
-! NULL
-! } ;
-
-! /**
-! * xmlSecNssKeysStoreGetKlass:
-! *
-! * The simple list based keys store klass.
-! *
-! * Returns simple list based keys store klass.
-! */
-! xmlSecKeyStoreId
-! xmlSecNssKeysStoreGetKlass( void ) {
-! return &xmlSecNssKeysStoreKlass ;
- }
-
-+
-+ /**************************
-+ * Application routines
-+ */
- /**
- * xmlSecNssKeysStoreLoad:
- * @store: the pointer to Nss keys store.
-***************
-*** 125,132 ****
- * Returns 0 on success or a negative value if an error occurs.
- */
- int
-! xmlSecNssKeysStoreLoad(xmlSecKeyStorePtr store, const char *uri,
-! xmlSecKeysMngrPtr keysMngr) {
- xmlDocPtr doc;
- xmlNodePtr root;
- xmlNodePtr cur;
---- 528,538 ----
- * Returns 0 on success or a negative value if an error occurs.
- */
- int
-! xmlSecNssKeysStoreLoad(
-! xmlSecKeyStorePtr store,
-! const char *uri,
-! xmlSecKeysMngrPtr keysMngr
-! ) {
- xmlDocPtr doc;
- xmlNodePtr root;
- xmlNodePtr cur;
-***************
-*** 252,505 ****
- */
- int
- xmlSecNssKeysStoreSave(xmlSecKeyStorePtr store, const char *filename, xmlSecKeyDataType type) {
-! xmlSecKeyStorePtr *ss;
-!
-! xmlSecAssert2(xmlSecKeyStoreCheckId(store, xmlSecNssKeysStoreId), -1);
-! xmlSecAssert2((filename != NULL), -1);
-!
-! ss = xmlSecNssKeysStoreGetSS(store);
-! xmlSecAssert2(((ss != NULL) && (*ss != NULL) &&
-! (xmlSecKeyStoreCheckId(*ss, xmlSecSimpleKeysStoreId))), -1);
-!
-! return (xmlSecSimpleKeysStoreSave(*ss, filename, type));
-! }
-!
-! static int
-! xmlSecNssKeysStoreInitialize(xmlSecKeyStorePtr store) {
-! xmlSecKeyStorePtr *ss;
-!
-! xmlSecAssert2(xmlSecKeyStoreCheckId(store, xmlSecNssKeysStoreId), -1);
-
-! ss = xmlSecNssKeysStoreGetSS(store);
-! xmlSecAssert2((*ss == NULL), -1);
-
-! *ss = xmlSecKeyStoreCreate(xmlSecSimpleKeysStoreId);
-! if(*ss == NULL) {
-! xmlSecError(XMLSEC_ERRORS_HERE,
- xmlSecErrorsSafeString(xmlSecKeyStoreGetName(store)),
-! "xmlSecKeyStoreCreate",
- XMLSEC_ERRORS_R_XMLSEC_FAILED,
-! "xmlSecSimpleKeysStoreId");
-! return(-1);
- }
--
-- return(0);
-- }
--
-- static void
-- xmlSecNssKeysStoreFinalize(xmlSecKeyStorePtr store) {
-- xmlSecKeyStorePtr *ss;
--
-- xmlSecAssert(xmlSecKeyStoreCheckId(store, xmlSecNssKeysStoreId));
--
-- ss = xmlSecNssKeysStoreGetSS(store);
-- xmlSecAssert((ss != NULL) && (*ss != NULL));
-
-! xmlSecKeyStoreDestroy(*ss);
-! }
-!
-! static xmlSecKeyPtr
-! xmlSecNssKeysStoreFindKey(xmlSecKeyStorePtr store, const xmlChar* name,
-! xmlSecKeyInfoCtxPtr keyInfoCtx) {
-! xmlSecKeyStorePtr* ss;
-! xmlSecKeyPtr key = NULL;
-! xmlSecKeyPtr retval = NULL;
-! xmlSecKeyReqPtr keyReq = NULL;
-! CERTCertificate *cert = NULL;
-! SECKEYPublicKey *pubkey = NULL;
-! SECKEYPrivateKey *privkey = NULL;
-! xmlSecKeyDataPtr data = NULL;
-! xmlSecKeyDataPtr x509Data = NULL;
-! int ret;
-!
-! xmlSecAssert2(xmlSecKeyStoreCheckId(store, xmlSecNssKeysStoreId), NULL);
-! xmlSecAssert2(keyInfoCtx != NULL, NULL);
-!
-! ss = xmlSecNssKeysStoreGetSS(store);
-! xmlSecAssert2(((ss != NULL) && (*ss != NULL)), NULL);
-!
-! key = xmlSecKeyStoreFindKey(*ss, name, keyInfoCtx);
-! if (key != NULL) {
-! return (key);
-! }
-
-! /* Try to find the key in the NSS DB, and construct an xmlSecKey.
-! * we must have a name to lookup keys in NSS DB.
-! */
-! if (name == NULL) {
-! goto done;
-! }
-
-! /* what type of key are we looking for?
-! * TBD: For now, we'll look only for public/private keys using the
-! * name as a cert nickname. Later on, we can attempt to find
-! * symmetric keys using PK11_FindFixedKey
-! */
-! keyReq = &(keyInfoCtx->keyReq);
-! if (keyReq->keyType &
-! (xmlSecKeyDataTypePublic | xmlSecKeyDataTypePrivate)) {
-! cert = CERT_FindCertByNickname (CERT_GetDefaultCertDB(), (char *)name);
-! if (cert == NULL) {
-! goto done;
-! }
-!
-! if (keyReq->keyType & xmlSecKeyDataTypePublic) {
-! pubkey = CERT_ExtractPublicKey(cert);
-! if (pubkey == NULL) {
-! xmlSecError(XMLSEC_ERRORS_HERE,
-! NULL,
-! "CERT_ExtractPublicKey",
-! XMLSEC_ERRORS_R_CRYPTO_FAILED,
-! XMLSEC_ERRORS_NO_MESSAGE);
-! goto done;
- }
-- }
-
-! if (keyReq->keyType & xmlSecKeyDataTypePrivate) {
-! privkey = PK11_FindKeyByAnyCert(cert, NULL);
-! if (privkey == NULL) {
-! xmlSecError(XMLSEC_ERRORS_HERE,
-! NULL,
-! "PK11_FindKeyByAnyCert",
-! XMLSEC_ERRORS_R_CRYPTO_FAILED,
-! XMLSEC_ERRORS_NO_MESSAGE);
-! goto done;
- }
- }
-
-! data = xmlSecNssPKIAdoptKey(privkey, pubkey);
-! if(data == NULL) {
-! xmlSecError(XMLSEC_ERRORS_HERE,
-! NULL,
-! "xmlSecNssPKIAdoptKey",
-! XMLSEC_ERRORS_R_XMLSEC_FAILED,
-! XMLSEC_ERRORS_NO_MESSAGE);
-! goto done;
-! }
-! privkey = NULL;
-! pubkey = NULL;
-!
-! key = xmlSecKeyCreate();
-! if (key == NULL) {
- xmlSecError(XMLSEC_ERRORS_HERE,
-! NULL,
-! "xmlSecKeyCreate",
- XMLSEC_ERRORS_R_XMLSEC_FAILED,
- XMLSEC_ERRORS_NO_MESSAGE);
-! return (NULL);
-! }
-!
-! x509Data = xmlSecKeyDataCreate(xmlSecNssKeyDataX509Id);
-! if(x509Data == NULL) {
-! xmlSecError(XMLSEC_ERRORS_HERE,
-! NULL,
-! "xmlSecKeyDataCreate",
-! XMLSEC_ERRORS_R_XMLSEC_FAILED,
-! "transform=%s",
-! xmlSecErrorsSafeString(xmlSecTransformKlassGetName(xmlSecNssKeyDataX509Id)));
-! goto done;
-! }
-!
-! ret = xmlSecNssKeyDataX509AdoptKeyCert(x509Data, cert);
-! if (ret < 0) {
-! xmlSecError(XMLSEC_ERRORS_HERE,
-! NULL,
-! "xmlSecNssKeyDataX509AdoptKeyCert",
-! XMLSEC_ERRORS_R_XMLSEC_FAILED,
-! "data=%s",
-! xmlSecErrorsSafeString(xmlSecKeyDataGetName(x509Data)));
-! goto done;
-! }
-! cert = CERT_DupCertificate(cert);
-! if (cert == NULL) {
-! xmlSecError(XMLSEC_ERRORS_HERE,
-! NULL,
-! "CERT_DupCertificate",
-! XMLSEC_ERRORS_R_CRYPTO_FAILED,
-! "data=%s",
-! xmlSecErrorsSafeString(xmlSecKeyDataGetName(x509Data)));
-! goto done;
-! }
-!
-! ret = xmlSecNssKeyDataX509AdoptCert(x509Data, cert);
-! if (ret < 0) {
-! xmlSecError(XMLSEC_ERRORS_HERE,
-! NULL,
-! "xmlSecNssKeyDataX509AdoptCert",
-! XMLSEC_ERRORS_R_XMLSEC_FAILED,
-! "data=%s",
-! xmlSecErrorsSafeString(xmlSecKeyDataGetName(x509Data)));
-! goto done;
- }
-- cert = NULL;
-
-! ret = xmlSecKeySetValue(key, data);
-! if (ret < 0) {
-! xmlSecError(XMLSEC_ERRORS_HERE,
-! NULL,
-! "xmlSecKeySetValue",
-! XMLSEC_ERRORS_R_XMLSEC_FAILED,
-! "data=%s",
-! xmlSecErrorsSafeString(xmlSecKeyDataGetName(data)));
-! goto done;
-! }
-! data = NULL;
-
-! ret = xmlSecKeyAdoptData(key, x509Data);
-! if (ret < 0) {
- xmlSecError(XMLSEC_ERRORS_HERE,
-! NULL,
-! "xmlSecKeyAdoptData",
- XMLSEC_ERRORS_R_XMLSEC_FAILED,
-! "data=%s",
-! xmlSecErrorsSafeString(xmlSecKeyDataGetName(x509Data)));
-! goto done;
-! }
-! x509Data = NULL;
-!
-! retval = key;
-! key = NULL;
-! }
-!
-! done:
-! if (cert != NULL) {
-! CERT_DestroyCertificate(cert);
-! }
-! if (pubkey != NULL) {
-! SECKEY_DestroyPublicKey(pubkey);
-! }
-! if (privkey != NULL) {
-! SECKEY_DestroyPrivateKey(privkey);
-! }
-! if (data != NULL) {
-! xmlSecKeyDataDestroy(data);
-! }
-! if (x509Data != NULL) {
-! xmlSecKeyDataDestroy(x509Data);
-! }
-! if (key != NULL) {
-! xmlSecKeyDestroy(key);
- }
-!
-! /* now that we have a key, make sure it is valid and let the simple
-! * store adopt it */
-! if (retval) {
-! if (xmlSecKeyIsValid(retval)) {
-! ret = xmlSecSimpleKeysStoreAdoptKey(*ss, retval);
-! if (ret < 0) {
- xmlSecError(XMLSEC_ERRORS_HERE,
-! xmlSecErrorsSafeString(xmlSecKeyStoreGetName(store)),
-! "xmlSecSimpleKeysStoreAdoptKey",
-! XMLSEC_ERRORS_R_XMLSEC_FAILED,
-! XMLSEC_ERRORS_NO_MESSAGE);
-! xmlSecKeyDestroy(retval);
-! retval = NULL;
-! }
-! } else {
-! xmlSecKeyDestroy(retval);
-! retval = NULL;
-! }
-! }
-!
-! return (retval);
- }
---- 658,804 ----
- */
- int
- xmlSecNssKeysStoreSave(xmlSecKeyStorePtr store, const char *filename, xmlSecKeyDataType type) {
-! xmlSecKeyInfoCtx keyInfoCtx;
-! xmlSecNssKeysStoreCtxPtr context ;
-! xmlSecPtrListPtr list;
-! xmlSecKeyPtr key;
-! xmlSecSize i, keysSize;
-! xmlDocPtr doc;
-! xmlNodePtr cur;
-! xmlSecKeyDataPtr data;
-! xmlSecPtrListPtr idsList;
-! xmlSecKeyDataId dataId;
-! xmlSecSize idsSize, j;
-! int ret;
-
-! xmlSecAssert2( xmlSecKeyStoreCheckId( store , xmlSecNssKeysStoreId ), -1 ) ;
-! xmlSecAssert2( xmlSecKeyStoreCheckSize( store , xmlSecNssKeysStoreSize ), -1 ) ;
-! xmlSecAssert2(filename != NULL, -1);
-!
-! context = xmlSecNssKeysStoreGetCtx( store ) ;
-! xmlSecAssert2( context != NULL, -1 );
-!
-! list = context->keyList ;
-! xmlSecAssert2( list != NULL, -1 );
-! xmlSecAssert2(xmlSecPtrListCheckId(list, xmlSecKeyPtrListId), -1);
-
-! /* create doc */
-! doc = xmlSecCreateTree(BAD_CAST "Keys", xmlSecNs);
-! if(doc == NULL) {
-! xmlSecError(XMLSEC_ERRORS_HERE,
- xmlSecErrorsSafeString(xmlSecKeyStoreGetName(store)),
-! "xmlSecCreateTree",
- XMLSEC_ERRORS_R_XMLSEC_FAILED,
-! XMLSEC_ERRORS_NO_MESSAGE);
-! return(-1);
- }
-
-! idsList = xmlSecKeyDataIdsGet();
-! xmlSecAssert2(idsList != NULL, -1);
-!
-! keysSize = xmlSecPtrListGetSize(list);
-! idsSize = xmlSecPtrListGetSize(idsList);
-! for(i = 0; i < keysSize; ++i) {
-! key = (xmlSecKeyPtr)xmlSecPtrListGetItem(list, i);
-! xmlSecAssert2(key != NULL, -1);
-!
-! cur = xmlSecAddChild(xmlDocGetRootElement(doc), xmlSecNodeKeyInfo, xmlSecDSigNs);
-! if(cur == NULL) {
-! xmlSecError(XMLSEC_ERRORS_HERE,
-! xmlSecErrorsSafeString(xmlSecKeyStoreGetName(store)),
-! "xmlSecAddChild",
-! XMLSEC_ERRORS_R_XMLSEC_FAILED,
-! "node=%s",
-! xmlSecErrorsSafeString(xmlSecNodeKeyInfo));
-! xmlFreeDoc(doc);
-! return(-1);
-! }
-
-! /* special data key name */
-! if(xmlSecKeyGetName(key) != NULL) {
-! if(xmlSecAddChild(cur, xmlSecNodeKeyName, xmlSecDSigNs) == NULL) {
-! xmlSecError(XMLSEC_ERRORS_HERE,
-! xmlSecErrorsSafeString(xmlSecKeyStoreGetName(store)),
-! "xmlSecAddChild",
-! XMLSEC_ERRORS_R_XMLSEC_FAILED,
-! "node=%s",
-! xmlSecErrorsSafeString(xmlSecNodeKeyName));
-! xmlFreeDoc(doc);
-! return(-1);
-! }
-! }
-!
-! /* create nodes for other keys data */
-! for(j = 0; j < idsSize; ++j) {
-! dataId = (xmlSecKeyDataId)xmlSecPtrListGetItem(idsList, j);
-! xmlSecAssert2(dataId != xmlSecKeyDataIdUnknown, -1);
-
-! if(dataId->dataNodeName == NULL) {
-! continue;
-! }
-!
-! data = xmlSecKeyGetData(key, dataId);
-! if(data == NULL) {
-! continue;
- }
-
-! if(xmlSecAddChild(cur, dataId->dataNodeName, dataId->dataNodeNs) == NULL) {
-! xmlSecError(XMLSEC_ERRORS_HERE,
-! xmlSecErrorsSafeString(xmlSecKeyStoreGetName(store)),
-! "xmlSecAddChild",
-! XMLSEC_ERRORS_R_XMLSEC_FAILED,
-! "node=%s",
-! xmlSecErrorsSafeString(dataId->dataNodeName));
-! xmlFreeDoc(doc);
-! return(-1);
- }
- }
-
-! ret = xmlSecKeyInfoCtxInitialize(&keyInfoCtx, NULL);
-! if(ret < 0) {
- xmlSecError(XMLSEC_ERRORS_HERE,
-! xmlSecErrorsSafeString(xmlSecKeyStoreGetName(store)),
-! "xmlSecKeyInfoCtxInitialize",
- XMLSEC_ERRORS_R_XMLSEC_FAILED,
- XMLSEC_ERRORS_NO_MESSAGE);
-! xmlFreeDoc(doc);
-! return(-1);
- }
-
-! keyInfoCtx.mode = xmlSecKeyInfoModeWrite;
-! keyInfoCtx.keyReq.keyId = xmlSecKeyDataIdUnknown;
-! keyInfoCtx.keyReq.keyType = type;
-! keyInfoCtx.keyReq.keyUsage = xmlSecKeyDataUsageAny;
-
-! /* finally write key in the node */
-! ret = xmlSecKeyInfoNodeWrite(cur, key, &keyInfoCtx);
-! if(ret < 0) {
- xmlSecError(XMLSEC_ERRORS_HERE,
-! xmlSecErrorsSafeString(xmlSecKeyStoreGetName(store)),
-! "xmlSecKeyInfoNodeWrite",
- XMLSEC_ERRORS_R_XMLSEC_FAILED,
-! XMLSEC_ERRORS_NO_MESSAGE);
-! xmlSecKeyInfoCtxFinalize(&keyInfoCtx);
-! xmlFreeDoc(doc);
-! return(-1);
-! }
-! xmlSecKeyInfoCtxFinalize(&keyInfoCtx);
- }
-!
-! /* now write result */
-! ret = xmlSaveFormatFile(filename, doc, 1);
-! if(ret < 0) {
- xmlSecError(XMLSEC_ERRORS_HERE,
-! xmlSecErrorsSafeString(xmlSecKeyStoreGetName(store)),
-! "xmlSaveFormatFile",
-! XMLSEC_ERRORS_R_XML_FAILED,
-! "filename=%s",
-! xmlSecErrorsSafeString(filename));
-! xmlFreeDoc(doc);
-! return(-1);
-! }
-!
-! xmlFreeDoc(doc);
-! return(0);
- }
-+
-*** misc/xmlsec1-1.2.6/src/nss/keytrans.c Fri May 11 14:47:46 2007
---- misc/build/xmlsec1-1.2.6/src/nss/keytrans.c Fri May 11 14:47:20 2007
-***************
-*** 1 ****
-! dummy
---- 1,752 ----
-! /**
-! *
-! * XMLSec library
-! *
-! * AES Algorithm support
-! *
-! * This is free software; see Copyright file in the source
-! * distribution for preciese wording.
-! *
-! * Copyright .................................
-! */
-! #include "globals.h"
-!
-! #include <stdlib.h>
-! #include <stdio.h>
-! #include <string.h>
-!
-! #include <nss.h>
-! #include <pk11func.h>
-! #include <keyhi.h>
-! #include <key.h>
-! #include <hasht.h>
-!
-! #include <xmlsec/xmlsec.h>
-! #include <xmlsec/xmltree.h>
-! #include <xmlsec/keys.h>
-! #include <xmlsec/transforms.h>
-! #include <xmlsec/errors.h>
-!
-! #include <xmlsec/nss/crypto.h>
-! #include <xmlsec/nss/pkikeys.h>
-! #include <xmlsec/nss/tokens.h>
-!
-! /*********************************************************************
-! *
-! * key transform transforms
-! *
-! ********************************************************************/
-! typedef struct _xmlSecNssKeyTransportCtx xmlSecNssKeyTransportCtx ;
-! typedef struct _xmlSecNssKeyTransportCtx* xmlSecNssKeyTransportCtxPtr ;
-!
-! #define xmlSecNssKeyTransportSize \
-! ( sizeof( xmlSecTransform ) + sizeof( xmlSecNssKeyTransportCtx ) )
-!
-! #define xmlSecNssKeyTransportGetCtx( transform ) \
-! ( ( xmlSecNssKeyTransportCtxPtr )( ( ( xmlSecByte* )( transform ) ) + sizeof( xmlSecTransform ) ) )
-!
-! struct _xmlSecNssKeyTransportCtx {
-! CK_MECHANISM_TYPE cipher ;
-! SECKEYPublicKey* pubkey ;
-! SECKEYPrivateKey* prikey ;
-! xmlSecKeyDataId keyId ;
-! xmlSecBufferPtr material ; /* to be encrypted/decrypted material */
-! } ;
-!
-! static int xmlSecNssKeyTransportInitialize(xmlSecTransformPtr transform);
-! static void xmlSecNssKeyTransportFinalize(xmlSecTransformPtr transform);
-! static int xmlSecNssKeyTransportSetKeyReq(xmlSecTransformPtr transform,
-! xmlSecKeyReqPtr keyReq);
-! static int xmlSecNssKeyTransportSetKey(xmlSecTransformPtr transform,
-! xmlSecKeyPtr key);
-! static int xmlSecNssKeyTransportExecute(xmlSecTransformPtr transform,
-! int last,
-! xmlSecTransformCtxPtr transformCtx);
-! static xmlSecSize xmlSecNssKeyTransportGetKeySize(xmlSecTransformPtr transform);
-!
-! static int
-! xmlSecNssKeyTransportCheckId(
-! xmlSecTransformPtr transform
-! ) {
-! #ifndef XMLSEC_NO_RSA
-! if( xmlSecTransformCheckId( transform, xmlSecNssTransformRsaPkcs1Id ) ||
-! xmlSecTransformCheckId( transform, xmlSecNssTransformRsaOaepId ) ) {
-!
-! return(1);
-! }
-! #endif /* XMLSEC_NO_RSA */
-!
-! return(0);
-! }
-!
-! static int
-! xmlSecNssKeyTransportInitialize(xmlSecTransformPtr transform) {
-! xmlSecNssKeyTransportCtxPtr context ;
-! int ret;
-!
-! xmlSecAssert2(xmlSecNssKeyTransportCheckId(transform), -1);
-! xmlSecAssert2(xmlSecTransformCheckSize(transform, xmlSecNssKeyTransportSize), -1);
-!
-! context = xmlSecNssKeyTransportGetCtx( transform ) ;
-! xmlSecAssert2( context != NULL , -1 ) ;
-!
-! #ifndef XMLSEC_NO_RSA
-! if( transform->id == xmlSecNssTransformRsaPkcs1Id ) {
-! context->cipher = CKM_RSA_PKCS ;
-! context->keyId = xmlSecNssKeyDataRsaId ;
-! } else if( transform->id == xmlSecNssTransformRsaOaepId ) {
-! context->cipher = CKM_RSA_PKCS_OAEP ;
-! context->keyId = xmlSecNssKeyDataRsaId ;
-! } else
-! #endif /* XMLSEC_NO_RSA */
-!
-! if( 1 ) {
-! xmlSecError( XMLSEC_ERRORS_HERE ,
-! xmlSecErrorsSafeString(xmlSecTransformGetName(transform)),
-! NULL ,
-! XMLSEC_ERRORS_R_CRYPTO_FAILED ,
-! XMLSEC_ERRORS_NO_MESSAGE ) ;
-! return(-1);
-! }
-!
-! context->pubkey = NULL ;
-! context->prikey = NULL ;
-! context->material = NULL ;
-!
-! return(0);
-! }
-!
-! static void
-! xmlSecNssKeyTransportFinalize(xmlSecTransformPtr transform) {
-! xmlSecNssKeyTransportCtxPtr context ;
-!
-! xmlSecAssert(xmlSecNssKeyTransportCheckId(transform));
-! xmlSecAssert(xmlSecTransformCheckSize(transform, xmlSecNssKeyTransportSize));
-!
-! context = xmlSecNssKeyTransportGetCtx( transform ) ;
-! xmlSecAssert( context != NULL ) ;
-!
-! if( context->pubkey != NULL ) {
-! SECKEY_DestroyPublicKey( context->pubkey ) ;
-! context->pubkey = NULL ;
-! }
-!
-! if( context->prikey != NULL ) {
-! SECKEY_DestroyPrivateKey( context->prikey ) ;
-! context->prikey = NULL ;
-! }
-!
-! if( context->material != NULL ) {
-! xmlSecBufferDestroy(context->material);
-! context->material = NULL ;
-! }
-! }
-!
-! static int
-! xmlSecNssKeyTransportSetKeyReq(xmlSecTransformPtr transform, xmlSecKeyReqPtr keyReq) {
-! xmlSecNssKeyTransportCtxPtr context ;
-! xmlSecSize cipherSize = 0 ;
-!
-!
-! xmlSecAssert2(xmlSecNssKeyTransportCheckId(transform), -1);
-! xmlSecAssert2(xmlSecTransformCheckSize(transform, xmlSecNssKeyTransportSize), -1);
-! xmlSecAssert2((transform->operation == xmlSecTransformOperationEncrypt) || (transform->operation == xmlSecTransformOperationDecrypt), -1);
-! xmlSecAssert2(keyReq != NULL, -1);
-!
-! context = xmlSecNssKeyTransportGetCtx( transform ) ;
-! xmlSecAssert2( context != NULL , -1 ) ;
-!
-! keyReq->keyId = context->keyId;
-! if(transform->operation == xmlSecTransformOperationEncrypt) {
-! keyReq->keyUsage = xmlSecKeyUsageEncrypt;
-! keyReq->keyType = xmlSecKeyDataTypePublic;
-! } else {
-! keyReq->keyUsage = xmlSecKeyUsageDecrypt;
-! keyReq->keyType = xmlSecKeyDataTypePrivate;
-! }
-!
-! return(0);
-! }
-!
-! static int
-! xmlSecNssKeyTransportSetKey(xmlSecTransformPtr transform, xmlSecKeyPtr key) {
-! xmlSecNssKeyTransportCtxPtr context = NULL ;
-! xmlSecKeyDataPtr keyData = NULL ;
-! SECKEYPublicKey* pubkey = NULL ;
-! SECKEYPrivateKey* prikey = NULL ;
-!
-! xmlSecAssert2(xmlSecNssKeyTransportCheckId(transform), -1);
-! xmlSecAssert2(xmlSecTransformCheckSize(transform, xmlSecNssKeyTransportSize), -1);
-! xmlSecAssert2((transform->operation == xmlSecTransformOperationEncrypt) || (transform->operation == xmlSecTransformOperationDecrypt), -1);
-! xmlSecAssert2(key != NULL, -1);
-!
-! context = xmlSecNssKeyTransportGetCtx( transform ) ;
-! if( context == NULL || context->keyId == NULL || context->pubkey != NULL ) {
-! xmlSecError( XMLSEC_ERRORS_HERE ,
-! xmlSecErrorsSafeString( xmlSecTransformGetName( transform ) ) ,
-! "xmlSecNssKeyTransportGetCtx" ,
-! XMLSEC_ERRORS_R_CRYPTO_FAILED ,
-! XMLSEC_ERRORS_NO_MESSAGE ) ;
-! return(-1);
-! }
-! xmlSecAssert2( xmlSecKeyCheckId( key, context->keyId ), -1 ) ;
-!
-! keyData = xmlSecKeyGetValue( key ) ;
-! if( keyData == NULL ) {
-! xmlSecError( XMLSEC_ERRORS_HERE ,
-! xmlSecErrorsSafeString( xmlSecKeyGetName( key ) ) ,
-! "xmlSecKeyGetValue" ,
-! XMLSEC_ERRORS_R_CRYPTO_FAILED ,
-! XMLSEC_ERRORS_NO_MESSAGE ) ;
-! return(-1);
-! }
-!
-! if(transform->operation == xmlSecTransformOperationEncrypt) {
-! if( ( pubkey = xmlSecNssPKIKeyDataGetPubKey( keyData ) ) == NULL ) {
-! xmlSecError( XMLSEC_ERRORS_HERE ,
-! xmlSecErrorsSafeString( xmlSecKeyDataGetName( keyData ) ) ,
-! "xmlSecNssPKIKeyDataGetPubKey" ,
-! XMLSEC_ERRORS_R_CRYPTO_FAILED ,
-! XMLSEC_ERRORS_NO_MESSAGE ) ;
-! return(-1);
-! }
-!
-! context->pubkey = pubkey ;
-! } else {
-! if( ( prikey = xmlSecNssPKIKeyDataGetPrivKey( keyData ) ) == NULL ) {
-! xmlSecError( XMLSEC_ERRORS_HERE ,
-! xmlSecErrorsSafeString( xmlSecKeyDataGetName( keyData ) ) ,
-! "xmlSecNssPKIKeyDataGetPrivKey" ,
-! XMLSEC_ERRORS_R_CRYPTO_FAILED ,
-! XMLSEC_ERRORS_NO_MESSAGE ) ;
-! return(-1);
-! }
-!
-! context->prikey = prikey ;
-! }
-!
-! return(0) ;
-! }
-!
-! /**
-! * key wrap transform
-! */
-! static int
-! xmlSecNssKeyTransportCtxInit(
-! xmlSecNssKeyTransportCtxPtr ctx ,
-! xmlSecBufferPtr in ,
-! xmlSecBufferPtr out ,
-! int encrypt ,
-! xmlSecTransformCtxPtr transformCtx
-! ) {
-! xmlSecSize blockSize ;
-!
-! xmlSecAssert2( ctx != NULL , -1 ) ;
-! xmlSecAssert2( ctx->cipher != CKM_INVALID_MECHANISM , -1 ) ;
-! xmlSecAssert2( ( ctx->pubkey != NULL && encrypt ) || ( ctx->prikey != NULL && !encrypt ), -1 ) ;
-! xmlSecAssert2( ctx->keyId != NULL , -1 ) ;
-! xmlSecAssert2( in != NULL , -1 ) ;
-! xmlSecAssert2( out != NULL , -1 ) ;
-! xmlSecAssert2( transformCtx != NULL , -1 ) ;
-!
-! if( ctx->material != NULL ) {
-! xmlSecBufferDestroy( ctx->material ) ;
-! ctx->material = NULL ;
-! }
-!
-! if( ctx->pubkey != NULL ) {
-! blockSize = SECKEY_PublicKeyStrength( ctx->pubkey ) ;
-! } else if( ctx->prikey != NULL ) {
-! blockSize = PK11_SignatureLen( ctx->prikey ) ;
-! } else {
-! blockSize = -1 ;
-! }
-!
-! if( blockSize < 0 ) {
-! xmlSecError( XMLSEC_ERRORS_HERE ,
-! NULL ,
-! NULL ,
-! XMLSEC_ERRORS_R_CRYPTO_FAILED ,
-! XMLSEC_ERRORS_NO_MESSAGE ) ;
-! return(-1);
-! }
-!
-! ctx->material = xmlSecBufferCreate( blockSize ) ;
-! if( ctx->material == NULL ) {
-! xmlSecError( XMLSEC_ERRORS_HERE ,
-! NULL ,
-! "xmlSecBufferCreate" ,
-! XMLSEC_ERRORS_R_CRYPTO_FAILED ,
-! XMLSEC_ERRORS_NO_MESSAGE ) ;
-! return(-1);
-! }
-!
-! /* read raw key material into context */
-! if( xmlSecBufferSetData( ctx->material, xmlSecBufferGetData(in), xmlSecBufferGetSize(in) ) < 0 ) {
-! xmlSecError( XMLSEC_ERRORS_HERE ,
-! NULL ,
-! "xmlSecBufferSetData" ,
-! XMLSEC_ERRORS_R_CRYPTO_FAILED ,
-! XMLSEC_ERRORS_NO_MESSAGE ) ;
-! return(-1);
-! }
-!
-! if( xmlSecBufferRemoveHead( in , xmlSecBufferGetSize(in) ) < 0 ) {
-! xmlSecError( XMLSEC_ERRORS_HERE ,
-! NULL ,
-! "xmlSecBufferRemoveHead" ,
-! XMLSEC_ERRORS_R_CRYPTO_FAILED ,
-! XMLSEC_ERRORS_NO_MESSAGE ) ;
-! return(-1);
-! }
-!
-! return(0);
-! }
-!
-! /**
-! * key wrap transform update
-! */
-! static int
-! xmlSecNssKeyTransportCtxUpdate(
-! xmlSecNssKeyTransportCtxPtr ctx ,
-! xmlSecBufferPtr in ,
-! xmlSecBufferPtr out ,
-! int encrypt ,
-! xmlSecTransformCtxPtr transformCtx
-! ) {
-! xmlSecAssert2( ctx != NULL , -1 ) ;
-! xmlSecAssert2( ctx->cipher != CKM_INVALID_MECHANISM , -1 ) ;
-! xmlSecAssert2( ( ctx->pubkey != NULL && encrypt ) || ( ctx->prikey != NULL && !encrypt ), -1 ) ;
-! xmlSecAssert2( ctx->keyId != NULL , -1 ) ;
-! xmlSecAssert2( ctx->material != NULL , -1 ) ;
-! xmlSecAssert2( in != NULL , -1 ) ;
-! xmlSecAssert2( out != NULL , -1 ) ;
-! xmlSecAssert2( transformCtx != NULL , -1 ) ;
-!
-! /* read raw key material and append into context */
-! if( xmlSecBufferAppend( ctx->material, xmlSecBufferGetData(in), xmlSecBufferGetSize(in) ) < 0 ) {
-! xmlSecError( XMLSEC_ERRORS_HERE ,
-! NULL ,
-! "xmlSecBufferAppend" ,
-! XMLSEC_ERRORS_R_CRYPTO_FAILED ,
-! XMLSEC_ERRORS_NO_MESSAGE ) ;
-! return(-1);
-! }
-!
-! if( xmlSecBufferRemoveHead( in , xmlSecBufferGetSize(in) ) < 0 ) {
-! xmlSecError( XMLSEC_ERRORS_HERE ,
-! NULL ,
-! "xmlSecBufferRemoveHead" ,
-! XMLSEC_ERRORS_R_CRYPTO_FAILED ,
-! XMLSEC_ERRORS_NO_MESSAGE ) ;
-! return(-1);
-! }
-!
-! return(0);
-! }
-!
-! /**
-! * Block cipher transform final
-! */
-! static int
-! xmlSecNssKeyTransportCtxFinal(
-! xmlSecNssKeyTransportCtxPtr ctx ,
-! xmlSecBufferPtr in ,
-! xmlSecBufferPtr out ,
-! int encrypt ,
-! xmlSecTransformCtxPtr transformCtx
-! ) {
-! SECKEYPublicKey* targetKey ;
-! PK11SymKey* symKey ;
-! PK11SlotInfo* slot ;
-! SECItem oriskv ;
-! xmlSecSize blockSize ;
-! xmlSecBufferPtr result ;
-!
-! xmlSecAssert2( ctx != NULL , -1 ) ;
-! xmlSecAssert2( ctx->cipher != CKM_INVALID_MECHANISM , -1 ) ;
-! xmlSecAssert2( ( ctx->pubkey != NULL && encrypt ) || ( ctx->prikey != NULL && !encrypt ), -1 ) ;
-! xmlSecAssert2( ctx->keyId != NULL , -1 ) ;
-! xmlSecAssert2( ctx->material != NULL , -1 ) ;
-! xmlSecAssert2( in != NULL , -1 ) ;
-! xmlSecAssert2( out != NULL , -1 ) ;
-! xmlSecAssert2( transformCtx != NULL , -1 ) ;
-!
-! /* read raw key material and append into context */
-! if( xmlSecBufferAppend( ctx->material, xmlSecBufferGetData(in), xmlSecBufferGetSize(in) ) < 0 ) {
-! xmlSecError( XMLSEC_ERRORS_HERE ,
-! NULL ,
-! "xmlSecBufferAppend" ,
-! XMLSEC_ERRORS_R_CRYPTO_FAILED ,
-! XMLSEC_ERRORS_NO_MESSAGE ) ;
-! return(-1);
-! }
-!
-! if( xmlSecBufferRemoveHead( in , xmlSecBufferGetSize(in) ) < 0 ) {
-! xmlSecError( XMLSEC_ERRORS_HERE ,
-! NULL ,
-! "xmlSecBufferRemoveHead" ,
-! XMLSEC_ERRORS_R_CRYPTO_FAILED ,
-! XMLSEC_ERRORS_NO_MESSAGE ) ;
-! return(-1);
-! }
-!
-! /* Now we get all of the key materail */
-! /* from now on we will wrap or unwrap the key */
-! if( ctx->pubkey != NULL ) {
-! blockSize = SECKEY_PublicKeyStrength( ctx->pubkey ) ;
-! } else if( ctx->prikey != NULL ) {
-! blockSize = PK11_SignatureLen( ctx->prikey ) ;
-! } else {
-! blockSize = -1 ;
-! }
-!
-! if( blockSize < 0 ) {
-! xmlSecError( XMLSEC_ERRORS_HERE ,
-! NULL ,
-! "PK11_GetBlockSize" ,
-! XMLSEC_ERRORS_R_CRYPTO_FAILED ,
-! XMLSEC_ERRORS_NO_MESSAGE ) ;
-! return(-1);
-! }
-!
-! result = xmlSecBufferCreate( blockSize * 2 ) ;
-! if( result == NULL ) {
-! xmlSecError( XMLSEC_ERRORS_HERE ,
-! NULL ,
-! "xmlSecBufferCreate" ,
-! XMLSEC_ERRORS_R_CRYPTO_FAILED ,
-! XMLSEC_ERRORS_NO_MESSAGE ) ;
-! return(-1);
-! }
-!
-! oriskv.type = siBuffer ;
-! oriskv.data = xmlSecBufferGetData( ctx->material ) ;
-! oriskv.len = xmlSecBufferGetSize( ctx->material ) ;
-!
-! if( encrypt != 0 ) {
-! CK_OBJECT_HANDLE id ;
-! SECItem wrpskv ;
-!
-! /* Create template symmetric key from material */
-! if( ( slot = ctx->pubkey->pkcs11Slot ) == NULL ) {
-! slot = xmlSecNssSlotGet( ctx->cipher ) ;
-! if( slot == NULL ) {
-! xmlSecError( XMLSEC_ERRORS_HERE ,
-! NULL ,
-! "xmlSecNssSlotGet" ,
-! XMLSEC_ERRORS_R_CRYPTO_FAILED ,
-! XMLSEC_ERRORS_NO_MESSAGE ) ;
-! xmlSecBufferDestroy(result);
-! return(-1);
-! }
-!
-! id = PK11_ImportPublicKey( slot, ctx->pubkey, PR_FALSE ) ;
-! if( id == CK_INVALID_HANDLE ) {
-! xmlSecError( XMLSEC_ERRORS_HERE ,
-! NULL ,
-! "PK11_ImportPublicKey" ,
-! XMLSEC_ERRORS_R_CRYPTO_FAILED ,
-! XMLSEC_ERRORS_NO_MESSAGE ) ;
-! xmlSecBufferDestroy(result);
-! PK11_FreeSlot( slot ) ;
-! return(-1);
-! }
-! }
-!
-! /* pay attention to mechanism */
-! symKey = PK11_ImportSymKey( slot, ctx->cipher, PK11_OriginUnwrap, CKA_WRAP, &oriskv, NULL ) ;
-! if( symKey == NULL ) {
-! xmlSecError( XMLSEC_ERRORS_HERE ,
-! NULL ,
-! "PK11_ImportSymKey" ,
-! XMLSEC_ERRORS_R_CRYPTO_FAILED ,
-! XMLSEC_ERRORS_NO_MESSAGE ) ;
-! xmlSecBufferDestroy(result);
-! PK11_FreeSlot( slot ) ;
-! return(-1);
-! }
-!
-! wrpskv.type = siBuffer ;
-! wrpskv.data = xmlSecBufferGetData( result ) ;
-! wrpskv.len = xmlSecBufferGetMaxSize( result ) ;
-!
-! if( PK11_PubWrapSymKey( ctx->cipher, ctx->pubkey, symKey, &wrpskv ) != SECSuccess ) {
-! xmlSecError( XMLSEC_ERRORS_HERE ,
-! NULL ,
-! "PK11_PubWrapSymKey" ,
-! XMLSEC_ERRORS_R_CRYPTO_FAILED ,
-! XMLSEC_ERRORS_NO_MESSAGE ) ;
-! PK11_FreeSymKey( symKey ) ;
-! xmlSecBufferDestroy(result);
-! PK11_FreeSlot( slot ) ;
-! return(-1);
-! }
-!
-! if( xmlSecBufferSetSize( result , wrpskv.len ) < 0 ) {
-! xmlSecError( XMLSEC_ERRORS_HERE ,
-! NULL ,
-! "xmlSecBufferSetSize" ,
-! XMLSEC_ERRORS_R_CRYPTO_FAILED ,
-! XMLSEC_ERRORS_NO_MESSAGE ) ;
-! PK11_FreeSymKey( symKey ) ;
-! xmlSecBufferDestroy(result);
-! PK11_FreeSlot( slot ) ;
-! return(-1);
-! }
-! PK11_FreeSymKey( symKey ) ;
-! PK11_FreeSlot( slot ) ;
-! } else {
-! SECItem* keyItem ;
-! CK_OBJECT_HANDLE id1 ;
-!
-! /* pay attention to mechanism */
-! if( ( symKey = PK11_PubUnwrapSymKey( ctx->prikey, &oriskv, ctx->cipher, CKA_UNWRAP, 0 ) ) == NULL ) {
-! xmlSecError( XMLSEC_ERRORS_HERE ,
-! NULL ,
-! "PK11_PubUnwrapSymKey" ,
-! XMLSEC_ERRORS_R_CRYPTO_FAILED ,
-! XMLSEC_ERRORS_NO_MESSAGE ) ;
-! xmlSecBufferDestroy(result);
-! return(-1);
-! }
-!
-! /* Extract raw data from symmetric key */
-! if( PK11_ExtractKeyValue( symKey ) != SECSuccess ) {
-! xmlSecError( XMLSEC_ERRORS_HERE ,
-! NULL ,
-! "PK11_ExtractKeyValue" ,
-! XMLSEC_ERRORS_R_CRYPTO_FAILED ,
-! XMLSEC_ERRORS_NO_MESSAGE ) ;
-! PK11_FreeSymKey( symKey ) ;
-! xmlSecBufferDestroy(result);
-! return(-1);
-! }
-!
-! if( ( keyItem = PK11_GetKeyData( symKey ) ) == NULL ) {
-! xmlSecError( XMLSEC_ERRORS_HERE ,
-! NULL ,
-! "PK11_GetKeyData" ,
-! XMLSEC_ERRORS_R_CRYPTO_FAILED ,
-! XMLSEC_ERRORS_NO_MESSAGE ) ;
-! PK11_FreeSymKey( symKey ) ;
-! xmlSecBufferDestroy(result);
-! return(-1);
-! }
-!
-! if( xmlSecBufferSetData( result, keyItem->data, keyItem->len ) < 0 ) {
-! xmlSecError( XMLSEC_ERRORS_HERE ,
-! NULL ,
-! "PK11_PubUnwrapSymKey" ,
-! XMLSEC_ERRORS_R_CRYPTO_FAILED ,
-! XMLSEC_ERRORS_NO_MESSAGE ) ;
-! PK11_FreeSymKey( symKey ) ;
-! xmlSecBufferDestroy(result);
-! return(-1);
-! }
-! PK11_FreeSymKey( symKey ) ;
-! }
-!
-! /* Write output */
-! if( xmlSecBufferAppend( out, xmlSecBufferGetData(result), xmlSecBufferGetSize(result) ) < 0 ) {
-! xmlSecError( XMLSEC_ERRORS_HERE ,
-! NULL ,
-! "xmlSecBufferAppend" ,
-! XMLSEC_ERRORS_R_CRYPTO_FAILED ,
-! XMLSEC_ERRORS_NO_MESSAGE ) ;
-! xmlSecBufferDestroy(result);
-! return(-1);
-! }
-! xmlSecBufferDestroy(result);
-!
-! return(0);
-! }
-!
-! static int
-! xmlSecNssKeyTransportExecute(xmlSecTransformPtr transform, int last, xmlSecTransformCtxPtr transformCtx) {
-! xmlSecNssKeyTransportCtxPtr context = NULL ;
-! xmlSecBufferPtr inBuf, outBuf ;
-! int operation ;
-! int rtv ;
-!
-! xmlSecAssert2( xmlSecNssKeyTransportCheckId( transform ), -1 ) ;
-! xmlSecAssert2( xmlSecTransformCheckSize( transform, xmlSecNssKeyTransportSize ), -1 ) ;
-! xmlSecAssert2( ( transform->operation == xmlSecTransformOperationEncrypt ) || ( transform->operation == xmlSecTransformOperationDecrypt ), -1 ) ;
-! xmlSecAssert2( transformCtx != NULL , -1 ) ;
-!
-! context = xmlSecNssKeyTransportGetCtx( transform ) ;
-! if( context == NULL ) {
-! xmlSecError( XMLSEC_ERRORS_HERE ,
-! xmlSecErrorsSafeString( xmlSecTransformGetName( transform ) ) ,
-! "xmlSecNssKeyTransportGetCtx" ,
-! XMLSEC_ERRORS_R_CRYPTO_FAILED ,
-! XMLSEC_ERRORS_NO_MESSAGE ) ;
-! return(-1);
-! }
-!
-! inBuf = &( transform->inBuf ) ;
-! outBuf = &( transform->outBuf ) ;
-!
-! if( transform->status == xmlSecTransformStatusNone ) {
-! transform->status = xmlSecTransformStatusWorking ;
-! }
-!
-! operation = ( transform->operation == xmlSecTransformOperationEncrypt ) ? 1 : 0 ;
-! if( transform->status == xmlSecTransformStatusWorking ) {
-! if( context->material == NULL ) {
-! rtv = xmlSecNssKeyTransportCtxInit( context, inBuf , outBuf , operation , transformCtx ) ;
-! if( rtv < 0 ) {
-! xmlSecError( XMLSEC_ERRORS_HERE ,
-! xmlSecErrorsSafeString( xmlSecTransformGetName( transform ) ) ,
-! "xmlSecNssKeyTransportCtxInit" ,
-! XMLSEC_ERRORS_R_INVALID_STATUS ,
-! XMLSEC_ERRORS_NO_MESSAGE ) ;
-! return(-1);
-! }
-! }
-!
-! if( context->material == NULL && last != 0 ) {
-! xmlSecError( XMLSEC_ERRORS_HERE ,
-! xmlSecErrorsSafeString( xmlSecTransformGetName( transform ) ) ,
-! NULL ,
-! XMLSEC_ERRORS_R_INVALID_STATUS ,
-! "No enough data to intialize transform" ) ;
-! return(-1);
-! }
-!
-! if( context->material != NULL ) {
-! rtv = xmlSecNssKeyTransportCtxUpdate( context, inBuf , outBuf , operation , transformCtx ) ;
-! if( rtv < 0 ) {
-! xmlSecError( XMLSEC_ERRORS_HERE ,
-! xmlSecErrorsSafeString( xmlSecTransformGetName( transform ) ) ,
-! "xmlSecNssKeyTransportCtxUpdate" ,
-! XMLSEC_ERRORS_R_INVALID_STATUS ,
-! XMLSEC_ERRORS_NO_MESSAGE ) ;
-! return(-1);
-! }
-! }
-!
-! if( last ) {
-! rtv = xmlSecNssKeyTransportCtxFinal( context, inBuf , outBuf , operation , transformCtx ) ;
-! if( rtv < 0 ) {
-! xmlSecError( XMLSEC_ERRORS_HERE ,
-! xmlSecErrorsSafeString( xmlSecTransformGetName( transform ) ) ,
-! "xmlSecNssKeyTransportCtxFinal" ,
-! XMLSEC_ERRORS_R_INVALID_STATUS ,
-! XMLSEC_ERRORS_NO_MESSAGE ) ;
-! return(-1);
-! }
-! transform->status = xmlSecTransformStatusFinished ;
-! }
-! } else if( transform->status == xmlSecTransformStatusFinished ) {
-! if( xmlSecBufferGetSize( inBuf ) != 0 ) {
-! xmlSecError( XMLSEC_ERRORS_HERE ,
-! xmlSecErrorsSafeString( xmlSecTransformGetName( transform ) ) ,
-! NULL ,
-! XMLSEC_ERRORS_R_INVALID_STATUS ,
-! "status=%d", transform->status ) ;
-! return(-1);
-! }
-! } else {
-! xmlSecError( XMLSEC_ERRORS_HERE ,
-! xmlSecErrorsSafeString( xmlSecTransformGetName( transform ) ) ,
-! NULL ,
-! XMLSEC_ERRORS_R_INVALID_STATUS ,
-! "status=%d", transform->status ) ;
-! return(-1);
-! }
-!
-! return(0);
-! }
-!
-!
-! #ifndef XMLSEC_NO_RSA
-!
-! #ifdef __MINGW32__ // for runtime-pseudo-reloc
-! static struct _xmlSecTransformKlass xmlSecNssRsaPkcs1Klass = {
-! #else
-! static xmlSecTransformKlass xmlSecNssRsaPkcs1Klass = {
-! #endif
-! /* klass/object sizes */
-! sizeof(xmlSecTransformKlass), /* xmlSecSize klassSize */
-! xmlSecNssKeyTransportSize, /* xmlSecSize objSize */
-!
-! xmlSecNameRsaPkcs1, /* const xmlChar* name; */
-! xmlSecHrefRsaPkcs1, /* const xmlChar* href; */
-! xmlSecTransformUsageEncryptionMethod, /* xmlSecAlgorithmUsage usage; */
-!
-! xmlSecNssKeyTransportInitialize, /* xmlSecTransformInitializeMethod initialize; */
-! xmlSecNssKeyTransportFinalize, /* xmlSecTransformFinalizeMethod finalize; */
-! NULL, /* xmlSecTransformNodeReadMethod readNode; */
-! NULL, /* xmlSecTransformNodeWriteMethod writeNode; */
-! xmlSecNssKeyTransportSetKeyReq, /* xmlSecTransformSetKeyMethod setKeyReq; */
-! xmlSecNssKeyTransportSetKey, /* xmlSecTransformSetKeyMethod setKey; */
-! NULL, /* xmlSecTransformValidateMethod validate; */
-! xmlSecTransformDefaultGetDataType, /* xmlSecTransformGetDataTypeMethod getDataType; */
-! xmlSecTransformDefaultPushBin, /* xmlSecTransformPushBinMethod pushBin; */
-! xmlSecTransformDefaultPopBin, /* xmlSecTransformPopBinMethod popBin; */
-! NULL, /* xmlSecTransformPushXmlMethod pushXml; */
-! NULL, /* xmlSecTransformPopXmlMethod popXml; */
-! xmlSecNssKeyTransportExecute, /* xmlSecTransformExecuteMethod execute; */
-!
-! NULL, /* void* reserved0; */
-! NULL, /* void* reserved1; */
-! };
-!
-! #ifdef __MINGW32__ // for runtime-pseudo-reloc
-! static struct _xmlSecTransformKlass xmlSecNssRsaOaepKlass = {
-! #else
-! static xmlSecTransformKlass xmlSecNssRsaOaepKlass = {
-! #endif
-! /* klass/object sizes */
-! sizeof(xmlSecTransformKlass), /* xmlSecSize klassSize */
-! xmlSecNssKeyTransportSize, /* xmlSecSize objSize */
-!
-! xmlSecNameRsaOaep, /* const xmlChar* name; */
-! xmlSecHrefRsaOaep, /* const xmlChar* href; */
-! xmlSecTransformUsageEncryptionMethod, /* xmlSecAlgorithmUsage usage; */
-!
-! xmlSecNssKeyTransportInitialize, /* xmlSecTransformInitializeMethod initialize; */
-! xmlSecNssKeyTransportFinalize, /* xmlSecTransformFinalizeMethod finalize; */
-! NULL, /* xmlSecTransformNodeReadMethod readNode; */
-! NULL, /* xmlSecTransformNodeWriteMethod writeNode; */
-! xmlSecNssKeyTransportSetKeyReq, /* xmlSecTransformSetKeyMethod setKeyReq; */
-! xmlSecNssKeyTransportSetKey, /* xmlSecTransformSetKeyMethod setKey; */
-! NULL, /* xmlSecTransformValidateMethod validate; */
-! xmlSecTransformDefaultGetDataType, /* xmlSecTransformGetDataTypeMethod getDataType; */
-! xmlSecTransformDefaultPushBin, /* xmlSecTransformPushBinMethod pushBin; */
-! xmlSecTransformDefaultPopBin, /* xmlSecTransformPopBinMethod popBin; */
-! NULL, /* xmlSecTransformPushXmlMethod pushXml; */
-! NULL, /* xmlSecTransformPopXmlMethod popXml; */
-! xmlSecNssKeyTransportExecute, /* xmlSecTransformExecuteMethod execute; */
-!
-! NULL, /* void* reserved0; */
-! NULL, /* void* reserved1; */
-! };
-!
-! /**
-! * xmlSecNssTransformRsaPkcs1GetKlass:
-! *
-! * The RSA-PKCS1 key transport transform klass.
-! *
-! * Returns RSA-PKCS1 key transport transform klass.
-! */
-! xmlSecTransformId
-! xmlSecNssTransformRsaPkcs1GetKlass(void) {
-! return(&xmlSecNssRsaPkcs1Klass);
-! }
-!
-! /**
-! * xmlSecNssTransformRsaOaepGetKlass:
-! *
-! * The RSA-PKCS1 key transport transform klass.
-! *
-! * Returns RSA-PKCS1 key transport transform klass.
-! */
-! xmlSecTransformId
-! xmlSecNssTransformRsaOaepGetKlass(void) {
-! return(&xmlSecNssRsaOaepKlass);
-! }
-!
-! #endif /* XMLSEC_NO_RSA */
-!
-*** misc/xmlsec1-1.2.6/src/nss/keywrapers.c Fri May 11 14:47:46 2007
---- misc/build/xmlsec1-1.2.6/src/nss/keywrapers.c Fri May 11 14:47:20 2007
-***************
-*** 1 ****
-! dummy
---- 1,1213 ----
-! /**
-! *
-! * XMLSec library
-! *
-! * AES Algorithm support
-! *
-! * This is free software; see Copyright file in the source
-! * distribution for preciese wording.
-! *
-! * Copyright .................................
-! */
-! #include "globals.h"
-!
-! #include <stdlib.h>
-! #include <stdio.h>
-! #include <string.h>
-!
-! #include <nss.h>
-! #include <pk11func.h>
-! #include <hasht.h>
-!
-! #include <xmlsec/xmlsec.h>
-! #include <xmlsec/xmltree.h>
-! #include <xmlsec/keys.h>
-! #include <xmlsec/transforms.h>
-! #include <xmlsec/errors.h>
-!
-! #include <xmlsec/nss/crypto.h>
-! #include <xmlsec/nss/ciphers.h>
-!
-! #define XMLSEC_NSS_AES128_KEY_SIZE 16
-! #define XMLSEC_NSS_AES192_KEY_SIZE 24
-! #define XMLSEC_NSS_AES256_KEY_SIZE 32
-! #define XMLSEC_NSS_DES3_KEY_SIZE 24
-! #define XMLSEC_NSS_DES3_KEY_LENGTH 24
-! #define XMLSEC_NSS_DES3_IV_LENGTH 8
-! #define XMLSEC_NSS_DES3_BLOCK_LENGTH 8
-!
-! static xmlSecByte xmlSecNssKWDes3Iv[XMLSEC_NSS_DES3_IV_LENGTH] = {
-! 0x4a, 0xdd, 0xa2, 0x2c, 0x79, 0xe8, 0x21, 0x05
-! };
-!
-! /*********************************************************************
-! *
-! * key wrap transforms
-! *
-! ********************************************************************/
-! typedef struct _xmlSecNssKeyWrapCtx xmlSecNssKeyWrapCtx ;
-! typedef struct _xmlSecNssKeyWrapCtx* xmlSecNssKeyWrapCtxPtr ;
-!
-! #define xmlSecNssKeyWrapSize \
-! ( sizeof( xmlSecTransform ) + sizeof( xmlSecNssKeyWrapCtx ) )
-!
-! #define xmlSecNssKeyWrapGetCtx( transform ) \
-! ( ( xmlSecNssKeyWrapCtxPtr )( ( ( xmlSecByte* )( transform ) ) + sizeof( xmlSecTransform ) ) )
-!
-! struct _xmlSecNssKeyWrapCtx {
-! CK_MECHANISM_TYPE cipher ;
-! PK11SymKey* symkey ;
-! xmlSecKeyDataId keyId ;
-! xmlSecBufferPtr material ; /* to be encrypted/decrypted key material */
-! } ;
-!
-! static int xmlSecNssKeyWrapInitialize(xmlSecTransformPtr transform);
-! static void xmlSecNssKeyWrapFinalize(xmlSecTransformPtr transform);
-! static int xmlSecNssKeyWrapSetKeyReq(xmlSecTransformPtr transform,
-! xmlSecKeyReqPtr keyReq);
-! static int xmlSecNssKeyWrapSetKey(xmlSecTransformPtr transform,
-! xmlSecKeyPtr key);
-! static int xmlSecNssKeyWrapExecute(xmlSecTransformPtr transform,
-! int last,
-! xmlSecTransformCtxPtr transformCtx);
-! static xmlSecSize xmlSecNssKeyWrapGetKeySize(xmlSecTransformPtr transform);
-!
-! static int
-! xmlSecNssKeyWrapCheckId(
-! xmlSecTransformPtr transform
-! ) {
-! #ifndef XMLSEC_NO_DES
-! if( xmlSecTransformCheckId( transform, xmlSecNssTransformKWDes3Id ) ) {
-! return(1);
-! }
-! #endif /* XMLSEC_NO_DES */
-!
-! #ifndef XMLSEC_NO_AES
-! if( xmlSecTransformCheckId( transform, xmlSecNssTransformKWAes128Id ) ||
-! xmlSecTransformCheckId( transform, xmlSecNssTransformKWAes192Id ) ||
-! xmlSecTransformCheckId( transform, xmlSecNssTransformKWAes256Id ) ) {
-!
-! return(1);
-! }
-! #endif /* XMLSEC_NO_AES */
-!
-! return(0);
-! }
-!
-! static xmlSecSize
-! xmlSecNssKeyWrapGetKeySize(xmlSecTransformPtr transform) {
-! #ifndef XMLSEC_NO_DES
-! if( xmlSecTransformCheckId( transform, xmlSecNssTransformKWDes3Id ) ) {
-! return(XMLSEC_NSS_DES3_KEY_SIZE);
-! } else
-! #endif /* XMLSEC_NO_DES */
-!
-! #ifndef XMLSEC_NO_AES
-! if(xmlSecTransformCheckId(transform, xmlSecNssTransformKWAes128Id)) {
-! return(XMLSEC_NSS_AES128_KEY_SIZE);
-! } else if(xmlSecTransformCheckId(transform, xmlSecNssTransformKWAes192Id)) {
-! return(XMLSEC_NSS_AES192_KEY_SIZE);
-! } else if(xmlSecTransformCheckId(transform, xmlSecNssTransformKWAes256Id)) {
-! return(XMLSEC_NSS_AES256_KEY_SIZE);
-! } else if(xmlSecTransformCheckId(transform, xmlSecNssTransformKWAes256Id)) {
-! return(XMLSEC_NSS_AES256_KEY_SIZE);
-! } else
-! #endif /* XMLSEC_NO_AES */
-!
-! if(1)
-! return(0);
-! }
-!
-!
-! static int
-! xmlSecNssKeyWrapInitialize(xmlSecTransformPtr transform) {
-! xmlSecNssKeyWrapCtxPtr context ;
-! int ret;
-!
-! xmlSecAssert2(xmlSecNssKeyWrapCheckId(transform), -1);
-! xmlSecAssert2(xmlSecTransformCheckSize(transform, xmlSecNssKeyWrapSize), -1);
-!
-! context = xmlSecNssKeyWrapGetCtx( transform ) ;
-! xmlSecAssert2( context != NULL , -1 ) ;
-!
-! #ifndef XMLSEC_NO_DES
-! if( transform->id == xmlSecNssTransformKWDes3Id ) {
-! context->cipher = CKM_DES3_CBC ;
-! context->keyId = xmlSecNssKeyDataDesId ;
-! } else
-! #endif /* XMLSEC_NO_DES */
-!
-! #ifndef XMLSEC_NO_AES
-! if( transform->id == xmlSecNssTransformKWAes128Id ) {
-! /* context->cipher = CKM_NETSCAPE_AES_KEY_WRAP ;*/
-! context->cipher = CKM_AES_CBC ;
-! context->keyId = xmlSecNssKeyDataAesId ;
-! } else
-! if( transform->id == xmlSecNssTransformKWAes192Id ) {
-! /* context->cipher = CKM_NETSCAPE_AES_KEY_WRAP ;*/
-! context->cipher = CKM_AES_CBC ;
-! context->keyId = xmlSecNssKeyDataAesId ;
-! } else
-! if( transform->id == xmlSecNssTransformKWAes256Id ) {
-! /* context->cipher = CKM_NETSCAPE_AES_KEY_WRAP ;*/
-! context->cipher = CKM_AES_CBC ;
-! context->keyId = xmlSecNssKeyDataAesId ;
-! } else
-! #endif /* XMLSEC_NO_AES */
-!
-!
-! if( 1 ) {
-! xmlSecError( XMLSEC_ERRORS_HERE ,
-! xmlSecErrorsSafeString(xmlSecTransformGetName(transform)),
-! NULL ,
-! XMLSEC_ERRORS_R_CRYPTO_FAILED ,
-! XMLSEC_ERRORS_NO_MESSAGE ) ;
-! return(-1);
-! }
-!
-! context->symkey = NULL ;
-! context->material = NULL ;
-!
-! return(0);
-! }
-!
-! static void
-! xmlSecNssKeyWrapFinalize(xmlSecTransformPtr transform) {
-! xmlSecNssKeyWrapCtxPtr context ;
-!
-! xmlSecAssert(xmlSecNssKeyWrapCheckId(transform));
-! xmlSecAssert(xmlSecTransformCheckSize(transform, xmlSecNssKeyWrapSize));
-!
-! context = xmlSecNssKeyWrapGetCtx( transform ) ;
-! xmlSecAssert( context != NULL ) ;
-!
-! if( context->symkey != NULL ) {
-! PK11_FreeSymKey( context->symkey ) ;
-! context->symkey = NULL ;
-! }
-!
-! if( context->material != NULL ) {
-! xmlSecBufferDestroy(context->material);
-! context->material = NULL ;
-! }
-! }
-!
-! static int
-! xmlSecNssKeyWrapSetKeyReq(xmlSecTransformPtr transform, xmlSecKeyReqPtr keyReq) {
-! xmlSecNssKeyWrapCtxPtr context ;
-! xmlSecSize cipherSize = 0 ;
-!
-!
-! xmlSecAssert2(xmlSecNssKeyWrapCheckId(transform), -1);
-! xmlSecAssert2(xmlSecTransformCheckSize(transform, xmlSecNssKeyWrapSize), -1);
-! xmlSecAssert2((transform->operation == xmlSecTransformOperationEncrypt) || (transform->operation == xmlSecTransformOperationDecrypt), -1);
-! xmlSecAssert2(keyReq != NULL, -1);
-!
-! context = xmlSecNssKeyWrapGetCtx( transform ) ;
-! xmlSecAssert2( context != NULL , -1 ) ;
-!
-! keyReq->keyId = context->keyId;
-! keyReq->keyType = xmlSecKeyDataTypeSymmetric;
-! if(transform->operation == xmlSecTransformOperationEncrypt) {
-! keyReq->keyUsage = xmlSecKeyUsageEncrypt;
-! } else {
-! keyReq->keyUsage = xmlSecKeyUsageDecrypt;
-! }
-!
-! keyReq->keyBitsSize = xmlSecNssKeyWrapGetKeySize( transform ) ;
-!
-! return(0);
-! }
-!
-! static int
-! xmlSecNssKeyWrapSetKey(xmlSecTransformPtr transform, xmlSecKeyPtr key) {
-! xmlSecNssKeyWrapCtxPtr context = NULL ;
-! xmlSecKeyDataPtr keyData = NULL ;
-! PK11SymKey* symkey = NULL ;
-!
-! xmlSecAssert2(xmlSecNssKeyWrapCheckId(transform), -1);
-! xmlSecAssert2(xmlSecTransformCheckSize(transform, xmlSecNssKeyWrapSize), -1);
-! xmlSecAssert2((transform->operation == xmlSecTransformOperationEncrypt) || (transform->operation == xmlSecTransformOperationDecrypt), -1);
-! xmlSecAssert2(key != NULL, -1);
-!
-! context = xmlSecNssKeyWrapGetCtx( transform ) ;
-! if( context == NULL || context->keyId == NULL || context->symkey != NULL ) {
-! xmlSecError( XMLSEC_ERRORS_HERE ,
-! xmlSecErrorsSafeString( xmlSecTransformGetName( transform ) ) ,
-! "xmlSecNssKeyWrapGetCtx" ,
-! XMLSEC_ERRORS_R_CRYPTO_FAILED ,
-! XMLSEC_ERRORS_NO_MESSAGE ) ;
-! return(-1);
-! }
-! xmlSecAssert2( xmlSecKeyCheckId( key, context->keyId ), -1 ) ;
-!
-! keyData = xmlSecKeyGetValue( key ) ;
-! if( keyData == NULL ) {
-! xmlSecError( XMLSEC_ERRORS_HERE ,
-! xmlSecErrorsSafeString( xmlSecKeyGetName( key ) ) ,
-! "xmlSecKeyGetValue" ,
-! XMLSEC_ERRORS_R_CRYPTO_FAILED ,
-! XMLSEC_ERRORS_NO_MESSAGE ) ;
-! return(-1);
-! }
-!
-! if( ( symkey = xmlSecNssSymKeyDataGetKey( keyData ) ) == NULL ) {
-! xmlSecError( XMLSEC_ERRORS_HERE ,
-! xmlSecErrorsSafeString( xmlSecKeyDataGetName( keyData ) ) ,
-! "xmlSecNssSymKeyDataGetKey" ,
-! XMLSEC_ERRORS_R_CRYPTO_FAILED ,
-! XMLSEC_ERRORS_NO_MESSAGE ) ;
-! return(-1);
-! }
-!
-! context->symkey = symkey ;
-!
-! return(0) ;
-! }
-!
-! /**
-! * key wrap transform
-! */
-! static int
-! xmlSecNssKeyWrapCtxInit(
-! xmlSecNssKeyWrapCtxPtr ctx ,
-! xmlSecBufferPtr in ,
-! xmlSecBufferPtr out ,
-! int encrypt ,
-! xmlSecTransformCtxPtr transformCtx
-! ) {
-! xmlSecSize blockSize ;
-!
-! xmlSecAssert2( ctx != NULL , -1 ) ;
-! xmlSecAssert2( ctx->cipher != CKM_INVALID_MECHANISM , -1 ) ;
-! xmlSecAssert2( ctx->symkey != NULL , -1 ) ;
-! xmlSecAssert2( ctx->keyId != NULL , -1 ) ;
-! xmlSecAssert2( in != NULL , -1 ) ;
-! xmlSecAssert2( out != NULL , -1 ) ;
-! xmlSecAssert2( transformCtx != NULL , -1 ) ;
-!
-! if( ctx->material != NULL ) {
-! xmlSecBufferDestroy( ctx->material ) ;
-! ctx->material = NULL ;
-! }
-!
-! if( ( blockSize = PK11_GetBlockSize( ctx->cipher , NULL ) ) < 0 ) {
-! xmlSecError( XMLSEC_ERRORS_HERE ,
-! NULL ,
-! "PK11_GetBlockSize" ,
-! XMLSEC_ERRORS_R_CRYPTO_FAILED ,
-! XMLSEC_ERRORS_NO_MESSAGE ) ;
-! return(-1);
-! }
-!
-! ctx->material = xmlSecBufferCreate( blockSize ) ;
-! if( ctx->material == NULL ) {
-! xmlSecError( XMLSEC_ERRORS_HERE ,
-! NULL ,
-! "xmlSecBufferCreate" ,
-! XMLSEC_ERRORS_R_CRYPTO_FAILED ,
-! XMLSEC_ERRORS_NO_MESSAGE ) ;
-! return(-1);
-! }
-!
-! /* read raw key material into context */
-! if( xmlSecBufferSetData( ctx->material, xmlSecBufferGetData(in), xmlSecBufferGetSize(in) ) < 0 ) {
-! xmlSecError( XMLSEC_ERRORS_HERE ,
-! NULL ,
-! "xmlSecBufferSetData" ,
-! XMLSEC_ERRORS_R_CRYPTO_FAILED ,
-! XMLSEC_ERRORS_NO_MESSAGE ) ;
-! return(-1);
-! }
-!
-! if( xmlSecBufferRemoveHead( in , xmlSecBufferGetSize(in) ) < 0 ) {
-! xmlSecError( XMLSEC_ERRORS_HERE ,
-! NULL ,
-! "xmlSecBufferRemoveHead" ,
-! XMLSEC_ERRORS_R_CRYPTO_FAILED ,
-! XMLSEC_ERRORS_NO_MESSAGE ) ;
-! return(-1);
-! }
-!
-! return(0);
-! }
-!
-! /**
-! * key wrap transform update
-! */
-! static int
-! xmlSecNssKeyWrapCtxUpdate(
-! xmlSecNssKeyWrapCtxPtr ctx ,
-! xmlSecBufferPtr in ,
-! xmlSecBufferPtr out ,
-! int encrypt ,
-! xmlSecTransformCtxPtr transformCtx
-! ) {
-! xmlSecAssert2( ctx != NULL , -1 ) ;
-! xmlSecAssert2( ctx->cipher != CKM_INVALID_MECHANISM , -1 ) ;
-! xmlSecAssert2( ctx->symkey != NULL , -1 ) ;
-! xmlSecAssert2( ctx->keyId != NULL , -1 ) ;
-! xmlSecAssert2( ctx->material != NULL , -1 ) ;
-! xmlSecAssert2( in != NULL , -1 ) ;
-! xmlSecAssert2( out != NULL , -1 ) ;
-! xmlSecAssert2( transformCtx != NULL , -1 ) ;
-!
-! /* read raw key material and append into context */
-! if( xmlSecBufferAppend( ctx->material, xmlSecBufferGetData(in), xmlSecBufferGetSize(in) ) < 0 ) {
-! xmlSecError( XMLSEC_ERRORS_HERE ,
-! NULL ,
-! "xmlSecBufferAppend" ,
-! XMLSEC_ERRORS_R_CRYPTO_FAILED ,
-! XMLSEC_ERRORS_NO_MESSAGE ) ;
-! return(-1);
-! }
-!
-! if( xmlSecBufferRemoveHead( in , xmlSecBufferGetSize(in) ) < 0 ) {
-! xmlSecError( XMLSEC_ERRORS_HERE ,
-! NULL ,
-! "xmlSecBufferRemoveHead" ,
-! XMLSEC_ERRORS_R_CRYPTO_FAILED ,
-! XMLSEC_ERRORS_NO_MESSAGE ) ;
-! return(-1);
-! }
-!
-! return(0);
-! }
-!
-! static int
-! xmlSecNssKWDes3BufferReverse(xmlSecByte *buf, xmlSecSize size) {
-! xmlSecSize s;
-! xmlSecSize i;
-! xmlSecByte c;
-!
-! xmlSecAssert2(buf != NULL, -1);
-!
-! s = size / 2;
-! --size;
-! for(i = 0; i < s; ++i) {
-! c = buf[i];
-! buf[i] = buf[size - i];
-! buf[size - i] = c;
-! }
-! return(0);
-! }
-!
-! static xmlSecByte *
-! xmlSecNssComputeSHA1(const xmlSecByte *in, xmlSecSize inSize,
-! xmlSecByte *out, xmlSecSize outSize)
-! {
-! PK11Context *context = NULL;
-! SECStatus s;
-! xmlSecByte *digest = NULL;
-! unsigned int len;
-!
-! xmlSecAssert2(in != NULL, NULL);
-! xmlSecAssert2(out != NULL, NULL);
-! xmlSecAssert2(outSize >= SHA1_LENGTH, NULL);
-!
-! /* Create a context for hashing (digesting) */
-! context = PK11_CreateDigestContext(SEC_OID_SHA1);
-! if (context == NULL) {
-! xmlSecError(XMLSEC_ERRORS_HERE,
-! NULL,
-! "PK11_CreateDigestContext",
-! XMLSEC_ERRORS_R_CRYPTO_FAILED,
-! "error code = %d", PORT_GetError());
-! goto done;
-! }
-!
-! s = PK11_DigestBegin(context);
-! if (s != SECSuccess) {
-! xmlSecError(XMLSEC_ERRORS_HERE,
-! NULL,
-! "PK11_DigestBegin",
-! XMLSEC_ERRORS_R_CRYPTO_FAILED,
-! "error code = %d", PORT_GetError());
-! goto done;
-! }
-!
-! s = PK11_DigestOp(context, in, inSize);
-! if (s != SECSuccess) {
-! xmlSecError(XMLSEC_ERRORS_HERE,
-! NULL,
-! "PK11_DigestOp",
-! XMLSEC_ERRORS_R_CRYPTO_FAILED,
-! "error code = %d", PORT_GetError());
-! goto done;
-! }
-!
-! s = PK11_DigestFinal(context, out, &len, outSize);
-! if (s != SECSuccess) {
-! xmlSecError(XMLSEC_ERRORS_HERE,
-! NULL,
-! "PK11_DigestFinal",
-! XMLSEC_ERRORS_R_CRYPTO_FAILED,
-! "error code = %d", PORT_GetError());
-! goto done;
-! }
-! xmlSecAssert2(len == SHA1_LENGTH, NULL);
-!
-! digest = out;
-!
-! done:
-! if (context != NULL) {
-! PK11_DestroyContext(context, PR_TRUE);
-! }
-! return (digest);
-! }
-!
-! static int
-! xmlSecNssKWDes3Encrypt(
-! PK11SymKey* symKey ,
-! CK_MECHANISM_TYPE cipherMech ,
-! const xmlSecByte* iv ,
-! xmlSecSize ivSize ,
-! const xmlSecByte* in ,
-! xmlSecSize inSize ,
-! xmlSecByte* out ,
-! xmlSecSize outSize ,
-! int enc
-! ) {
-! PK11Context* EncContext = NULL;
-! SECItem ivItem ;
-! SECItem* secParam = NULL ;
-! int tmp1_outlen;
-! unsigned int tmp2_outlen;
-! int result_len = -1;
-! SECStatus rv;
-!
-! xmlSecAssert2( cipherMech != CKM_INVALID_MECHANISM , -1 ) ;
-! xmlSecAssert2( symKey != NULL , -1 ) ;
-! xmlSecAssert2(iv != NULL, -1);
-! xmlSecAssert2(ivSize == XMLSEC_NSS_DES3_IV_LENGTH, -1);
-! xmlSecAssert2(in != NULL, -1);
-! xmlSecAssert2(inSize > 0, -1);
-! xmlSecAssert2(out != NULL, -1);
-! xmlSecAssert2(outSize >= inSize, -1);
-!
-! /* Prepare IV */
-! ivItem.data = ( unsigned char* )iv ;
-! ivItem.len = ivSize ;
-!
-! secParam = PK11_ParamFromIV(cipherMech, &ivItem);
-! if (secParam == NULL) {
-! xmlSecError(XMLSEC_ERRORS_HERE,
-! NULL,
-! "PK11_ParamFromIV",
-! XMLSEC_ERRORS_R_CRYPTO_FAILED,
-! "Error code = %d", PORT_GetError());
-! goto done;
-! }
-!
-! EncContext = PK11_CreateContextBySymKey(cipherMech,
-! enc ? CKA_ENCRYPT : CKA_DECRYPT,
-! symKey, secParam);
-! if (EncContext == NULL) {
-! xmlSecError(XMLSEC_ERRORS_HERE,
-! NULL,
-! "PK11_CreateContextBySymKey",
-! XMLSEC_ERRORS_R_CRYPTO_FAILED,
-! "Error code = %d", PORT_GetError());
-! goto done;
-! }
-!
-! tmp1_outlen = tmp2_outlen = 0;
-! rv = PK11_CipherOp(EncContext, out, &tmp1_outlen, outSize,
-! (unsigned char *)in, inSize);
-! if (rv != SECSuccess) {
-! xmlSecError(XMLSEC_ERRORS_HERE,
-! NULL,
-! "PK11_CipherOp",
-! XMLSEC_ERRORS_R_CRYPTO_FAILED,
-! "Error code = %d", PORT_GetError());
-! goto done;
-! }
-!
-! rv = PK11_DigestFinal(EncContext, out+tmp1_outlen,
-! &tmp2_outlen, outSize-tmp1_outlen);
-! if (rv != SECSuccess) {
-! xmlSecError(XMLSEC_ERRORS_HERE,
-! NULL,
-! "PK11_DigestFinal",
-! XMLSEC_ERRORS_R_CRYPTO_FAILED,
-! "Error code = %d", PORT_GetError());
-! goto done;
-! }
-!
-! result_len = tmp1_outlen + tmp2_outlen;
-!
-! done:
-! if (secParam) {
-! SECITEM_FreeItem(secParam, PR_TRUE);
-! }
-! if (EncContext) {
-! PK11_DestroyContext(EncContext, PR_TRUE);
-! }
-!
-! return(result_len);
-! }
-!
-! static int
-! xmlSecNssKeyWrapDesOp(
-! xmlSecNssKeyWrapCtxPtr ctx ,
-! int encrypt ,
-! xmlSecBufferPtr result
-! ) {
-! xmlSecByte sha1[SHA1_LENGTH];
-! xmlSecByte iv[XMLSEC_NSS_DES3_IV_LENGTH];
-! xmlSecByte* in;
-! xmlSecSize inSize;
-! xmlSecByte* out;
-! xmlSecSize outSize;
-! xmlSecSize s;
-! int ret;
-! SECStatus status;
-!
-! xmlSecAssert2( ctx != NULL , -1 ) ;
-! xmlSecAssert2( ctx->cipher != CKM_INVALID_MECHANISM , -1 ) ;
-! xmlSecAssert2( ctx->symkey != NULL , -1 ) ;
-! xmlSecAssert2( ctx->keyId != NULL , -1 ) ;
-! xmlSecAssert2( ctx->material != NULL , -1 ) ;
-! xmlSecAssert2( result != NULL , -1 ) ;
-!
-! in = xmlSecBufferGetData(ctx->material);
-! inSize = xmlSecBufferGetSize(ctx->material) ;
-! out = xmlSecBufferGetData(result);
-! outSize = xmlSecBufferGetMaxSize(result) ;
-! if( encrypt ) {
-! /* step 2: calculate sha1 and CMS */
-! if(xmlSecNssComputeSHA1(in, inSize, sha1, SHA1_LENGTH) == NULL) {
-! xmlSecError(XMLSEC_ERRORS_HERE,
-! NULL,
-! "xmlSecNssComputeSHA1",
-! XMLSEC_ERRORS_R_CRYPTO_FAILED,
-! XMLSEC_ERRORS_NO_MESSAGE);
-! return(-1);
-! }
-!
-! /* step 3: construct WKCKS */
-! memcpy(out, in, inSize);
-! memcpy(out + inSize, sha1, XMLSEC_NSS_DES3_BLOCK_LENGTH);
-!
-! /* step 4: generate random iv */
-! status = PK11_GenerateRandom(iv, XMLSEC_NSS_DES3_IV_LENGTH);
-! if(status != SECSuccess) {
-! xmlSecError(XMLSEC_ERRORS_HERE,
-! NULL,
-! "PK11_GenerateRandom",
-! XMLSEC_ERRORS_R_CRYPTO_FAILED,
-! "error code = %d", PORT_GetError());
-! return(-1);
-! }
-!
-! /* step 5: first encryption, result is TEMP1 */
-! ret = xmlSecNssKWDes3Encrypt( ctx->symkey, ctx->cipher,
-! iv, XMLSEC_NSS_DES3_IV_LENGTH,
-! out, inSize + XMLSEC_NSS_DES3_IV_LENGTH,
-! out, outSize, 1);
-! if(ret < 0) {
-! xmlSecError(XMLSEC_ERRORS_HERE,
-! NULL,
-! "xmlSecNssKWDes3Encrypt",
-! XMLSEC_ERRORS_R_XMLSEC_FAILED,
-! XMLSEC_ERRORS_NO_MESSAGE);
-! return(-1);
-! }
-!
-! /* step 6: construct TEMP2=IV || TEMP1 */
-! memmove(out + XMLSEC_NSS_DES3_IV_LENGTH, out,
-! inSize + XMLSEC_NSS_DES3_IV_LENGTH);
-! memcpy(out, iv, XMLSEC_NSS_DES3_IV_LENGTH);
-! s = ret + XMLSEC_NSS_DES3_IV_LENGTH;
-!
-! /* step 7: reverse octets order, result is TEMP3 */
-! ret = xmlSecNssKWDes3BufferReverse(out, s);
-! if(ret < 0) {
-! xmlSecError(XMLSEC_ERRORS_HERE,
-! NULL,
-! "xmlSecNssKWDes3BufferReverse",
-! XMLSEC_ERRORS_R_XMLSEC_FAILED,
-! XMLSEC_ERRORS_NO_MESSAGE);
-! return(-1);
-! }
-!
-! /* step 8: second encryption with static IV */
-! ret = xmlSecNssKWDes3Encrypt( ctx->symkey, ctx->cipher,
-! xmlSecNssKWDes3Iv, XMLSEC_NSS_DES3_IV_LENGTH,
-! out, s,
-! out, outSize, 1);
-! if(ret < 0) {
-! xmlSecError(XMLSEC_ERRORS_HERE,
-! NULL,
-! "xmlSecNssKWDes3Encrypt",
-! XMLSEC_ERRORS_R_XMLSEC_FAILED,
-! XMLSEC_ERRORS_NO_MESSAGE);
-! return(-1);
-! }
-! s = ret;
-!
-! if( xmlSecBufferSetSize( result , s ) < 0 ) {
-! xmlSecError(XMLSEC_ERRORS_HERE,
-! NULL,
-! "xmlSecBufferSetSize",
-! XMLSEC_ERRORS_R_XMLSEC_FAILED,
-! XMLSEC_ERRORS_NO_MESSAGE);
-! return(-1);
-! }
-! } else {
-! /* step 2: first decryption with static IV, result is TEMP3 */
-! ret = xmlSecNssKWDes3Encrypt( ctx->symkey, ctx->cipher,
-! xmlSecNssKWDes3Iv, XMLSEC_NSS_DES3_IV_LENGTH,
-! in, inSize,
-! out, outSize, 0);
-! if((ret < 0) || (ret < XMLSEC_NSS_DES3_IV_LENGTH)) {
-! xmlSecError(XMLSEC_ERRORS_HERE,
-! NULL,
-! "xmlSecNssKWDes3Encrypt",
-! XMLSEC_ERRORS_R_XMLSEC_FAILED,
-! XMLSEC_ERRORS_NO_MESSAGE);
-! return(-1);
-! }
-! s = ret;
-!
-! /* step 3: reverse octets order in TEMP3, result is TEMP2 */
-! ret = xmlSecNssKWDes3BufferReverse(out, s);
-! if(ret < 0) {
-! xmlSecError(XMLSEC_ERRORS_HERE,
-! NULL,
-! "xmlSecNssKWDes3BufferReverse",
-! XMLSEC_ERRORS_R_XMLSEC_FAILED,
-! XMLSEC_ERRORS_NO_MESSAGE);
-! return(-1);
-! }
-!
-! /* steps 4 and 5: get IV and decrypt second time, result is WKCKS */
-! ret = xmlSecNssKWDes3Encrypt( ctx->symkey, ctx->cipher,
-! out, XMLSEC_NSS_DES3_IV_LENGTH,
-! out+XMLSEC_NSS_DES3_IV_LENGTH, s-XMLSEC_NSS_DES3_IV_LENGTH,
-! out, outSize, 0);
-! if((ret < 0) || (ret < XMLSEC_NSS_DES3_BLOCK_LENGTH)) {
-! xmlSecError(XMLSEC_ERRORS_HERE,
-! NULL,
-! "xmlSecNssKWDes3Encrypt",
-! XMLSEC_ERRORS_R_XMLSEC_FAILED,
-! XMLSEC_ERRORS_NO_MESSAGE);
-! return(-1);
-! }
-! s = ret - XMLSEC_NSS_DES3_IV_LENGTH;
-!
-! /* steps 6 and 7: calculate SHA1 and validate it */
-! if(xmlSecNssComputeSHA1(out, s, sha1, SHA1_LENGTH) == NULL) {
-! xmlSecError(XMLSEC_ERRORS_HERE,
-! NULL,
-! "xmlSecNssComputeSHA1",
-! XMLSEC_ERRORS_R_CRYPTO_FAILED,
-! XMLSEC_ERRORS_NO_MESSAGE);
-! return(-1);
-! }
-!
-! if(memcmp(sha1, out + s, XMLSEC_NSS_DES3_BLOCK_LENGTH) != 0) {
-! xmlSecError(XMLSEC_ERRORS_HERE,
-! NULL,
-! NULL,
-! XMLSEC_ERRORS_R_INVALID_DATA,
-! "SHA1 does not match");
-! return(-1);
-! }
-!
-! if( xmlSecBufferSetSize( result , s ) < 0 ) {
-! xmlSecError(XMLSEC_ERRORS_HERE,
-! NULL,
-! "xmlSecBufferSetSize",
-! XMLSEC_ERRORS_R_XMLSEC_FAILED,
-! XMLSEC_ERRORS_NO_MESSAGE);
-! return(-1);
-! }
-! }
-!
-! return(0);
-! }
-!
-! static int
-! xmlSecNssKeyWrapAesOp(
-! xmlSecNssKeyWrapCtxPtr ctx ,
-! int encrypt ,
-! xmlSecBufferPtr result
-! ) {
-! PK11Context* cipherCtx = NULL;
-! SECItem ivItem ;
-! SECItem* secParam = NULL ;
-! xmlSecSize inSize ;
-! xmlSecSize inBlocks ;
-! int blockSize ;
-! int midSize ;
-! int finSize ;
-! xmlSecByte* out ;
-! xmlSecSize outSize;
-!
-! xmlSecAssert2( ctx != NULL , -1 ) ;
-! xmlSecAssert2( ctx->cipher != CKM_INVALID_MECHANISM , -1 ) ;
-! xmlSecAssert2( ctx->symkey != NULL , -1 ) ;
-! xmlSecAssert2( ctx->keyId != NULL , -1 ) ;
-! xmlSecAssert2( ctx->material != NULL , -1 ) ;
-! xmlSecAssert2( result != NULL , -1 ) ;
-!
-! /* Do not set any IV */
-! memset(&ivItem, 0, sizeof(ivItem));
-!
-! /* Get block size */
-! if( ( blockSize = PK11_GetBlockSize( ctx->cipher , NULL ) ) < 0 ) {
-! xmlSecError( XMLSEC_ERRORS_HERE ,
-! NULL ,
-! "PK11_GetBlockSize" ,
-! XMLSEC_ERRORS_R_CRYPTO_FAILED ,
-! XMLSEC_ERRORS_NO_MESSAGE ) ;
-! return(-1);
-! }
-!
-! inSize = xmlSecBufferGetSize( ctx->material ) ;
-! if( xmlSecBufferSetMaxSize( result , inSize + blockSize ) < 0 ) {
-! xmlSecError( XMLSEC_ERRORS_HERE ,
-! NULL ,
-! "xmlSecBufferSetMaxSize" ,
-! XMLSEC_ERRORS_R_CRYPTO_FAILED ,
-! XMLSEC_ERRORS_NO_MESSAGE ) ;
-! return(-1);
-! }
-!
-! /* Get Param for context initialization */
-! if( ( secParam = PK11_ParamFromIV( ctx->cipher , &ivItem ) ) == NULL ) {
-! xmlSecError( XMLSEC_ERRORS_HERE ,
-! NULL ,
-! "PK11_ParamFromIV" ,
-! XMLSEC_ERRORS_R_CRYPTO_FAILED ,
-! XMLSEC_ERRORS_NO_MESSAGE ) ;
-! return(-1);
-! }
-!
-! cipherCtx = PK11_CreateContextBySymKey( ctx->cipher , encrypt ? CKA_ENCRYPT : CKA_DECRYPT , ctx->symkey , secParam ) ;
-! if( cipherCtx == NULL ) {
-! xmlSecError( XMLSEC_ERRORS_HERE ,
-! NULL ,
-! "PK11_CreateContextBySymKey" ,
-! XMLSEC_ERRORS_R_CRYPTO_FAILED ,
-! XMLSEC_ERRORS_NO_MESSAGE ) ;
-! SECITEM_FreeItem( secParam , PR_TRUE ) ;
-! return(-1);
-! }
-!
-! out = xmlSecBufferGetData(result) ;
-! outSize = xmlSecBufferGetMaxSize(result) ;
-! if( PK11_CipherOp( cipherCtx , out, &midSize , outSize , xmlSecBufferGetData( ctx->material ) , inSize ) != SECSuccess ) {
-! xmlSecError( XMLSEC_ERRORS_HERE ,
-! NULL ,
-! "PK11_CipherOp" ,
-! XMLSEC_ERRORS_R_CRYPTO_FAILED ,
-! XMLSEC_ERRORS_NO_MESSAGE ) ;
-! return(-1);
-! }
-!
-! if( PK11_DigestFinal( cipherCtx , out + midSize , &finSize , outSize - midSize ) != SECSuccess ) {
-! xmlSecError( XMLSEC_ERRORS_HERE ,
-! NULL ,
-! "PK11_DigestFinal" ,
-! XMLSEC_ERRORS_R_CRYPTO_FAILED ,
-! XMLSEC_ERRORS_NO_MESSAGE ) ;
-! return(-1);
-! }
-!
-! if( xmlSecBufferSetSize( result , midSize + finSize ) < 0 ) {
-! xmlSecError( XMLSEC_ERRORS_HERE ,
-! NULL ,
-! "xmlSecBufferSetSize" ,
-! XMLSEC_ERRORS_R_CRYPTO_FAILED ,
-! XMLSEC_ERRORS_NO_MESSAGE ) ;
-! return(-1);
-! }
-!
-! return 0 ;
-! }
-!
-! /**
-! * Block cipher transform final
-! */
-! static int
-! xmlSecNssKeyWrapCtxFinal(
-! xmlSecNssKeyWrapCtxPtr ctx ,
-! xmlSecBufferPtr in ,
-! xmlSecBufferPtr out ,
-! int encrypt ,
-! xmlSecTransformCtxPtr transformCtx
-! ) {
-! PK11SymKey* targetKey ;
-! xmlSecSize blockSize ;
-! xmlSecBufferPtr result ;
-!
-! xmlSecAssert2( ctx != NULL , -1 ) ;
-! xmlSecAssert2( ctx->cipher != CKM_INVALID_MECHANISM , -1 ) ;
-! xmlSecAssert2( ctx->symkey != NULL , -1 ) ;
-! xmlSecAssert2( ctx->keyId != NULL , -1 ) ;
-! xmlSecAssert2( ctx->material != NULL , -1 ) ;
-! xmlSecAssert2( in != NULL , -1 ) ;
-! xmlSecAssert2( out != NULL , -1 ) ;
-! xmlSecAssert2( transformCtx != NULL , -1 ) ;
-!
-! /* read raw key material and append into context */
-! if( xmlSecBufferAppend( ctx->material, xmlSecBufferGetData(in), xmlSecBufferGetSize(in) ) < 0 ) {
-! xmlSecError( XMLSEC_ERRORS_HERE ,
-! NULL ,
-! "xmlSecBufferAppend" ,
-! XMLSEC_ERRORS_R_CRYPTO_FAILED ,
-! XMLSEC_ERRORS_NO_MESSAGE ) ;
-! return(-1);
-! }
-!
-! if( xmlSecBufferRemoveHead( in , xmlSecBufferGetSize(in) ) < 0 ) {
-! xmlSecError( XMLSEC_ERRORS_HERE ,
-! NULL ,
-! "xmlSecBufferRemoveHead" ,
-! XMLSEC_ERRORS_R_CRYPTO_FAILED ,
-! XMLSEC_ERRORS_NO_MESSAGE ) ;
-! return(-1);
-! }
-!
-! /* Now we get all of the key materail */
-! /* from now on we will wrap or unwrap the key */
-! if( ( blockSize = PK11_GetBlockSize( ctx->cipher , NULL ) ) < 0 ) {
-! xmlSecError( XMLSEC_ERRORS_HERE ,
-! NULL ,
-! "PK11_GetBlockSize" ,
-! XMLSEC_ERRORS_R_CRYPTO_FAILED ,
-! XMLSEC_ERRORS_NO_MESSAGE ) ;
-! return(-1);
-! }
-!
-! result = xmlSecBufferCreate( blockSize ) ;
-! if( result == NULL ) {
-! xmlSecError( XMLSEC_ERRORS_HERE ,
-! NULL ,
-! "xmlSecBufferCreate" ,
-! XMLSEC_ERRORS_R_CRYPTO_FAILED ,
-! XMLSEC_ERRORS_NO_MESSAGE ) ;
-! return(-1);
-! }
-!
-! switch( ctx->cipher ) {
-! case CKM_DES3_CBC :
-! if( xmlSecNssKeyWrapDesOp(ctx, encrypt, result) < 0 ) {
-! xmlSecError( XMLSEC_ERRORS_HERE ,
-! NULL ,
-! "xmlSecNssKeyWrapDesOp" ,
-! XMLSEC_ERRORS_R_CRYPTO_FAILED ,
-! XMLSEC_ERRORS_NO_MESSAGE ) ;
-! xmlSecBufferDestroy(result);
-! return(-1);
-! }
-! break ;
-! /* case CKM_NETSCAPE_AES_KEY_WRAP :*/
-! case CKM_AES_CBC :
-! if( xmlSecNssKeyWrapAesOp(ctx, encrypt, result) < 0 ) {
-! xmlSecError( XMLSEC_ERRORS_HERE ,
-! NULL ,
-! "xmlSecNssKeyWrapAesOp" ,
-! XMLSEC_ERRORS_R_CRYPTO_FAILED ,
-! XMLSEC_ERRORS_NO_MESSAGE ) ;
-! xmlSecBufferDestroy(result);
-! return(-1);
-! }
-! break ;
-! }
-!
-! /* Write output */
-! if( xmlSecBufferAppend( out, xmlSecBufferGetData(result), xmlSecBufferGetSize(result) ) < 0 ) {
-! xmlSecError( XMLSEC_ERRORS_HERE ,
-! NULL ,
-! "xmlSecBufferAppend" ,
-! XMLSEC_ERRORS_R_CRYPTO_FAILED ,
-! XMLSEC_ERRORS_NO_MESSAGE ) ;
-! xmlSecBufferDestroy(result);
-! return(-1);
-! }
-! xmlSecBufferDestroy(result);
-!
-! return(0);
-! }
-!
-! static int
-! xmlSecNssKeyWrapExecute(xmlSecTransformPtr transform, int last, xmlSecTransformCtxPtr transformCtx) {
-! xmlSecNssKeyWrapCtxPtr context = NULL ;
-! xmlSecBufferPtr inBuf, outBuf ;
-! int operation ;
-! int rtv ;
-!
-! xmlSecAssert2( xmlSecNssKeyWrapCheckId( transform ), -1 ) ;
-! xmlSecAssert2( xmlSecTransformCheckSize( transform, xmlSecNssKeyWrapSize ), -1 ) ;
-! xmlSecAssert2( ( transform->operation == xmlSecTransformOperationEncrypt ) || ( transform->operation == xmlSecTransformOperationDecrypt ), -1 ) ;
-! xmlSecAssert2( transformCtx != NULL , -1 ) ;
-!
-! context = xmlSecNssKeyWrapGetCtx( transform ) ;
-! if( context == NULL ) {
-! xmlSecError( XMLSEC_ERRORS_HERE ,
-! xmlSecErrorsSafeString( xmlSecTransformGetName( transform ) ) ,
-! "xmlSecNssKeyWrapGetCtx" ,
-! XMLSEC_ERRORS_R_CRYPTO_FAILED ,
-! XMLSEC_ERRORS_NO_MESSAGE ) ;
-! return(-1);
-! }
-!
-! inBuf = &( transform->inBuf ) ;
-! outBuf = &( transform->outBuf ) ;
-!
-! if( transform->status == xmlSecTransformStatusNone ) {
-! transform->status = xmlSecTransformStatusWorking ;
-! }
-!
-! operation = ( transform->operation == xmlSecTransformOperationEncrypt ) ? 1 : 0 ;
-! if( transform->status == xmlSecTransformStatusWorking ) {
-! if( context->material == NULL ) {
-! rtv = xmlSecNssKeyWrapCtxInit( context, inBuf , outBuf , operation , transformCtx ) ;
-! if( rtv < 0 ) {
-! xmlSecError( XMLSEC_ERRORS_HERE ,
-! xmlSecErrorsSafeString( xmlSecTransformGetName( transform ) ) ,
-! "xmlSecNssKeyWrapCtxInit" ,
-! XMLSEC_ERRORS_R_INVALID_STATUS ,
-! XMLSEC_ERRORS_NO_MESSAGE ) ;
-! return(-1);
-! }
-! }
-!
-! if( context->material == NULL && last != 0 ) {
-! xmlSecError( XMLSEC_ERRORS_HERE ,
-! xmlSecErrorsSafeString( xmlSecTransformGetName( transform ) ) ,
-! NULL ,
-! XMLSEC_ERRORS_R_INVALID_STATUS ,
-! "No enough data to intialize transform" ) ;
-! return(-1);
-! }
-!
-! if( context->material != NULL ) {
-! rtv = xmlSecNssKeyWrapCtxUpdate( context, inBuf , outBuf , operation , transformCtx ) ;
-! if( rtv < 0 ) {
-! xmlSecError( XMLSEC_ERRORS_HERE ,
-! xmlSecErrorsSafeString( xmlSecTransformGetName( transform ) ) ,
-! "xmlSecNssKeyWrapCtxUpdate" ,
-! XMLSEC_ERRORS_R_INVALID_STATUS ,
-! XMLSEC_ERRORS_NO_MESSAGE ) ;
-! return(-1);
-! }
-! }
-!
-! if( last ) {
-! rtv = xmlSecNssKeyWrapCtxFinal( context, inBuf , outBuf , operation , transformCtx ) ;
-! if( rtv < 0 ) {
-! xmlSecError( XMLSEC_ERRORS_HERE ,
-! xmlSecErrorsSafeString( xmlSecTransformGetName( transform ) ) ,
-! "xmlSecNssKeyWrapCtxFinal" ,
-! XMLSEC_ERRORS_R_INVALID_STATUS ,
-! XMLSEC_ERRORS_NO_MESSAGE ) ;
-! return(-1);
-! }
-! transform->status = xmlSecTransformStatusFinished ;
-! }
-! } else if( transform->status == xmlSecTransformStatusFinished ) {
-! if( xmlSecBufferGetSize( inBuf ) != 0 ) {
-! xmlSecError( XMLSEC_ERRORS_HERE ,
-! xmlSecErrorsSafeString( xmlSecTransformGetName( transform ) ) ,
-! NULL ,
-! XMLSEC_ERRORS_R_INVALID_STATUS ,
-! "status=%d", transform->status ) ;
-! return(-1);
-! }
-! } else {
-! xmlSecError( XMLSEC_ERRORS_HERE ,
-! xmlSecErrorsSafeString( xmlSecTransformGetName( transform ) ) ,
-! NULL ,
-! XMLSEC_ERRORS_R_INVALID_STATUS ,
-! "status=%d", transform->status ) ;
-! return(-1);
-! }
-!
-! return(0);
-! }
-!
-! #ifndef XMLSEC_NO_AES
-!
-!
-! #ifdef __MINGW32__ // for runtime-pseudo-reloc
-! static struct _xmlSecTransformKlass xmlSecNssKWAes128Klass = {
-! #else
-! static xmlSecTransformKlass xmlSecNssKWAes128Klass = {
-! #endif
-! /* klass/object sizes */
-! sizeof(xmlSecTransformKlass), /* xmlSecSize klassSize */
-! xmlSecNssKeyWrapSize, /* xmlSecSize objSize */
-!
-! xmlSecNameKWAes128, /* const xmlChar* name; */
-! xmlSecHrefKWAes128, /* const xmlChar* href; */
-! xmlSecTransformUsageEncryptionMethod, /* xmlSecAlgorithmUsage usage; */
-!
-! xmlSecNssKeyWrapInitialize, /* xmlSecTransformInitializeMethod initialize; */
-! xmlSecNssKeyWrapFinalize, /* xmlSecTransformFinalizeMethod finalize; */
-! NULL, /* xmlSecTransformNodeReadMethod readNode; */
-! NULL, /* xmlSecTransformNodeWriteMethod writeNode; */
-! xmlSecNssKeyWrapSetKeyReq, /* xmlSecTransformSetKeyMethod setKeyReq; */
-! xmlSecNssKeyWrapSetKey, /* xmlSecTransformSetKeyMethod setKey; */
-! NULL, /* xmlSecTransformValidateMethod validate; */
-! xmlSecTransformDefaultGetDataType, /* xmlSecTransformGetDataTypeMethod getDataType; */
-! xmlSecTransformDefaultPushBin, /* xmlSecTransformPushBinMethod pushBin; */
-! xmlSecTransformDefaultPopBin, /* xmlSecTransformPopBinMethod popBin; */
-! NULL, /* xmlSecTransformPushXmlMethod pushXml; */
-! NULL, /* xmlSecTransformPopXmlMethod popXml; */
-! xmlSecNssKeyWrapExecute, /* xmlSecTransformExecuteMethod execute; */
-!
-! NULL, /* void* reserved0; */
-! NULL, /* void* reserved1; */
-! };
-!
-! #ifdef __MINGW32__ // for runtime-pseudo-reloc
-! static struct _xmlSecTransformKlass xmlSecNssKWAes192Klass = {
-! #else
-! static xmlSecTransformKlass xmlSecNssKWAes192Klass = {
-! #endif
-! /* klass/object sizes */
-! sizeof(xmlSecTransformKlass), /* xmlSecSize klassSize */
-! xmlSecNssKeyWrapSize, /* xmlSecSize objSize */
-!
-! xmlSecNameKWAes192, /* const xmlChar* name; */
-! xmlSecHrefKWAes192, /* const xmlChar* href; */
-! xmlSecTransformUsageEncryptionMethod, /* xmlSecAlgorithmUsage usage; */
-!
-! xmlSecNssKeyWrapInitialize, /* xmlSecTransformInitializeMethod initialize; */
-! xmlSecNssKeyWrapFinalize, /* xmlSecTransformFinalizeMethod finalize; */
-! NULL, /* xmlSecTransformNodeReadMethod readNode; */
-! NULL, /* xmlSecTransformNodeWriteMethod writeNode; */
-! xmlSecNssKeyWrapSetKeyReq, /* xmlSecTransformSetKeyMethod setKeyReq; */
-! xmlSecNssKeyWrapSetKey, /* xmlSecTransformSetKeyMethod setKey; */
-! NULL, /* xmlSecTransformValidateMethod validate; */
-! xmlSecTransformDefaultGetDataType, /* xmlSecTransformGetDataTypeMethod getDataType; */
-! xmlSecTransformDefaultPushBin, /* xmlSecTransformPushBinMethod pushBin; */
-! xmlSecTransformDefaultPopBin, /* xmlSecTransformPopBinMethod popBin; */
-! NULL, /* xmlSecTransformPushXmlMethod pushXml; */
-! NULL, /* xmlSecTransformPopXmlMethod popXml; */
-! xmlSecNssKeyWrapExecute, /* xmlSecTransformExecuteMethod execute; */
-!
-! NULL, /* void* reserved0; */
-! NULL, /* void* reserved1; */
-! };
-!
-! #ifdef __MINGW32__ // for runtime-pseudo-reloc
-! static struct _xmlSecTransformKlass xmlSecNssKWAes256Klass = {
-! #else
-! static xmlSecTransformKlass xmlSecNssKWAes256Klass = {
-! #endif
-! /* klass/object sizes */
-! sizeof(xmlSecTransformKlass), /* xmlSecSize klassSize */
-! xmlSecNssKeyWrapSize, /* xmlSecSize objSize */
-!
-! xmlSecNameKWAes256, /* const xmlChar* name; */
-! xmlSecHrefKWAes256, /* const xmlChar* href; */
-! xmlSecTransformUsageEncryptionMethod, /* xmlSecAlgorithmUsage usage; */
-!
-! xmlSecNssKeyWrapInitialize, /* xmlSecTransformInitializeMethod initialize; */
-! xmlSecNssKeyWrapFinalize, /* xmlSecTransformFinalizeMethod finalize; */
-! NULL, /* xmlSecTransformNodeReadMethod readNode; */
-! NULL, /* xmlSecTransformNodeWriteMethod writeNode; */
-! xmlSecNssKeyWrapSetKeyReq, /* xmlSecTransformSetKeyMethod setKeyReq; */
-! xmlSecNssKeyWrapSetKey, /* xmlSecTransformSetKeyMethod setKey; */
-! NULL, /* xmlSecTransformValidateMethod validate; */
-! xmlSecTransformDefaultGetDataType, /* xmlSecTransformGetDataTypeMethod getDataType; */
-! xmlSecTransformDefaultPushBin, /* xmlSecTransformPushBinMethod pushBin; */
-! xmlSecTransformDefaultPopBin, /* xmlSecTransformPopBinMethod popBin; */
-! NULL, /* xmlSecTransformPushXmlMethod pushXml; */
-! NULL, /* xmlSecTransformPopXmlMethod popXml; */
-! xmlSecNssKeyWrapExecute, /* xmlSecTransformExecuteMethod execute; */
-!
-! NULL, /* void* reserved0; */
-! NULL, /* void* reserved1; */
-! };
-!
-! /**
-! * xmlSecNssTransformKWAes128GetKlass:
-! *
-! * The AES-128 key wrapper transform klass.
-! *
-! * Returns AES-128 key wrapper transform klass.
-! */
-! xmlSecTransformId
-! xmlSecNssTransformKWAes128GetKlass(void) {
-! return(&xmlSecNssKWAes128Klass);
-! }
-!
-! /**
-! * xmlSecNssTransformKWAes192GetKlass:
-! *
-! * The AES-192 key wrapper transform klass.
-! *
-! * Returns AES-192 key wrapper transform klass.
-! */
-! xmlSecTransformId
-! xmlSecNssTransformKWAes192GetKlass(void) {
-! return(&xmlSecNssKWAes192Klass);
-! }
-!
-! /**
-! *
-! * The AES-256 key wrapper transform klass.
-! *
-! * Returns AES-256 key wrapper transform klass.
-! */
-! xmlSecTransformId
-! xmlSecNssTransformKWAes256GetKlass(void) {
-! return(&xmlSecNssKWAes256Klass);
-! }
-!
-! #endif /* XMLSEC_NO_AES */
-!
-!
-! #ifndef XMLSEC_NO_DES
-!
-! #ifdef __MINGW32__ // for runtime-pseudo-reloc
-! static struct _xmlSecTransformKlass xmlSecNssKWDes3Klass = {
-! #else
-! static xmlSecTransformKlass xmlSecNssKWDes3Klass = {
-! #endif
-! /* klass/object sizes */
-! sizeof(xmlSecTransformKlass), /* xmlSecSize klassSize */
-! xmlSecNssKeyWrapSize, /* xmlSecSize objSize */
-!
-! xmlSecNameKWDes3, /* const xmlChar* name; */
-! xmlSecHrefKWDes3, /* const xmlChar* href; */
-! xmlSecTransformUsageEncryptionMethod, /* xmlSecAlgorithmUsage usage; */
-!
-! xmlSecNssKeyWrapInitialize, /* xmlSecTransformInitializeMethod initialize; */
-! xmlSecNssKeyWrapFinalize, /* xmlSecTransformFinalizeMethod finalize; */
-! NULL, /* xmlSecTransformNodeReadMethod readNode; */
-! NULL, /* xmlSecTransformNodeWriteMethod writeNode; */
-! xmlSecNssKeyWrapSetKeyReq, /* xmlSecTransformSetKeyMethod setKeyReq; */
-! xmlSecNssKeyWrapSetKey, /* xmlSecTransformSetKeyMethod setKey; */
-! NULL, /* xmlSecTransformValidateMethod validate; */
-! xmlSecTransformDefaultGetDataType, /* xmlSecTransformGetDataTypeMethod getDataType; */
-! xmlSecTransformDefaultPushBin, /* xmlSecTransformPushBinMethod pushBin; */
-! xmlSecTransformDefaultPopBin, /* xmlSecTransformPopBinMethod popBin; */
-! NULL, /* xmlSecTransformPushXmlMethod pushXml; */
-! NULL, /* xmlSecTransformPopXmlMethod popXml; */
-! xmlSecNssKeyWrapExecute, /* xmlSecTransformExecuteMethod execute; */
-!
-! NULL, /* void* reserved0; */
-! NULL, /* void* reserved1; */
-! };
-!
-! /**
-! * xmlSecNssTransformKWDes3GetKlass:
-! *
-! * The Triple DES key wrapper transform klass.
-! *
-! * Returns Triple DES key wrapper transform klass.
-! */
-! xmlSecTransformId
-! xmlSecNssTransformKWDes3GetKlass(void) {
-! return(&xmlSecNssKWDes3Klass);
-! }
-!
-! #endif /* XMLSEC_NO_DES */
-!
-*** misc/xmlsec1-1.2.6/src/nss/pkikeys.c Wed Mar 17 06:06:45 2004
---- misc/build/xmlsec1-1.2.6/src/nss/pkikeys.c Fri May 11 14:47:20 2007
-***************
-*** 5,10 ****
---- 5,11 ----
- * distribution for preciese wording.
- *
- * Copyright (c) 2003 America Online, Inc. All rights reserved.
-+ * Copyright ...........................
- */
- #include "globals.h"
-
-***************
-*** 24,29 ****
---- 25,31 ----
- #include <xmlsec/nss/crypto.h>
- #include <xmlsec/nss/bignum.h>
- #include <xmlsec/nss/pkikeys.h>
-+ #include <xmlsec/nss/tokens.h>
-
- /**************************************************************************
- *
-***************
-*** 98,111 ****
- {
- xmlSecAssert(ctx != NULL);
- if (ctx->privkey != NULL) {
-! SECKEY_DestroyPrivateKey(ctx->privkey);
-! ctx->privkey = NULL;
- }
-
-! if (ctx->pubkey)
-! {
-! SECKEY_DestroyPublicKey(ctx->pubkey);
-! ctx->pubkey = NULL;
- }
-
- }
---- 100,112 ----
- {
- xmlSecAssert(ctx != NULL);
- if (ctx->privkey != NULL) {
-! SECKEY_DestroyPrivateKey(ctx->privkey);
-! ctx->privkey = NULL;
- }
-
-! if (ctx->pubkey) {
-! SECKEY_DestroyPublicKey(ctx->pubkey);
-! ctx->pubkey = NULL;
- }
-
- }
-***************
-*** 115,143 ****
- xmlSecNssPKIKeyDataCtxPtr ctxSrc)
- {
- xmlSecNSSPKIKeyDataCtxFree(ctxDst);
- if (ctxSrc->privkey != NULL) {
-! ctxDst->privkey = SECKEY_CopyPrivateKey(ctxSrc->privkey);
-! if(ctxDst->privkey == NULL) {
-! xmlSecError(XMLSEC_ERRORS_HERE,
-! NULL,
-! "SECKEY_CopyPrivateKey",
-! XMLSEC_ERRORS_R_CRYPTO_FAILED,
-! XMLSEC_ERRORS_NO_MESSAGE);
-! return(-1);
-! }
- }
-
- if (ctxSrc->pubkey != NULL) {
-! ctxDst->pubkey = SECKEY_CopyPublicKey(ctxSrc->pubkey);
-! if(ctxDst->pubkey == NULL) {
-! xmlSecError(XMLSEC_ERRORS_HERE,
-! NULL,
-! "SECKEY_CopyPublicKey",
-! XMLSEC_ERRORS_R_CRYPTO_FAILED,
-! XMLSEC_ERRORS_NO_MESSAGE);
-! return(-1);
-! }
- }
- return (0);
- }
-
---- 116,147 ----
- xmlSecNssPKIKeyDataCtxPtr ctxSrc)
- {
- xmlSecNSSPKIKeyDataCtxFree(ctxDst);
-+ ctxDst->privkey = NULL ;
-+ ctxDst->pubkey = NULL ;
- if (ctxSrc->privkey != NULL) {
-! ctxDst->privkey = SECKEY_CopyPrivateKey(ctxSrc->privkey);
-! if(ctxDst->privkey == NULL) {
-! xmlSecError(XMLSEC_ERRORS_HERE,
-! NULL,
-! "SECKEY_CopyPrivateKey",
-! XMLSEC_ERRORS_R_CRYPTO_FAILED,
-! "error code=%d", PORT_GetError());
-! return(-1);
-! }
- }
-
- if (ctxSrc->pubkey != NULL) {
-! ctxDst->pubkey = SECKEY_CopyPublicKey(ctxSrc->pubkey);
-! if(ctxDst->pubkey == NULL) {
-! xmlSecError(XMLSEC_ERRORS_HERE,
-! NULL,
-! "SECKEY_CopyPublicKey",
-! XMLSEC_ERRORS_R_CRYPTO_FAILED,
-! "error code=%d", PORT_GetError());
-! return(-1);
-! }
- }
-+
- return (0);
- }
-
-***************
-*** 147,166 ****
- SECKEYPublicKey *pubkey)
- {
- xmlSecNssPKIKeyDataCtxPtr ctx;
-
- xmlSecAssert2(xmlSecKeyDataIsValid(data), -1);
- xmlSecAssert2(xmlSecKeyDataCheckSize(data, xmlSecNssPKIKeyDataSize), -1);
-
- ctx = xmlSecNssPKIKeyDataGetCtx(data);
- xmlSecAssert2(ctx != NULL, -1);
-
- if (ctx->privkey) {
-! SECKEY_DestroyPrivateKey(ctx->privkey);
- }
- ctx->privkey = privkey;
-
- if (ctx->pubkey) {
-! SECKEY_DestroyPublicKey(ctx->pubkey);
- }
- ctx->pubkey = pubkey;
-
---- 151,191 ----
- SECKEYPublicKey *pubkey)
- {
- xmlSecNssPKIKeyDataCtxPtr ctx;
-+ KeyType pubType = nullKey ;
-+ KeyType priType = nullKey ;
-
- xmlSecAssert2(xmlSecKeyDataIsValid(data), -1);
- xmlSecAssert2(xmlSecKeyDataCheckSize(data, xmlSecNssPKIKeyDataSize), -1);
-
-+ if( privkey != NULL ) {
-+ priType = SECKEY_GetPrivateKeyType( privkey ) ;
-+ }
-+
-+ if( pubkey != NULL ) {
-+ pubType = SECKEY_GetPublicKeyType( pubkey ) ;
-+ }
-+
-+ if( priType != nullKey && pubType != nullKey ) {
-+ if( pubType != priType ) {
-+ xmlSecError( XMLSEC_ERRORS_HERE ,
-+ NULL ,
-+ NULL ,
-+ XMLSEC_ERRORS_R_CRYPTO_FAILED ,
-+ "different type of private and public key" ) ;
-+ return -1 ;
-+ }
-+ }
-+
- ctx = xmlSecNssPKIKeyDataGetCtx(data);
- xmlSecAssert2(ctx != NULL, -1);
-
- if (ctx->privkey) {
-! SECKEY_DestroyPrivateKey(ctx->privkey);
- }
- ctx->privkey = privkey;
-
- if (ctx->pubkey) {
-! SECKEY_DestroyPublicKey(ctx->pubkey);
- }
- ctx->pubkey = pubkey;
-
-***************
-*** 183,243 ****
- {
- xmlSecKeyDataPtr data = NULL;
- int ret;
-! KeyType kt;
-!
-! if (pubkey != NULL) {
-! kt = SECKEY_GetPublicKeyType(pubkey);
-! } else {
-! kt = SECKEY_GetPrivateKeyType(privkey);
-! pubkey = SECKEY_ConvertToPublicKey(privkey);
-! }
-
-! switch(kt) {
- #ifndef XMLSEC_NO_RSA
- case rsaKey:
-! data = xmlSecKeyDataCreate(xmlSecNssKeyDataRsaId);
-! if(data == NULL) {
-! xmlSecError(XMLSEC_ERRORS_HERE,
-! NULL,
-! "xmlSecKeyDataCreate",
-! XMLSEC_ERRORS_R_XMLSEC_FAILED,
-! "xmlSecNssKeyDataRsaId");
-! return(NULL);
-! }
-! break;
- #endif /* XMLSEC_NO_RSA */
- #ifndef XMLSEC_NO_DSA
- case dsaKey:
-! data = xmlSecKeyDataCreate(xmlSecNssKeyDataDsaId);
-! if(data == NULL) {
-! xmlSecError(XMLSEC_ERRORS_HERE,
-! NULL,
-! "xmlSecKeyDataCreate",
-! XMLSEC_ERRORS_R_XMLSEC_FAILED,
-! "xmlSecNssKeyDataDsaId");
-! return(NULL);
-! }
-! break;
- #endif /* XMLSEC_NO_DSA */
- default:
-! xmlSecError(XMLSEC_ERRORS_HERE,
- NULL,
- NULL,
- XMLSEC_ERRORS_R_INVALID_TYPE,
-! "PKI key type %d not supported", kt);
-! return(NULL);
- }
-
- xmlSecAssert2(data != NULL, NULL);
- ret = xmlSecNssPKIKeyDataAdoptKey(data, privkey, pubkey);
- if(ret < 0) {
-! xmlSecError(XMLSEC_ERRORS_HERE,
- NULL,
- "xmlSecNssPKIKeyDataAdoptKey",
- XMLSEC_ERRORS_R_XMLSEC_FAILED,
- XMLSEC_ERRORS_NO_MESSAGE);
-! xmlSecKeyDataDestroy(data);
-! return(NULL);
- }
- return(data);
- }
---- 208,282 ----
- {
- xmlSecKeyDataPtr data = NULL;
- int ret;
-! KeyType pubType = nullKey ;
-! KeyType priType = nullKey ;
-
-! if( privkey != NULL ) {
-! priType = SECKEY_GetPrivateKeyType( privkey ) ;
-! }
-!
-! if( pubkey != NULL ) {
-! pubType = SECKEY_GetPublicKeyType( pubkey ) ;
-! }
-!
-! if( priType != nullKey && pubType != nullKey ) {
-! if( pubType != priType ) {
-! xmlSecError( XMLSEC_ERRORS_HERE ,
-! NULL ,
-! NULL ,
-! XMLSEC_ERRORS_R_CRYPTO_FAILED ,
-! "different type of private and public key" ) ;
-! return( NULL ) ;
-! }
-! }
-!
-! pubType = priType != nullKey ? priType : pubType ;
-! switch(pubType) {
- #ifndef XMLSEC_NO_RSA
- case rsaKey:
-! data = xmlSecKeyDataCreate(xmlSecNssKeyDataRsaId);
-! if(data == NULL) {
-! xmlSecError(XMLSEC_ERRORS_HERE,
-! NULL,
-! "xmlSecKeyDataCreate",
-! XMLSEC_ERRORS_R_XMLSEC_FAILED,
-! "xmlSecNssKeyDataRsaId");
-! return(NULL);
-! }
-! break;
- #endif /* XMLSEC_NO_RSA */
- #ifndef XMLSEC_NO_DSA
- case dsaKey:
-! data = xmlSecKeyDataCreate(xmlSecNssKeyDataDsaId);
-! if(data == NULL) {
-! xmlSecError(XMLSEC_ERRORS_HERE,
-! NULL,
-! "xmlSecKeyDataCreate",
-! XMLSEC_ERRORS_R_XMLSEC_FAILED,
-! "xmlSecNssKeyDataDsaId");
-! return(NULL);
-! }
-! break;
- #endif /* XMLSEC_NO_DSA */
- default:
-! xmlSecError(XMLSEC_ERRORS_HERE,
- NULL,
- NULL,
- XMLSEC_ERRORS_R_INVALID_TYPE,
-! "PKI key type %d not supported", pubType);
-! return(NULL);
- }
-
- xmlSecAssert2(data != NULL, NULL);
- ret = xmlSecNssPKIKeyDataAdoptKey(data, privkey, pubkey);
- if(ret < 0) {
-! xmlSecError(XMLSEC_ERRORS_HERE,
- NULL,
- "xmlSecNssPKIKeyDataAdoptKey",
- XMLSEC_ERRORS_R_XMLSEC_FAILED,
- XMLSEC_ERRORS_NO_MESSAGE);
-! xmlSecKeyDataDestroy(data);
-! return(NULL);
- }
- return(data);
- }
-***************
-*** 263,269 ****
- xmlSecAssert2(ctx != NULL, NULL);
- xmlSecAssert2(ctx->pubkey != NULL, NULL);
-
-! ret = SECKEY_CopyPublicKey(ctx->pubkey);
- return(ret);
- }
-
---- 302,308 ----
- xmlSecAssert2(ctx != NULL, NULL);
- xmlSecAssert2(ctx->pubkey != NULL, NULL);
-
-! ret = SECKEY_CopyPublicKey(ctx->pubkey);
- return(ret);
- }
-
-***************
-*** 312,320 ****
- xmlSecAssert2(ctx != NULL, nullKey);
-
- if (ctx->pubkey != NULL) {
-! kt = SECKEY_GetPublicKeyType(ctx->pubkey);
- } else {
-! kt = SECKEY_GetPrivateKeyType(ctx->privkey);
- }
- return(kt);
- }
---- 351,359 ----
- xmlSecAssert2(ctx != NULL, nullKey);
-
- if (ctx->pubkey != NULL) {
-! kt = SECKEY_GetPublicKeyType(ctx->pubkey);
- } else {
-! kt = SECKEY_GetPrivateKeyType(ctx->privkey);
- }
- return(kt);
- }
-***************
-*** 453,459 ****
---- 492,502 ----
- static void xmlSecNssKeyDataDsaDebugXmlDump (xmlSecKeyDataPtr data,
- FILE* output);
-
-+ #ifdef __MINGW32__ // for runtime-pseudo-reloc
-+ static struct _xmlSecKeyDataKlass xmlSecNssKeyDataDsaKlass = {
-+ #else
- static xmlSecKeyDataKlass xmlSecNssKeyDataDsaKlass = {
-+ #endif
- sizeof(xmlSecKeyDataKlass),
- xmlSecNssPKIKeyDataSize,
-
-***************
-*** 553,565 ****
- goto done;
- }
-
-! slot = PK11_GetBestSlot(CKM_DSA, NULL);
- if(slot == NULL) {
- xmlSecError(XMLSEC_ERRORS_HERE,
- xmlSecErrorsSafeString(xmlSecKeyDataKlassGetName(id)),
-! "PK11_GetBestSlot",
- XMLSEC_ERRORS_R_CRYPTO_FAILED,
-! XMLSEC_ERRORS_NO_MESSAGE);
- ret = -1;
- goto done;
- }
---- 596,608 ----
- goto done;
- }
-
-! slot = xmlSecNssSlotGet(CKM_DSA);
- if(slot == NULL) {
- xmlSecError(XMLSEC_ERRORS_HERE,
- xmlSecErrorsSafeString(xmlSecKeyDataKlassGetName(id)),
-! "xmlSecNssSlotGet",
- XMLSEC_ERRORS_R_CRYPTO_FAILED,
-! "error code=%d", PORT_GetError());
- ret = -1;
- goto done;
- }
-***************
-*** 570,576 ****
- xmlSecErrorsSafeString(xmlSecKeyDataKlassGetName(id)),
- "PORT_NewArena",
- XMLSEC_ERRORS_R_CRYPTO_FAILED,
-! XMLSEC_ERRORS_NO_MESSAGE);
- ret = -1;
- goto done;
- }
---- 613,619 ----
- xmlSecErrorsSafeString(xmlSecKeyDataKlassGetName(id)),
- "PORT_NewArena",
- XMLSEC_ERRORS_R_CRYPTO_FAILED,
-! "error code=%d", PORT_GetError());
- ret = -1;
- goto done;
- }
-***************
-*** 582,588 ****
- xmlSecErrorsSafeString(xmlSecKeyDataKlassGetName(id)),
- "PORT_ArenaZAlloc",
- XMLSEC_ERRORS_R_CRYPTO_FAILED,
-! XMLSEC_ERRORS_NO_MESSAGE);
- PORT_FreeArena(arena, PR_FALSE);
- ret = -1;
- goto done;
---- 625,631 ----
- xmlSecErrorsSafeString(xmlSecKeyDataKlassGetName(id)),
- "PORT_ArenaZAlloc",
- XMLSEC_ERRORS_R_CRYPTO_FAILED,
-! "error code=%d", PORT_GetError());
- PORT_FreeArena(arena, PR_FALSE);
- ret = -1;
- goto done;
-***************
-*** 750,770 ****
- goto done;
- }
- data = NULL;
--
- ret = 0;
-
- done:
- if (slot != NULL) {
-! PK11_FreeSlot(slot);
- }
-! if (ret != 0) {
-! if (pubkey != NULL) {
-! SECKEY_DestroyPublicKey(pubkey);
-! }
-! if (data != NULL) {
-! xmlSecKeyDataDestroy(data);
-! }
- }
- return(ret);
- }
-
---- 793,813 ----
- goto done;
- }
- data = NULL;
- ret = 0;
-
- done:
- if (slot != NULL) {
-! PK11_FreeSlot(slot);
- }
-!
-! if (pubkey != NULL) {
-! SECKEY_DestroyPublicKey(pubkey);
-! }
-!
-! if (data != NULL) {
-! xmlSecKeyDataDestroy(data);
- }
-+
- return(ret);
- }
-
-***************
-*** 783,789 ****
-
- ctx = xmlSecNssPKIKeyDataGetCtx(xmlSecKeyGetValue(key));
- xmlSecAssert2(ctx != NULL, -1);
-! xmlSecAssert2(SECKEY_GetPublicKeyType(ctx->pubkey) == dsaKey, -1);
-
- if(((xmlSecKeyDataTypePublic | xmlSecKeyDataTypePrivate) & keyInfoCtx->keyReq.keyType) == 0) {
- /* we can have only private key or public key */
---- 826,832 ----
-
- ctx = xmlSecNssPKIKeyDataGetCtx(xmlSecKeyGetValue(key));
- xmlSecAssert2(ctx != NULL, -1);
-! /* xmlSecAssert2(SECKEY_GetPublicKeyType(ctx->pubkey) == dsaKey, -1);*/
-
- if(((xmlSecKeyDataTypePublic | xmlSecKeyDataTypePrivate) & keyInfoCtx->keyReq.keyType) == 0) {
- /* we can have only private key or public key */
-***************
-*** 905,911 ****
- xmlSecErrorsSafeString(xmlSecKeyDataGetName(data)),
- "PK11_PQG_ParamGen",
- XMLSEC_ERRORS_R_CRYPTO_FAILED,
-! "size=%d", sizeBits);
- goto done;
- }
-
---- 948,955 ----
- xmlSecErrorsSafeString(xmlSecKeyDataGetName(data)),
- "PK11_PQG_ParamGen",
- XMLSEC_ERRORS_R_CRYPTO_FAILED,
-! "size=%d, error code=%d", sizeBits, PORT_GetError());
-! ret = -1;
- goto done;
- }
-
-***************
-*** 915,925 ****
- xmlSecErrorsSafeString(xmlSecKeyDataGetName(data)),
- "PK11_PQG_VerifyParams",
- XMLSEC_ERRORS_R_CRYPTO_FAILED,
-! "size=%d", sizeBits);
- goto done;
- }
-
-! slot = PK11_GetBestSlot(CKM_DSA_KEY_PAIR_GEN, NULL);
- PK11_Authenticate(slot, PR_TRUE, NULL /* default pwd callback */);
- privkey = PK11_GenerateKeyPair(slot, CKM_DSA_KEY_PAIR_GEN, pqgParams,
- &pubkey, PR_FALSE, PR_TRUE, NULL);
---- 959,970 ----
- xmlSecErrorsSafeString(xmlSecKeyDataGetName(data)),
- "PK11_PQG_VerifyParams",
- XMLSEC_ERRORS_R_CRYPTO_FAILED,
-! "size=%d, error code=%d", sizeBits, PORT_GetError());
-! ret = -1;
- goto done;
- }
-
-! slot = xmlSecNssSlotGet(CKM_DSA_KEY_PAIR_GEN);
- PK11_Authenticate(slot, PR_TRUE, NULL /* default pwd callback */);
- privkey = PK11_GenerateKeyPair(slot, CKM_DSA_KEY_PAIR_GEN, pqgParams,
- &pubkey, PR_FALSE, PR_TRUE, NULL);
-***************
-*** 929,936 ****
- xmlSecErrorsSafeString(xmlSecKeyDataGetName(data)),
- "PK11_GenerateKeyPair",
- XMLSEC_ERRORS_R_CRYPTO_FAILED,
-! XMLSEC_ERRORS_NO_MESSAGE);
-
- goto done;
- }
-
---- 974,982 ----
- xmlSecErrorsSafeString(xmlSecKeyDataGetName(data)),
- "PK11_GenerateKeyPair",
- XMLSEC_ERRORS_R_CRYPTO_FAILED,
-! "error code=%d", PORT_GetError());
-
-+ ret = -1;
- goto done;
- }
-
-***************
-*** 943,971 ****
- XMLSEC_ERRORS_NO_MESSAGE);
- goto done;
- }
-!
- ret = 0;
-
- done:
- if (slot != NULL) {
-! PK11_FreeSlot(slot);
- }
- if (pqgParams != NULL) {
-! PK11_PQG_DestroyParams(pqgParams);
- }
- if (pqgVerify != NULL) {
-! PK11_PQG_DestroyVerify(pqgVerify);
-! }
-! if (ret == 0) {
-! return (0);
- }
- if (pubkey != NULL) {
-! SECKEY_DestroyPublicKey(pubkey);
- }
- if (privkey != NULL) {
-! SECKEY_DestroyPrivateKey(privkey);
- }
-! return(-1);
- }
-
- static xmlSecKeyDataType
---- 989,1020 ----
- XMLSEC_ERRORS_NO_MESSAGE);
- goto done;
- }
-! privkey = NULL ;
-! pubkey = NULL ;
- ret = 0;
-
- done:
- if (slot != NULL) {
-! PK11_FreeSlot(slot);
- }
-+
- if (pqgParams != NULL) {
-! PK11_PQG_DestroyParams(pqgParams);
- }
-+
- if (pqgVerify != NULL) {
-! PK11_PQG_DestroyVerify(pqgVerify);
- }
-+
- if (pubkey != NULL) {
-! SECKEY_DestroyPublicKey(pubkey);
- }
-+
- if (privkey != NULL) {
-! SECKEY_DestroyPrivateKey(privkey);
- }
-!
-! return(ret);
- }
-
- static xmlSecKeyDataType
-***************
-*** 975,985 ****
- xmlSecAssert2(xmlSecKeyDataCheckId(data, xmlSecNssKeyDataDsaId), xmlSecKeyDataTypeUnknown);
- ctx = xmlSecNssPKIKeyDataGetCtx(data);
- xmlSecAssert2(ctx != NULL, -1);
-! xmlSecAssert2(SECKEY_GetPublicKeyType(ctx->pubkey) == dsaKey, -1);
- if (ctx->privkey != NULL) {
-! return(xmlSecKeyDataTypePrivate | xmlSecKeyDataTypePublic);
-! } else {
-! return(xmlSecKeyDataTypePublic);
- }
++#ifndef __XMLSEC_NSS_AKMNGR_H__
++#define __XMLSEC_NSS_AKMNGR_H__
++
++#include <nss.h>
++#include <nspr.h>
++#include <pk11func.h>
++#include <cert.h>
++
++#include <xmlsec/xmlsec.h>
++#include <xmlsec/keys.h>
++#include <xmlsec/transforms.h>
++
++#ifdef __cplusplus
++extern "C" {
++#endif /* __cplusplus */
++
++XMLSEC_CRYPTO_EXPORT xmlSecKeysMngrPtr
++xmlSecNssAppliedKeysMngrCreate(
++ PK11SlotInfo** slots,
++ int cSlots,
++ CERTCertDBHandle* handler
++) ;
++
++XMLSEC_CRYPTO_EXPORT int
++xmlSecNssAppliedKeysMngrSymKeyLoad(
++ xmlSecKeysMngrPtr mngr ,
++ PK11SymKey* symKey
++) ;
++
++XMLSEC_CRYPTO_EXPORT int
++xmlSecNssAppliedKeysMngrPubKeyLoad(
++ xmlSecKeysMngrPtr mngr ,
++ SECKEYPublicKey* pubKey
++) ;
++
++XMLSEC_CRYPTO_EXPORT int
++xmlSecNssAppliedKeysMngrPriKeyLoad(
++ xmlSecKeysMngrPtr mngr ,
++ SECKEYPrivateKey* priKey
++) ;
++
++#ifdef __cplusplus
++}
++#endif /* __cplusplus */
++
++#endif /* __XMLSEC_NSS_AKMNGR_H__ */
++
++
+--- misc/xmlsec1-1.2.6/include/xmlsec/nss/app.h 2004-01-12 22:06:14.000000000 +0100
++++ misc/build/xmlsec1-1.2.6/include/xmlsec/nss/app.h 2008-06-29 23:44:19.000000000 +0200
+@@ -22,6 +22,9 @@
+ #include <xmlsec/keysmngr.h>
+ #include <xmlsec/transforms.h>
+
++#include <xmlsec/nss/tokens.h>
++#include <xmlsec/nss/akmngr.h>
++
+ /**
+ * Init/shutdown
+ */
+@@ -34,6 +37,8 @@
+ XMLSEC_CRYPTO_EXPORT int xmlSecNssAppDefaultKeysMngrInit (xmlSecKeysMngrPtr mngr);
+ XMLSEC_CRYPTO_EXPORT int xmlSecNssAppDefaultKeysMngrAdoptKey(xmlSecKeysMngrPtr mngr,
+ xmlSecKeyPtr key);
++XMLSEC_CRYPTO_EXPORT int xmlSecNssAppDefaultKeysMngrAdoptKeySlot(xmlSecKeysMngrPtr mngr,
++ xmlSecNssKeySlotPtr keySlot);
+ XMLSEC_CRYPTO_EXPORT int xmlSecNssAppDefaultKeysMngrLoad (xmlSecKeysMngrPtr mngr,
+ const char* uri);
+ XMLSEC_CRYPTO_EXPORT int xmlSecNssAppDefaultKeysMngrSave (xmlSecKeysMngrPtr mngr,
+--- misc/xmlsec1-1.2.6/include/xmlsec/nss/ciphers.h 2008-06-29 23:44:39.000000000 +0200
++++ misc/build/xmlsec1-1.2.6/include/xmlsec/nss/ciphers.h 2008-06-29 23:44:19.000000000 +0200
+@@ -1 +1,35 @@
+-dummy
++/**
++ * XMLSec library
++ *
++ * This is free software; see Copyright file in the source
++ * distribution for preciese wording.
++ *
++ * Copyright ..........................
++ */
++#ifndef __XMLSEC_NSS_CIPHERS_H__
++#define __XMLSEC_NSS_CIPHERS_H__
++
++#ifdef __cplusplus
++extern "C" {
++#endif /* __cplusplus */
++
++#include <xmlsec/xmlsec.h>
++#include <xmlsec/keys.h>
++#include <xmlsec/transforms.h>
++
++
++XMLSEC_CRYPTO_EXPORT int xmlSecNssSymKeyDataAdoptKey( xmlSecKeyDataPtr data,
++ PK11SymKey* symkey ) ;
++
++XMLSEC_CRYPTO_EXPORT xmlSecKeyDataPtr xmlSecNssSymKeyDataKeyAdopt( PK11SymKey* symKey ) ;
++
++XMLSEC_CRYPTO_EXPORT PK11SymKey* xmlSecNssSymKeyDataGetKey(xmlSecKeyDataPtr data);
++
++
++#ifdef __cplusplus
++}
++#endif /* __cplusplus */
++
++#endif /* __XMLSEC_NSS_CIPHERS_H__ */
++
++
+--- misc/xmlsec1-1.2.6/include/xmlsec/nss/crypto.h 2004-01-12 22:06:14.000000000 +0100
++++ misc/build/xmlsec1-1.2.6/include/xmlsec/nss/crypto.h 2008-06-29 23:44:19.000000000 +0200
+@@ -264,6 +264,15 @@
+ xmlSecNssTransformRsaPkcs1GetKlass()
+ XMLSEC_CRYPTO_EXPORT xmlSecTransformId xmlSecNssTransformRsaPkcs1GetKlass(void);
+
++/**
++ * xmlSecNssTransformRsaOaepId:
++ *
++ * The RSA OAEP key transport transform klass.
++ */
++#define xmlSecNssTransformRsaOaepId \
++ xmlSecNssTransformRsaOaepGetKlass()
++XMLSEC_CRYPTO_EXPORT xmlSecTransformId xmlSecNssTransformRsaOaepGetKlass(void);
++
+ #endif /* XMLSEC_NO_RSA */
+
+
+--- misc/xmlsec1-1.2.6/include/xmlsec/nss/keysstore.h 2003-07-30 04:46:35.000000000 +0200
++++ misc/build/xmlsec1-1.2.6/include/xmlsec/nss/keysstore.h 2008-06-29 23:44:19.000000000 +0200
+@@ -16,6 +16,8 @@
+ #endif /* __cplusplus */
+
+ #include <xmlsec/xmlsec.h>
++#include <xmlsec/keysmngr.h>
++#include <xmlsec/nss/tokens.h>
+
+ /****************************************************************************
+ *
+@@ -31,6 +33,8 @@
+ XMLSEC_CRYPTO_EXPORT xmlSecKeyStoreId xmlSecNssKeysStoreGetKlass (void);
+ XMLSEC_CRYPTO_EXPORT int xmlSecNssKeysStoreAdoptKey (xmlSecKeyStorePtr store,
+ xmlSecKeyPtr key);
++XMLSEC_CRYPTO_EXPORT int xmlSecNssKeysStoreAdoptKeySlot(xmlSecKeyStorePtr store,
++ xmlSecNssKeySlotPtr keySlot);
+ XMLSEC_CRYPTO_EXPORT int xmlSecNssKeysStoreLoad (xmlSecKeyStorePtr store,
+ const char *uri,
+ xmlSecKeysMngrPtr keysMngr);
+--- misc/xmlsec1-1.2.6/include/xmlsec/nss/tokens.h 2008-06-29 23:44:39.000000000 +0200
++++ misc/build/xmlsec1-1.2.6/include/xmlsec/nss/tokens.h 2008-06-29 23:44:19.000000000 +0200
+@@ -1 +1,182 @@
+-dummy
++/**
++ * XMLSec library
++ *
++ * This is free software; see Copyright file in the source
++ * distribution for preciese wording.
++ *
++ * Copyright (c) 2003 Sun Microsystems, Inc. All rights reserved.
++ *
++ * Contributor(s): _____________________________
++ *
++ */
++#ifndef __XMLSEC_NSS_TOKENS_H__
++#define __XMLSEC_NSS_TOKENS_H__
++
++#include <string.h>
++
++#include <nss.h>
++#include <pk11func.h>
++
++#include <xmlsec/xmlsec.h>
++#include <xmlsec/list.h>
++
++#ifdef __cplusplus
++extern "C" {
++#endif /* __cplusplus */
++
++/**
++ * xmlSecNssKeySlotListId
++ *
++ * The crypto mechanism list klass
++ */
++#define xmlSecNssKeySlotListId xmlSecNssKeySlotListGetKlass()
++XMLSEC_CRYPTO_EXPORT xmlSecPtrListId xmlSecNssKeySlotListGetKlass( void ) ;
++
++/*******************************************
++ * KeySlot interfaces
++ *******************************************/
++/**
++ * Internal NSS key slot data
++ * @mechanismList: the mechanisms that the slot bound with.
++ * @slot: the pkcs slot
++ *
++ * This context is located after xmlSecPtrList
++ */
++typedef struct _xmlSecNssKeySlot xmlSecNssKeySlot ;
++typedef struct _xmlSecNssKeySlot* xmlSecNssKeySlotPtr ;
++
++struct _xmlSecNssKeySlot {
++ CK_MECHANISM_TYPE_PTR mechanismList ; /* mech. array, NULL ternimated */
++ PK11SlotInfo* slot ;
++} ;
++
++XMLSEC_CRYPTO_EXPORT int
++xmlSecNssKeySlotSetMechList(
++ xmlSecNssKeySlotPtr keySlot ,
++ CK_MECHANISM_TYPE_PTR mechanismList
++) ;
++
++XMLSEC_CRYPTO_EXPORT int
++xmlSecNssKeySlotEnableMech(
++ xmlSecNssKeySlotPtr keySlot ,
++ CK_MECHANISM_TYPE mechanism
++) ;
++
++XMLSEC_CRYPTO_EXPORT int
++xmlSecNssKeySlotDisableMech(
++ xmlSecNssKeySlotPtr keySlot ,
++ CK_MECHANISM_TYPE mechanism
++) ;
++
++XMLSEC_CRYPTO_EXPORT CK_MECHANISM_TYPE_PTR
++xmlSecNssKeySlotGetMechList(
++ xmlSecNssKeySlotPtr keySlot
++) ;
++
++XMLSEC_CRYPTO_EXPORT int
++xmlSecNssKeySlotSetSlot(
++ xmlSecNssKeySlotPtr keySlot ,
++ PK11SlotInfo* slot
++) ;
++
++XMLSEC_CRYPTO_EXPORT int
++xmlSecNssKeySlotInitialize(
++ xmlSecNssKeySlotPtr keySlot ,
++ PK11SlotInfo* slot
++) ;
++
++XMLSEC_CRYPTO_EXPORT void
++xmlSecNssKeySlotFinalize(
++ xmlSecNssKeySlotPtr keySlot
++) ;
++
++XMLSEC_CRYPTO_EXPORT PK11SlotInfo*
++xmlSecNssKeySlotGetSlot(
++ xmlSecNssKeySlotPtr keySlot
++) ;
++
++XMLSEC_CRYPTO_EXPORT xmlSecNssKeySlotPtr
++xmlSecNssKeySlotCreate() ;
++
++XMLSEC_CRYPTO_EXPORT int
++xmlSecNssKeySlotCopy(
++ xmlSecNssKeySlotPtr newKeySlot ,
++ xmlSecNssKeySlotPtr keySlot
++) ;
++
++XMLSEC_CRYPTO_EXPORT xmlSecNssKeySlotPtr
++xmlSecNssKeySlotDuplicate(
++ xmlSecNssKeySlotPtr keySlot
++) ;
++
++XMLSEC_CRYPTO_EXPORT void
++xmlSecNssKeySlotDestroy(
++ xmlSecNssKeySlotPtr keySlot
++) ;
++
++XMLSEC_CRYPTO_EXPORT int
++xmlSecNssKeySlotBindMech(
++ xmlSecNssKeySlotPtr keySlot ,
++ CK_MECHANISM_TYPE type
++) ;
++
++XMLSEC_CRYPTO_EXPORT int
++xmlSecNssKeySlotSupportMech(
++ xmlSecNssKeySlotPtr keySlot ,
++ CK_MECHANISM_TYPE type
++) ;
++
++
++/************************************************************************
++ * PKCS#11 crypto token interfaces
++ *
++ * A PKCS#11 slot repository will be defined internally. From the
++ * repository, a user can specify a particular slot for a certain crypto
++ * mechanism.
++ *
++ * In some situation, some cryptographic operation should act in a user
++ * designated devices. The interfaces defined here provide the way. If
++ * the user do not initialize the repository distinctly, the interfaces
++ * use the default functions provided by NSS itself.
++ *
++ ************************************************************************/
++/**
++ * Initialize NSS pkcs#11 slot repository
++ *
++ * Returns 0 if success or -1 if an error occurs.
++ */
++XMLSEC_CRYPTO_EXPORT int xmlSecNssSlotInitialize( void ) ;
++
++/**
++ * Shutdown and destroy NSS pkcs#11 slot repository
++ */
++XMLSEC_CRYPTO_EXPORT void xmlSecNssSlotShutdown() ;
++
++/**
++ * Get PKCS#11 slot handler
++ * @type the mechanism that the slot must support.
++ *
++ * Returns a pointer to PKCS#11 slot or NULL if an error occurs.
++ *
++ * Notes: The returned handler must be destroied distinctly.
++ */
++XMLSEC_CRYPTO_EXPORT PK11SlotInfo* xmlSecNssSlotGet( CK_MECHANISM_TYPE type ) ;
++
++/**
++ * Adopt a pkcs#11 slot with a mechanism into the repository
++ * @slot: the pkcs#11 slot.
++ * @mech: the mechanism.
++ *
++ * If @mech is available( @mech != CKM_INVALID_MECHANISM ), every operation with
++ * this mechanism only can perform on the @slot.
++ *
++ * Returns 0 if success or -1 if an error occurs.
++ */
++XMLSEC_CRYPTO_EXPORT int xmlSecNssSlotAdopt( PK11SlotInfo* slot, CK_MECHANISM_TYPE mech ) ;
++
++#ifdef __cplusplus
++}
++#endif /* __cplusplus */
++
++#endif /* __XMLSEC_NSS_TOKENS_H__ */
++
+--- misc/xmlsec1-1.2.6/libxml2-config 2008-06-29 23:44:40.000000000 +0200
++++ misc/build/xmlsec1-1.2.6/libxml2-config 2008-06-29 23:44:19.000000000 +0200
+@@ -1 +1,48 @@
+-dummy
++#! /bin/sh
++
++if test "$SYSTEM_LIBXML" = "YES"
++then xml2-config "$@"; exit 0
++fi
++
++prefix=${SOLARVERSION}/${INPATH}
++includedir=${SOLARVERSION}/${INPATH}/inc${UPDMINOREXT}/external
++libdir=${SOLARVERSION}/${INPATH}/lib${UPDMINOREXT}
++
++while test $# -gt 0; do
++ case "$1" in
++ -*=*) optarg=`echo "$1" | sed 's/[-_a-zA-Z0-9]*=//'` ;;
++ *) optarg= ;;
++ esac
++
++ case "$1" in
++ --prefix=*)
++ prefix=$optarg
++ includedir=$prefix/include
++ libdir=$prefix/lib
++ ;;
++
++ --prefix)
++ echo $prefix
++ ;;
++
++ --version)
++ echo 2.5.4
++ exit 0
++ ;;
++
++ --cflags)
++ echo -I${includedir}
++ ;;
++
++ --libs)
++ echo -L${libdir} ${LIBXML2LIB} ${ZLIB3RDLIB} -lm
++ ;;
++
++ *)
++ exit 1
++ ;;
++ esac
++ shift
++done
++
++exit 0
+--- misc/xmlsec1-1.2.6/ltmain.sh 2004-08-26 08:00:15.000000000 +0200
++++ misc/build/xmlsec1-1.2.6/ltmain.sh 2008-06-29 23:44:19.000000000 +0200
+@@ -1661,6 +1661,11 @@
+ fi
+ ;;
+
++ *.lib)
++ deplibs="$deplibs $arg"
++ continue
++ ;;
++
+ *.$libext)
+ # An archive.
+ deplibs="$deplibs $arg"
+@@ -1974,6 +1979,10 @@
+ continue
+ ;;
+ *.la) lib="$deplib" ;;
++ *.lib)
++ deplibs="$deplib $deplibs"
++ continue
++ ;;
+ *.$libext)
+ if test "$pass" = conv; then
+ deplibs="$deplib $deplibs"
+@@ -2994,13 +3003,13 @@
+ ;;
+
+ freebsd-aout)
+- major=".$current"
+- versuffix=".$current.$revision";
++ major=.`expr $current - $age`
++ versuffix="$major.$age.$revision"
+ ;;
+
+ freebsd-elf)
+- major=".$current"
+- versuffix=".$current";
++ major=.`expr $current - $age`
++ versuffix="$major.$age.$revision"
+ ;;
+
+ irix | nonstopux)
+@@ -3564,7 +3573,8 @@
+ fi
+ else
+ eval flag=\"$hardcode_libdir_flag_spec\"
+- dep_rpath="$dep_rpath $flag"
++# what the ...
++# dep_rpath="$dep_rpath $flag"
+ fi
+ elif test -n "$runpath_var"; then
+ case "$perm_rpath " in
+--- misc/xmlsec1-1.2.6/src/bn.c 2004-06-21 20:33:27.000000000 +0200
++++ misc/build/xmlsec1-1.2.6/src/bn.c 2008-06-29 23:44:19.000000000 +0200
+@@ -170,8 +170,10 @@
+ */
+ int
+ xmlSecBnFromString(xmlSecBnPtr bn, const xmlChar* str, xmlSecSize base) {
+- xmlSecSize i, len;
++ xmlSecSize i, len, size;
+ xmlSecByte ch;
++ xmlSecByte* data;
++ int positive;
+ int nn;
+ int ret;
+
+@@ -183,7 +185,7 @@
+ /* trivial case */
+ len = xmlStrlen(str);
+ if(len == 0) {
+- return(0);
++ return(0);
+ }
+
+ /* The result size could not exceed the input string length
+@@ -191,54 +193,131 @@
+ * In truth, it would be likely less than 1/2 input string length
+ * because each byte is represented by 2 chars. If needed,
+ * buffer size would be increased by Mul/Add functions.
++ * Finally, we can add one byte for 00 or 10 prefix.
+ */
+- ret = xmlSecBufferSetMaxSize(bn, xmlSecBufferGetSize(bn) + len / 2 + 1);
++ ret = xmlSecBufferSetMaxSize(bn, xmlSecBufferGetSize(bn) + len / 2 + 1 + 1);
+ if(ret < 0) {
+- xmlSecError(XMLSEC_ERRORS_HERE,
+- NULL,
+- "xmlSecBnRevLookupTable",
+- XMLSEC_ERRORS_R_XMLSEC_FAILED,
+- "size=%d", len / 2 + 1);
+- return (-1);
++ xmlSecError(XMLSEC_ERRORS_HERE,
++ NULL,
++ "xmlSecBnRevLookupTable",
++ XMLSEC_ERRORS_R_XMLSEC_FAILED,
++ "size=%d", len / 2 + 1);
++ return (-1);
++ }
++
++ /* figure out if it is positive or negative number */
++ positive = 1;
++ i = 0;
++ while(i < len) {
++ ch = str[i++];
++
++ /* skip spaces */
++ if(isspace(ch)) {
++ continue;
++ }
++
++ /* check if it is + or - */
++ if(ch == '+') {
++ positive = 1;
++ break;
++ } else if(ch == '-') {
++ positive = 0;
++ break;
++ }
++
++ /* otherwise, it must be start of the number */
++ nn = xmlSecBnLookupTable[ch];
++ if((nn >= 0) && ((xmlSecSize)nn < base)) {
++ xmlSecAssert2(i > 0, -1);
++
++ /* no sign, positive by default */
++ positive = 1;
++ --i; /* make sure that we will look at this character in next loop */
++ break;
++ } else {
++ xmlSecError(XMLSEC_ERRORS_HERE,
++ NULL,
++ NULL,
++ XMLSEC_ERRORS_R_INVALID_DATA,
++ "char=%c;base=%d",
++ ch, base);
++ return (-1);
++ }
++ }
++
++ /* now parse the number itself */
++ while(i < len) {
++ ch = str[i++];
++ if(isspace(ch)) {
++ continue;
++ }
++
++ xmlSecAssert2(ch <= sizeof(xmlSecBnLookupTable), -1);
++ nn = xmlSecBnLookupTable[ch];
++ if((nn < 0) || ((xmlSecSize)nn > base)) {
++ xmlSecError(XMLSEC_ERRORS_HERE,
++ NULL,
++ NULL,
++ XMLSEC_ERRORS_R_INVALID_DATA,
++ "char=%c;base=%d",
++ ch, base);
++ return (-1);
++ }
++
++ ret = xmlSecBnMul(bn, base);
++ if(ret < 0) {
++ xmlSecError(XMLSEC_ERRORS_HERE,
++ NULL,
++ "xmlSecBnMul",
++ XMLSEC_ERRORS_R_XMLSEC_FAILED,
++ "base=%d", base);
++ return (-1);
++ }
++
++ ret = xmlSecBnAdd(bn, nn);
++ if(ret < 0) {
++ xmlSecError(XMLSEC_ERRORS_HERE,
++ NULL,
++ "xmlSecBnAdd",
++ XMLSEC_ERRORS_R_XMLSEC_FAILED,
++ "base=%d", base);
++ return (-1);
++}
+ }
+
+- for(i = 0; i < len; i++) {
+- ch = str[i];
+- if(isspace(ch)) {
+- continue;
+- }
+-
+- xmlSecAssert2(ch <= sizeof(xmlSecBnLookupTable), -1);
+- nn = xmlSecBnLookupTable[ch];
+- if((nn < 0) || ((xmlSecSize)nn > base)) {
+- xmlSecError(XMLSEC_ERRORS_HERE,
+- NULL,
+- NULL,
+- XMLSEC_ERRORS_R_INVALID_DATA,
+- "char=%c;base=%d",
+- ch, base);
+- return (-1);
+- }
+-
+- ret = xmlSecBnMul(bn, base);
+- if(ret < 0) {
+- xmlSecError(XMLSEC_ERRORS_HERE,
+- NULL,
+- "xmlSecBnMul",
+- XMLSEC_ERRORS_R_XMLSEC_FAILED,
+- "base=%d", base);
+- return (-1);
+- }
+-
+- ret = xmlSecBnAdd(bn, nn);
+- if(ret < 0) {
+- xmlSecError(XMLSEC_ERRORS_HERE,
+- NULL,
+- "xmlSecBnAdd",
+- XMLSEC_ERRORS_R_XMLSEC_FAILED,
+- "base=%d", base);
+- return (-1);
+- }
++ /* check if we need to add 00 prefix */
++ data = xmlSecBufferGetData(bn);
++ size = xmlSecBufferGetSize(bn);
++ if((size > 0 && data[0] > 127)||(size==0)) {
++ ch = 0;
++ ret = xmlSecBufferPrepend(bn, &ch, 1);
++ if(ret < 0) {
++ xmlSecError(XMLSEC_ERRORS_HERE,
++ NULL,
++ "xmlSecBufferPrepend",
++ XMLSEC_ERRORS_R_XMLSEC_FAILED,
++ "base=%d", base);
++ return (-1);
++ }
++ }
++
++ /* do 2's compliment and add 1 to represent negative value */
++ if(positive == 0) {
++ data = xmlSecBufferGetData(bn);
++ size = xmlSecBufferGetSize(bn);
++ for(i = 0; i < size; ++i) {
++ data[i] ^= 0xFF;
++ }
++
++ ret = xmlSecBnAdd(bn, 1);
++ if(ret < 0) {
++ xmlSecError(XMLSEC_ERRORS_HERE,
++ NULL,
++ "xmlSecBnAdd",
++ XMLSEC_ERRORS_R_XMLSEC_FAILED,
++ "base=%d", base);
++ return (-1);
++ }
+ }
+
+ return(0);
+@@ -256,8 +335,12 @@
+ */
+ xmlChar*
+ xmlSecBnToString(xmlSecBnPtr bn, xmlSecSize base) {
++ xmlSecBn bn2;
++ int positive = 1;
+ xmlChar* res;
+- xmlSecSize i, len;
++ xmlSecSize i, len, size;
++ xmlSecByte* data;
++ int ret;
+ int nn;
+ xmlChar ch;
+
+@@ -265,35 +348,86 @@
+ xmlSecAssert2(base > 1, NULL);
+ xmlSecAssert2(base <= sizeof(xmlSecBnRevLookupTable), NULL);
+
++
++ /* copy bn */
++ data = xmlSecBufferGetData(bn);
++ size = xmlSecBufferGetSize(bn);
++ ret = xmlSecBnInitialize(&bn2, size);
++ if(ret < 0) {
++ xmlSecError(XMLSEC_ERRORS_HERE,
++ NULL,
++ "xmlSecBnCreate",
++ XMLSEC_ERRORS_R_XMLSEC_FAILED,
++ "size=%d", size);
++ return (NULL);
++ }
++
++ ret = xmlSecBnSetData(&bn2, data, size);
++ if(ret < 0) {
++ xmlSecError(XMLSEC_ERRORS_HERE,
++ NULL,
++ "xmlSecBnSetData",
++ XMLSEC_ERRORS_R_XMLSEC_FAILED,
++ "size=%d", size);
++ xmlSecBnFinalize(&bn2);
++ return (NULL);
++ }
++
++ /* check if it is a negative number or not */
++ data = xmlSecBufferGetData(&bn2);
++ size = xmlSecBufferGetSize(&bn2);
++ if((size > 0) && (data[0] > 127)) {
++ /* subtract 1 and do 2's compliment */
++ ret = xmlSecBnAdd(&bn2, -1);
++ if(ret < 0) {
++ xmlSecError(XMLSEC_ERRORS_HERE,
++ NULL,
++ "xmlSecBnAdd",
++ XMLSEC_ERRORS_R_XMLSEC_FAILED,
++ "size=%d", size);
++ xmlSecBnFinalize(&bn2);
++ return (NULL);
++ }
++ for(i = 0; i < size; ++i) {
++ data[i] ^= 0xFF;
++ }
++
++ positive = 0;
++ } else {
++ positive = 1;
++ }
++
+ /* Result string len is
+ * len = log base (256) * <bn size>
+ * Since the smallest base == 2 then we can get away with
+ * len = 8 * <bn size>
+ */
+- len = 8 * xmlSecBufferGetSize(bn) + 1;
++ len = 8 * size + 1 + 1;
+ res = (xmlChar*)xmlMalloc(len + 1);
+ if(res == NULL) {
+- xmlSecError(XMLSEC_ERRORS_HERE,
+- NULL,
+- NULL,
+- XMLSEC_ERRORS_R_MALLOC_FAILED,
+- "len=%d", len);
+- return (NULL);
++ xmlSecError(XMLSEC_ERRORS_HERE,
++ NULL,
++ NULL,
++ XMLSEC_ERRORS_R_MALLOC_FAILED,
++ "len=%d", len);
++ xmlSecBnFinalize(&bn2);
++ return (NULL);
+ }
+ memset(res, 0, len + 1);
+
+- for(i = 0; (xmlSecBufferGetSize(bn) > 0) && (i < len); i++) {
+- if(xmlSecBnDiv(bn, base, &nn) < 0) {
+- xmlSecError(XMLSEC_ERRORS_HERE,
+- NULL,
+- "xmlSecBnDiv",
+- XMLSEC_ERRORS_R_XMLSEC_FAILED,
+- "base=%d", base);
+- xmlFree(res);
+- return (NULL);
+- }
+- xmlSecAssert2((size_t)nn < sizeof(xmlSecBnRevLookupTable), NULL);
+- res[i] = xmlSecBnRevLookupTable[nn];
++ for(i = 0; (xmlSecBufferGetSize(&bn2) > 0) && (i < len); i++) {
++ if(xmlSecBnDiv(&bn2, base, &nn) < 0) {
++ xmlSecError(XMLSEC_ERRORS_HERE,
++ NULL,
++ "xmlSecBnDiv",
++ XMLSEC_ERRORS_R_XMLSEC_FAILED,
++ "base=%d", base);
++ xmlFree(res);
++ xmlSecBnFinalize(&bn2);
++ return (NULL);
++ }
++ xmlSecAssert2((size_t)nn < sizeof(xmlSecBnRevLookupTable), NULL);
++ res[i] = xmlSecBnRevLookupTable[nn];
+ }
+ xmlSecAssert2(i < len, NULL);
+
+@@ -301,13 +435,20 @@
+ for(len = i; (len > 1) && (res[len - 1] == '0'); len--);
+ res[len] = '\0';
+
++ /* add "-" for negative numbers */
++ if(positive == 0) {
++ res[len] = '-';
++ res[++len] = '\0';
++ }
++
+ /* swap the string because we wrote it in reverse order */
+ for(i = 0; i < len / 2; i++) {
+- ch = res[i];
+- res[i] = res[len - i - 1];
+- res[len - i - 1] = ch;
++ ch = res[i];
++ res[i] = res[len - i - 1];
++ res[len - i - 1] = ch;
+ }
+
++ xmlSecBnFinalize(&bn2);
+ return(res);
+ }
+
+@@ -392,7 +533,9 @@
+ }
+
+ data = xmlSecBufferGetData(bn);
+- for(over = 0, i = xmlSecBufferGetSize(bn); i > 0;) {
++ i = xmlSecBufferGetSize(bn);
++ over = 0;
++ while(i > 0) {
+ xmlSecAssert2(data != NULL, -1);
+
+ over = over + multiplier * data[--i];
+@@ -487,43 +630,57 @@
+ */
+ int
+ xmlSecBnAdd(xmlSecBnPtr bn, int delta) {
+- int over;
++ int over, tmp;
+ xmlSecByte* data;
+ xmlSecSize i;
+ xmlSecByte ch;
+ int ret;
+
+ xmlSecAssert2(bn != NULL, -1);
+- xmlSecAssert2(delta >= 0, -1);
+
+ if(delta == 0) {
+- return(0);
++ return(0);
+ }
+
+ data = xmlSecBufferGetData(bn);
+- for(over = delta, i = xmlSecBufferGetSize(bn); i > 0;) {
+- xmlSecAssert2(data != NULL, -1);
++ if(delta > 0) {
++ for(over = delta, i = xmlSecBufferGetSize(bn); (i > 0) && (over > 0) ;) {
++ xmlSecAssert2(data != NULL, -1);
+
+- over += data[--i];
+- data[i] = over % 256;
+- over = over / 256;
+- }
++ tmp = data[--i];
++ over += tmp;
++ data[i] = over % 256;
++ over = over / 256;
++ }
+
+- while(over > 0) {
+- ch = over % 256;
+- over = over / 256;
++ while(over > 0) {
++ ch = over % 256;
++ over = over / 256;
+
+- ret = xmlSecBufferPrepend(bn, &ch, 1);
+- if(ret < 0) {
+- xmlSecError(XMLSEC_ERRORS_HERE,
+- NULL,
+- "xmlSecBufferPrepend",
+- XMLSEC_ERRORS_R_XMLSEC_FAILED,
+- "size=1");
+- return (-1);
+- }
++ ret = xmlSecBufferPrepend(bn, &ch, 1);
++ if(ret < 0) {
++ xmlSecError(XMLSEC_ERRORS_HERE,
++ NULL,
++ "xmlSecBufferPrepend",
++ XMLSEC_ERRORS_R_XMLSEC_FAILED,
++ "size=1");
++ return (-1);
++ }
++ }
++ } else {
++ for(over = -delta, i = xmlSecBufferGetSize(bn); (i > 0) && (over > 0);) {
++ xmlSecAssert2(data != NULL, -1);
++
++ tmp = data[--i];
++ if(tmp < over) {
++ data[i] = 0;
++ over = (over - tmp) / 256;
++ } else {
++ data[i] = tmp - over;
++ over = 0;
++ }
++ }
+ }
+-
+ return(0);
+ }
+
+@@ -787,7 +944,7 @@
+ }
+
+ if(addLineBreaks) {
+- xmlNodeAddContent(cur, BAD_CAST "\n");
++ xmlNodeAddContent(cur, xmlSecStringCR);
+ }
+
+ switch(format) {
+@@ -833,7 +990,7 @@
+ }
+
+ if(addLineBreaks) {
+- xmlNodeAddContent(cur, BAD_CAST "\n");
++ xmlNodeAddContent(cur, xmlSecStringCR);
+ }
+
+ return(0);
+--- misc/xmlsec1-1.2.6/src/dl.c 2003-10-29 16:57:20.000000000 +0100
++++ misc/build/xmlsec1-1.2.6/src/dl.c 2008-06-29 23:44:19.000000000 +0200
+@@ -329,6 +329,10 @@
+ xmlSecCryptoDLInit(void) {
+ int ret;
+
++ /* use xmlMalloc/xmlFree */
++ xmlsec_lt_dlmalloc = xmlSecCryptoDLMalloc;
++ xmlsec_lt_dlfree = xmlSecCryptoDLFree;
++
+ ret = xmlSecPtrListInitialize(&gXmlSecCryptoDLLibraries, xmlSecCryptoDLLibrariesListGetKlass());
+ if(ret < 0) {
+ xmlSecError(XMLSEC_ERRORS_HERE,
+@@ -350,9 +354,6 @@
+ }
+ /* TODO: LTDL_SET_PRELOADED_SYMBOLS(); */
+
+- /* use xmlMalloc/xmlFree */
+- xmlsec_lt_dlmalloc = xmlSecCryptoDLMalloc;
+- xmlsec_lt_dlfree = xmlSecCryptoDLFree;
+ return(0);
+ }
+
+--- misc/xmlsec1-1.2.6/src/mscrypto/Makefile.in 2008-06-29 23:44:40.000000000 +0200
++++ misc/build/xmlsec1-1.2.6/src/mscrypto/Makefile.in 2008-06-29 23:44:19.000000000 +0200
+@@ -1 +1,178 @@
+-dummy
++# Makefile.in generated by automake 1.8.3 from Makefile.am.
++# @configure_input@
++
++# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
++# 2003, 2004 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@
++
++srcdir = @srcdir@
++top_srcdir = @top_srcdir@
++top_builddir = ../..
++LTLIBRARIES = $(lib_LTLIBRARIES)
++am__DEPENDENCIES_1 =
++libxmlsec1_mscrypto_la_DEPENDENCIES = ../libxmlsec1.la \
++ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
++ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
++am__objects_1 =
++am_libxmlsec1_mscrypto_la_OBJECTS = akmngr.lo app.lo certkeys.lo ciphers.lo crypto.lo \
++ digests.lo keysstore.lo kt_rsa.lo signatures.lo symkeys.lo \
++ x509.lo x509vfy.lo $(am__objects_1)
++libxmlsec1_mscrypto_la_OBJECTS = $(am_libxmlsec1_mscrypto_la_OBJECTS)
++DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)
++depcomp = $(SHELL) $(top_srcdir)/depcomp
++@AMDEP_TRUE@DEP_FILES = ./$(DEPDIR)/app.Plo ./$(DEPDIR)/certkeys.Plo \
++@AMDEP_TRUE@ ./$(DEPDIR)/ciphers.Plo ./$(DEPDIR)/crypto.Plo \
++@AMDEP_TRUE@ ./$(DEPDIR)/digests.Plo ./$(DEPDIR)/keysstore.Plo \
++@AMDEP_TRUE@ ./$(DEPDIR)/kt_rsa.Plo ./$(DEPDIR)/signatures.Plo \
++@AMDEP_TRUE@ ./$(DEPDIR)/symkeys.Plo ./$(DEPDIR)/x509.Plo \
++@AMDEP_TRUE@ ./$(DEPDIR)/x509vfy.Plo ./$(DEPDIR)/akmngr.Plo
++COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
++ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
++LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) \
++ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
++ $(AM_CFLAGS) $(CFLAGS)
++CCLD = $(CC)
++LINK = $(LIBTOOL) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
++ $(AM_LDFLAGS) $(LDFLAGS) -o $@
++CC = @CC@
++CCDEPMODE = @CCDEPMODE@
++CFLAGS = @CFLAGS@
++CPPFLAGS = @CPPFLAGS@
++CYGPATH_W = @CYGPATH_W@
++DEFS = @DEFS@
++DEPDIR = @DEPDIR@
++LDFLAGS = @LDFLAGS@
++LIBS = @LIBS@
++LIBTOOL = @LIBTOOL@
++LIBXML_CFLAGS = @LIBXML_CFLAGS@
++LIBXML_LIBS = @LIBXML_LIBS@
++MSCRYPTO_CFLAGS = @MSCRYPTO_CFLAGS@
++MSCRYPTO_LIBS = @MSCRYPTO_LIBS@
++OBJEXT = @OBJEXT@
++SHELL = @SHELL@
++XMLSEC_DEFINES = @XMLSEC_DEFINES@
++exec_prefix = @exec_prefix@
++libdir = @libdir@
++prefix = @prefix@
++NULL =
++
++INCLUDES = \
++ -DPACKAGE=\"@PACKAGE@\" \
++ -I$(top_srcdir) \
++ -I$(top_srcdir)/include \
++ $(XMLSEC_DEFINES) \
++ $(MSCRYPTO_CFLAGS) \
++ $(LIBXSLT_CFLAGS) \
++ $(LIBXML_CFLAGS) \
++ $(NULL)
++
++lib_LTLIBRARIES = \
++ libxmlsec1-mscrypto.la \
++ $(NULL)
++
++libxmlsec1_mscrypto_la_LIBADD = \
++ ../libxmlsec1.la \
++ $(MSCRYPTO_LIBS) \
++ $(LIBXSLT_LIBS) \
++ $(LIBXML_LIBS) \
++ $(NULL)
++
++libxmlsec1_mscrypto_la_LDFLAGS = \
++ -version-info @XMLSEC_VERSION_INFO@ \
++ $(NULL)
++
++all: all-am
++
++.SUFFIXES:
++.SUFFIXES: .c .lo .o .obj
++
++clean-libLTLIBRARIES:
++ -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES)
++ @list='$(lib_LTLIBRARIES)'; for p in $$list; do \
++ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
++ test "$$dir" = "$$p" && dir=.; \
++ echo "rm -f \"$${dir}/so_locations\""; \
++ rm -f "$${dir}/so_locations"; \
++ done
++libxmlsec1-mscrypto.la: $(libxmlsec1_mscrypto_la_OBJECTS) $(libxmlsec1_mscrypto_la_DEPENDENCIES)
++ $(LINK) -rpath $(libdir) $(libxmlsec1_mscrypto_la_LDFLAGS) $(libxmlsec1_mscrypto_la_OBJECTS) $(libxmlsec1_mscrypto_la_LIBADD) $(LIBS)
++
++mostlyclean-compile:
++ -rm -f *.$(OBJEXT)
++
++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/akmngr.Plo@am__quote@
++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/app.Plo@am__quote@
++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/certkeys.Plo@am__quote@
++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ciphers.Plo@am__quote@
++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/crypto.Plo@am__quote@
++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/digests.Plo@am__quote@
++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/keysstore.Plo@am__quote@
++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/kt_rsa.Plo@am__quote@
++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/signatures.Plo@am__quote@
++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/symkeys.Plo@am__quote@
++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/x509.Plo@am__quote@
++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/x509vfy.Plo@am__quote@
++
++.c.o:
++@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
++@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
++@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@
++@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
++@am__fastdepCC_FALSE@ $(COMPILE) -c $<
++
++.c.obj:
++@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
++@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
++@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@
++@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
++@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
++
++.c.lo:
++@am__fastdepCC_TRUE@ if $(LTCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
++@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
++@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='$(DEPDIR)/$*.Plo' tmpdepfile='$(DEPDIR)/$*.TPlo' @AMDEPBACKSLASH@
++@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
++@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
++
++mostlyclean-libtool:
++ -rm -f *.lo
++
++clean-libtool:
++ -rm -rf .libs _libs
++
++all-am: Makefile $(LTLIBRARIES)
++
++mostlyclean-generic:
++
++clean-generic:
++
++clean: clean-am
++
++clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \
++ mostlyclean-am
++
++mostlyclean: mostlyclean-am
++
++mostlyclean-am: mostlyclean-compile mostlyclean-generic \
++ mostlyclean-libtool
++
++.PHONY: all all-am clean clean-generic \
++ clean-libLTLIBRARIES clean-libtool \
++ maintainer-clean-generic mostlyclean mostlyclean-compile \
++ mostlyclean-generic mostlyclean-libtool
++
++# 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:
+--- misc/xmlsec1-1.2.6/src/mscrypto/akmngr.c 2008-06-29 23:44:39.000000000 +0200
++++ misc/build/xmlsec1-1.2.6/src/mscrypto/akmngr.c 2008-06-29 23:44:19.000000000 +0200
+@@ -1 +1,235 @@
+-dummy
++/**
++ * XMLSec library
++ *
++ * This is free software; see Copyright file in the source
++ * distribution for preciese wording.
++ *
++ * Copyright.........................
++ */
++#include "globals.h"
++
++#include <xmlsec/xmlsec.h>
++#include <xmlsec/keys.h>
++#include <xmlsec/transforms.h>
++#include <xmlsec/errors.h>
++
++#include <xmlsec/mscrypto/crypto.h>
++#include <xmlsec/mscrypto/keysstore.h>
++#include <xmlsec/mscrypto/akmngr.h>
++#include <xmlsec/mscrypto/x509.h>
++
++/**
++ * xmlSecMSCryptoAppliedKeysMngrCreate:
++ * @hKeyStore: the pointer to key store.
++ * @hCertStore: the pointer to certificate database.
++ *
++ * Create and load key store and certificate database into keys manager
++ *
++ * Returns keys manager pointer on success or NULL otherwise.
++ */
++xmlSecKeysMngrPtr
++xmlSecMSCryptoAppliedKeysMngrCreate(
++ HCERTSTORE hKeyStore ,
++ HCERTSTORE hCertStore
++) {
++ xmlSecKeyDataStorePtr certStore = NULL ;
++ xmlSecKeysMngrPtr keyMngr = NULL ;
++ xmlSecKeyStorePtr keyStore = NULL ;
++
++ keyStore = xmlSecKeyStoreCreate( xmlSecMSCryptoKeysStoreId ) ;
++ if( keyStore == NULL ) {
++ xmlSecError( XMLSEC_ERRORS_HERE ,
++ NULL ,
++ "xmlSecKeyStoreCreate" ,
++ XMLSEC_ERRORS_R_XMLSEC_FAILED ,
++ XMLSEC_ERRORS_NO_MESSAGE ) ;
++ return NULL ;
++ }
++
++ /*-
++ * At present, MS Crypto engine do not provide a way to setup a key store.
++ */
++ if( keyStore != NULL ) {
++ /*TODO: binding key store.*/
++ }
++
++ keyMngr = xmlSecKeysMngrCreate() ;
++ if( keyMngr == NULL ) {
++ xmlSecError( XMLSEC_ERRORS_HERE ,
++ NULL ,
++ "xmlSecKeysMngrCreate" ,
++ XMLSEC_ERRORS_R_XMLSEC_FAILED ,
++ XMLSEC_ERRORS_NO_MESSAGE ) ;
++
++ xmlSecKeyStoreDestroy( keyStore ) ;
++ return NULL ;
++ }
++
++ /*-
++ * Add key store to manager, from now on keys manager destroys the store if
++ * needed
++ */
++ if( xmlSecKeysMngrAdoptKeysStore( keyMngr, keyStore ) < 0 ) {
++ xmlSecError( XMLSEC_ERRORS_HERE ,
++ xmlSecErrorsSafeString( xmlSecKeyStoreGetName( keyStore ) ) ,
++ "xmlSecKeysMngrAdoptKeyStore" ,
++ XMLSEC_ERRORS_R_XMLSEC_FAILED ,
++ XMLSEC_ERRORS_NO_MESSAGE ) ;
++
++ xmlSecKeyStoreDestroy( keyStore ) ;
++ xmlSecKeysMngrDestroy( keyMngr ) ;
++ return NULL ;
++ }
++
++ /*-
++ * Initialize crypto library specific data in keys manager
++ */
++ if( xmlSecMSCryptoKeysMngrInit( keyMngr ) < 0 ) {
++ xmlSecError( XMLSEC_ERRORS_HERE ,
++ NULL ,
++ "xmlSecMSCryptoKeysMngrInit" ,
++ XMLSEC_ERRORS_R_XMLSEC_FAILED ,
++ XMLSEC_ERRORS_NO_MESSAGE ) ;
++
++ xmlSecKeysMngrDestroy( keyMngr ) ;
++ return NULL ;
++ }
++
++ /*-
++ * Set certificate databse to X509 key data store
++ */
++ /*-
++ * At present, MS Crypto engine do not provide a way to setup a cert store.
++ */
++
++ /*-
++ * Set the getKey callback
++ */
++ keyMngr->getKey = xmlSecKeysMngrGetKey ;
++
++ return keyMngr ;
++}
++
++int
++xmlSecMSCryptoAppliedKeysMngrSymKeyLoad(
++ xmlSecKeysMngrPtr mngr ,
++ HCRYPTKEY symKey
++) {
++ /*TODO: import the key into keys manager.*/
++ return(0) ;
++}
++
++int
++xmlSecMSCryptoAppliedKeysMngrPubKeyLoad(
++ xmlSecKeysMngrPtr mngr ,
++ HCRYPTKEY pubKey
++) {
++ /*TODO: import the key into keys manager.*/
++ return(0) ;
++}
++
++int
++xmlSecMSCryptoAppliedKeysMngrPriKeyLoad(
++ xmlSecKeysMngrPtr mngr ,
++ HCRYPTKEY priKey
++) {
++ /*TODO: import the key into keys manager.*/
++ return(0) ;
++}
++
++int
++xmlSecMSCryptoAppliedKeysMngrAdoptKeyStore (
++ xmlSecKeysMngrPtr mngr ,
++ HCERTSTORE keyStore
++) {
++ xmlSecKeyDataStorePtr x509Store ;
++
++ xmlSecAssert2( mngr != NULL, -1 ) ;
++ xmlSecAssert2( keyStore != NULL, -1 ) ;
++
++ x509Store = xmlSecKeysMngrGetDataStore( mngr, xmlSecMSCryptoX509StoreId ) ;
++ if( x509Store == NULL ) {
++ xmlSecError( XMLSEC_ERRORS_HERE ,
++ NULL ,
++ "xmlSecKeysMngrGetDataStore" ,
++ XMLSEC_ERRORS_R_XMLSEC_FAILED ,
++ XMLSEC_ERRORS_NO_MESSAGE ) ;
++ return( -1 ) ;
++ }
++
++ if( xmlSecMSCryptoX509StoreAdoptKeyStore( x509Store, keyStore ) < 0 ) {
++ xmlSecError( XMLSEC_ERRORS_HERE ,
++ xmlSecErrorsSafeString( xmlSecKeyDataStoreGetName( x509Store ) ) ,
++ "xmlSecMSCryptoX509StoreAdoptKeyStore" ,
++ XMLSEC_ERRORS_R_XMLSEC_FAILED ,
++ XMLSEC_ERRORS_NO_MESSAGE ) ;
++ return( -1 ) ;
++ }
++
++ return( 0 ) ;
++}
++
++int
++xmlSecMSCryptoAppliedKeysMngrAdoptTrustedStore (
++ xmlSecKeysMngrPtr mngr ,
++ HCERTSTORE trustedStore
++) {
++ xmlSecKeyDataStorePtr x509Store ;
++
++ xmlSecAssert2( mngr != NULL, -1 ) ;
++ xmlSecAssert2( trustedStore != NULL, -1 ) ;
++
++ x509Store = xmlSecKeysMngrGetDataStore( mngr, xmlSecMSCryptoX509StoreId ) ;
++ if( x509Store == NULL ) {
++ xmlSecError( XMLSEC_ERRORS_HERE ,
++ NULL ,
++ "xmlSecKeysMngrGetDataStore" ,
++ XMLSEC_ERRORS_R_XMLSEC_FAILED ,
++ XMLSEC_ERRORS_NO_MESSAGE ) ;
++ return( -1 ) ;
++ }
++
++ if( xmlSecMSCryptoX509StoreAdoptTrustedStore( x509Store, trustedStore ) < 0 ) {
++ xmlSecError( XMLSEC_ERRORS_HERE ,
++ xmlSecErrorsSafeString( xmlSecKeyDataStoreGetName( x509Store ) ) ,
++ "xmlSecMSCryptoX509StoreAdoptKeyStore" ,
++ XMLSEC_ERRORS_R_XMLSEC_FAILED ,
++ XMLSEC_ERRORS_NO_MESSAGE ) ;
++ return( -1 ) ;
++ }
++
++ return( 0 ) ;
++}
++
++int
++xmlSecMSCryptoAppliedKeysMngrAdoptUntrustedStore (
++ xmlSecKeysMngrPtr mngr ,
++ HCERTSTORE untrustedStore
++) {
++ xmlSecKeyDataStorePtr x509Store ;
++
++ xmlSecAssert2( mngr != NULL, -1 ) ;
++ xmlSecAssert2( untrustedStore != NULL, -1 ) ;
++
++ x509Store = xmlSecKeysMngrGetDataStore( mngr, xmlSecMSCryptoX509StoreId ) ;
++ if( x509Store == NULL ) {
++ xmlSecError( XMLSEC_ERRORS_HERE ,
++ NULL ,
++ "xmlSecKeysMngrGetDataStore" ,
++ XMLSEC_ERRORS_R_XMLSEC_FAILED ,
++ XMLSEC_ERRORS_NO_MESSAGE ) ;
++ return( -1 ) ;
++ }
++
++ if( xmlSecMSCryptoX509StoreAdoptUntrustedStore( x509Store, untrustedStore ) < 0 ) {
++ xmlSecError( XMLSEC_ERRORS_HERE ,
++ xmlSecErrorsSafeString( xmlSecKeyDataStoreGetName( x509Store ) ) ,
++ "xmlSecMSCryptoX509StoreAdoptKeyStore" ,
++ XMLSEC_ERRORS_R_XMLSEC_FAILED ,
++ XMLSEC_ERRORS_NO_MESSAGE ) ;
++ return( -1 ) ;
++ }
++
++ return( 0 ) ;
++}
++
+--- misc/xmlsec1-1.2.6/src/mscrypto/certkeys.c 2004-03-17 06:06:43.000000000 +0100
++++ misc/build/xmlsec1-1.2.6/src/mscrypto/certkeys.c 2008-06-29 23:44:19.000000000 +0200
+@@ -41,6 +41,7 @@
+ * a public key from xml document is provided, we need HCRYPTKEY.... The focus
+ * now is however directed to certificates. Wouter
+ */
++/** replaced by a wrapper style for WINNT 4.0
+ struct _xmlSecMSCryptoKeyDataCtx {
+ HCRYPTPROV hProv;
+ BOOL fCallerFreeProv;
+@@ -51,6 +52,124 @@
+ HCRYPTKEY hKey;
+ xmlSecKeyDataType type;
+ };
++*/
++/*-
++ * A wrapper of HCRYPTKEY, a reference countor is introduced, the function is
++ * the same as CryptDuplicateKey. Because the CryptDuplicateKey is not support
++ * by WINNT 4.0, the wrapper will enable the library work on WINNT 4.0
++ */
++struct _mscrypt_key {
++ HCRYPTKEY hKey ;
++ int refcnt ;
++} ;
++
++/*-
++ * A wrapper of HCRYPTPROV, a reference countor is introduced, the function is
++ * the same as CryptContextAddRef. Because the CryptContextAddRef is not support
++ * by WINNT 4.0, the wrapper will enable the library work on WINNT 4.0
++ */
++struct _mscrypt_prov {
++ HCRYPTPROV hProv ;
++ BOOL freeprov ;
++ int refcnt ;
++} ;
++
++struct _xmlSecMSCryptoKeyDataCtx {
++ struct _mscrypt_prov* p_prov ;
++ LPCTSTR providerName;
++ DWORD providerType;
++ PCCERT_CONTEXT pCert;
++ DWORD dwKeySpec;
++ struct _mscrypt_key* p_key ;
++ xmlSecKeyDataType type;
++};
++
++struct _mscrypt_key* mscrypt_create_key( HCRYPTKEY key ) {
++ struct _mscrypt_key* pkey ;
++
++ pkey = ( struct _mscrypt_key* )xmlMalloc( sizeof( struct _mscrypt_key ) ) ;
++ if( pkey == NULL ) {
++ xmlSecError( XMLSEC_ERRORS_HERE,
++ "mscrypt_create_key" ,
++ NULL ,
++ XMLSEC_ERRORS_R_MALLOC_FAILED ,
++ XMLSEC_ERRORS_NO_MESSAGE
++ ) ;
++ }
++
++ pkey->hKey = key ;
++ pkey->refcnt = 1 ;
++
++ return pkey ;
++}
++
++struct _mscrypt_key* mscrypt_acquire_key( struct _mscrypt_key* key ) {
++ if( key )
++ key->refcnt ++ ;
++
++ return key ;
++}
++
++int mscrypt_release_key( struct _mscrypt_key* key ) {
++ if( key ) {
++ key->refcnt -- ;
++ if( !key->refcnt ) {
++ if( key->hKey ) {
++ CryptDestroyKey( key->hKey ) ;
++ key->hKey = 0 ;
++ }
++ xmlFree( key ) ;
++ } else {
++ return key->refcnt ;
++ }
++ }
++
++ return 0 ;
++}
++
++struct _mscrypt_prov* mscrypt_create_prov( HCRYPTPROV prov, BOOL callerFree ) {
++ struct _mscrypt_prov* pprov ;
++
++ pprov = ( struct _mscrypt_prov* )xmlMalloc( sizeof( struct _mscrypt_prov ) ) ;
++ if( pprov == NULL ) {
++ xmlSecError( XMLSEC_ERRORS_HERE,
++ "mscrypt_create_prov" ,
++ NULL ,
++ XMLSEC_ERRORS_R_MALLOC_FAILED ,
++ XMLSEC_ERRORS_NO_MESSAGE
++ ) ;
++ }
++
++ pprov->hProv = prov ;
++ pprov->freeprov = callerFree ;
++ pprov->refcnt = 1 ;
++
++ return pprov ;
++}
++
++struct _mscrypt_prov* mscrypt_acquire_prov( struct _mscrypt_prov* prov ) {
++ if( prov )
++ prov->refcnt ++ ;
++
++ return prov ;
++}
++
++int mscrypt_release_prov( struct _mscrypt_prov* prov ) {
++ if( prov ) {
++ prov->refcnt -- ;
++ if( !prov->refcnt ) {
++ if( prov->hProv && prov->freeprov ) {
++ CryptReleaseContext( prov->hProv, 0 ) ;
++ prov->hProv = 0 ;
++ }
++ xmlFree( prov ) ;
++ } else {
++ return prov->refcnt ;
++ }
++ }
++
++ return 0 ;
++}
+
+ /******************************************************************************
+ *
+@@ -88,24 +207,20 @@
+ ctx = xmlSecMSCryptoKeyDataGetCtx(data);
+ xmlSecAssert2(ctx != NULL, -1);
+
+- if (ctx->hKey != 0) {
+- CryptDestroyKey(ctx->hKey);
+- ctx->hKey = 0;
+- }
++ if( ctx->p_key != 0 ) {
++ mscrypt_release_key( ctx->p_key ) ;
++ }
++ ctx->p_key = mscrypt_create_key( 0 ) ;
+
+ if(ctx->pCert != NULL) {
+ CertFreeCertificateContext(ctx->pCert);
+ ctx->pCert = NULL;
+ }
+
+- if ((ctx->hProv != 0) && (ctx->fCallerFreeProv)) {
+- CryptReleaseContext(ctx->hProv, 0);
+- ctx->hProv = 0;
+- ctx->fCallerFreeProv = FALSE;
+- } else {
+- ctx->hProv = 0;
+- ctx->fCallerFreeProv = FALSE;
+- }
++ if( ( ctx->p_prov ) ) {
++ mscrypt_release_prov( ctx->p_prov ) ;
++ }
++ ctx->p_prov = mscrypt_create_prov( 0, FALSE ) ;
+
+ ctx->type = type;
+
+@@ -116,9 +231,9 @@
+ if (!CryptAcquireCertificatePrivateKey(pCert,
+ CRYPT_ACQUIRE_USE_PROV_INFO_FLAG,
+ NULL,
+- &(ctx->hProv),
++ &(ctx->p_prov->hProv),
+ &(ctx->dwKeySpec),
+- &(ctx->fCallerFreeProv))) {
++ &(ctx->p_prov->freeprov))) {
+ xmlSecError(XMLSEC_ERRORS_HERE,
+ NULL,
+ "CryptAcquireCertificatePrivateKey",
+@@ -127,46 +242,39 @@
+ return(-1);
+ }
+ } else if((type & xmlSecKeyDataTypePublic) != 0){
+- if (!CryptAcquireContext(&(ctx->hProv),
++ if (!CryptAcquireContext(&(ctx->p_prov->hProv),
+ NULL,
+- ctx->providerName,
++ NULL, /*AF: replaces "ctx->providerName" with "NULL" */
+ ctx->providerType,
+ CRYPT_VERIFYCONTEXT)) {
+- xmlSecError(XMLSEC_ERRORS_HERE,
+- NULL,
+- "CryptAcquireContext",
+- XMLSEC_ERRORS_R_CRYPTO_FAILED,
+- XMLSEC_ERRORS_NO_MESSAGE);
+- return(-1);
+- }
+- ctx->dwKeySpec = 0;
+- ctx->fCallerFreeProv = TRUE;
++ xmlSecError(XMLSEC_ERRORS_HERE,
++ NULL,
++ "CryptAcquireContext",
++ XMLSEC_ERRORS_R_CRYPTO_FAILED,
++ XMLSEC_ERRORS_NO_MESSAGE);
++ return(-1);
++ }
++ ctx->dwKeySpec = 0;
++ ctx->p_prov->freeprov = TRUE;
++
++ if( !CryptImportPublicKeyInfo( ctx->p_prov->hProv,
++ X509_ASN_ENCODING | PKCS_7_ASN_ENCODING,
++ &(pCert->pCertInfo->SubjectPublicKeyInfo),
++ &(ctx->p_key->hKey) ) ) {
++ xmlSecError(XMLSEC_ERRORS_HERE,
++ NULL,
++ "CryptImportPublicKeyInfo",
++ XMLSEC_ERRORS_R_CRYPTO_FAILED,
++ XMLSEC_ERRORS_NO_MESSAGE);
++ return(-1);
++ }
+ } else {
+- xmlSecError(XMLSEC_ERRORS_HERE,
++ xmlSecError(XMLSEC_ERRORS_HERE,
+ NULL,
+ NULL,
+ XMLSEC_ERRORS_R_XMLSEC_FAILED,
+ "Unsupported keytype");
+- return(-1);
+- }
+-
+- /* CryptImportPublicKeyInfo is only needed when a real key handle
+- * is needed. The key handle is needed for de/encrypting and for
+- * verifying of a signature, *not* for signing. We could call
+- * CryptImportPublicKeyInfo in xmlSecMSCryptoKeyDataGetKey instead
+- * so no unnessecary calls to CryptImportPublicKeyInfo are being
+- * made. WK
+- */
+- if(!CryptImportPublicKeyInfo(ctx->hProv,
+- X509_ASN_ENCODING | PKCS_7_ASN_ENCODING,
+- &(pCert->pCertInfo->SubjectPublicKeyInfo),
+- &(ctx->hKey))) {
+- xmlSecError(XMLSEC_ERRORS_HERE,
+- NULL,
+- "CryptImportPublicKeyInfo",
+- XMLSEC_ERRORS_R_CRYPTO_FAILED,
+- XMLSEC_ERRORS_NO_MESSAGE);
+- return(-1);
++ return(-1);
+ }
+ ctx->pCert = pCert;
+
+@@ -190,29 +298,26 @@
+ ctx = xmlSecMSCryptoKeyDataGetCtx(data);
+ xmlSecAssert2(ctx != NULL, -1);
+
+- if(ctx->hKey != 0) {
+- CryptDestroyKey(ctx->hKey);
+- ctx->hKey = 0;
+- }
++ if( ctx->p_key != 0 ) {
++ mscrypt_release_key( ctx->p_key ) ;
++ ctx->p_key = NULL ;
++ }
+
+ if(ctx->pCert != NULL) {
+ CertFreeCertificateContext(ctx->pCert);
+ ctx->pCert = NULL;
+ }
+
+- if((ctx->hProv != 0) && ctx->fCallerFreeProv) {
+- CryptReleaseContext(ctx->hProv, 0);
+- ctx->hProv = 0;
+- ctx->fCallerFreeProv = FALSE;
+- } else {
+- ctx->hProv = 0;
+- ctx->fCallerFreeProv = FALSE;
+- }
++ if( ( ctx->p_prov ) ) {
++ mscrypt_release_prov( ctx->p_prov ) ;
++ ctx->p_prov = NULL ;
++ } else {
++ ctx->p_prov = NULL ;
++ }
+
+- ctx->hProv = hProv;
+- ctx->fCallerFreeProv = fCallerFreeProv;
++ ctx->p_prov = mscrypt_create_prov( hProv, FALSE ) ;
+ ctx->dwKeySpec = dwKeySpec;
+- ctx->hKey = hKey;
++ ctx->p_key = mscrypt_create_key( hKey ) ;
+ ctx->type = type;
+
+ return(0);
+@@ -238,7 +343,7 @@
+ ctx = xmlSecMSCryptoKeyDataGetCtx(data);
+ xmlSecAssert2(ctx != NULL, 0);
+
+- return(ctx->hKey);
++ return( ctx->p_key ? ctx->p_key->hKey : 0 );
+ }
+
+ /**
+@@ -273,7 +378,7 @@
+ ctx = xmlSecMSCryptoKeyDataGetCtx(data);
+ xmlSecAssert2(ctx != NULL, 0);
+
+- return(ctx->hProv);
++ return( ctx->p_prov ? ctx->p_prov->hProv : 0 );
+ }
+
+ DWORD
+@@ -316,25 +421,36 @@
+ XMLSEC_ERRORS_NO_MESSAGE);
+ return(-1);
+ }
+- }
+-
+- if (ctxSrc->hKey != 0) {
+- if (!CryptDuplicateKey(ctxSrc->hKey, NULL, 0, &(ctxDst->hKey))) {
+- xmlSecError(XMLSEC_ERRORS_HERE,
+- xmlSecErrorsSafeString(xmlSecKeyDataGetName(dst)),
+- "CryptDuplicateKey",
+- XMLSEC_ERRORS_R_CRYPTO_FAILED,
+- XMLSEC_ERRORS_NO_MESSAGE);
+- return(-1);
+- }
+ }
+- if(ctxSrc->hProv != 0) {
+- CryptContextAddRef(ctxSrc->hProv, NULL, 0);
+- ctxDst->hProv = ctxSrc->hProv;
+- ctxDst->fCallerFreeProv = TRUE;
+- } else {
+- ctxDst->hProv = 0;
+- ctxDst->fCallerFreeProv = FALSE;
++
++ if( ctxSrc->p_key ) {
++ if( ctxDst->p_key )
++ mscrypt_release_key( ctxDst->p_key ) ;
++
++ ctxDst->p_key = mscrypt_acquire_key( ctxSrc->p_key ) ;
++ if( !ctxDst->p_key ) {
++ xmlSecError(XMLSEC_ERRORS_HERE,
++ xmlSecErrorsSafeString(xmlSecKeyDataGetName(dst)),
++ "mscrypt_acquire_key",
++ XMLSEC_ERRORS_R_CRYPTO_FAILED,
++ XMLSEC_ERRORS_NO_MESSAGE);
++ return(-1);
++ }
++ }
++
++ if( ctxSrc->p_prov ) {
++ if( ctxDst->p_prov )
++ mscrypt_release_prov( ctxDst->p_prov ) ;
++
++ ctxDst->p_prov = mscrypt_acquire_prov( ctxSrc->p_prov ) ;
++ if( !ctxDst->p_prov ) {
++ xmlSecError(XMLSEC_ERRORS_HERE,
++ xmlSecErrorsSafeString(xmlSecKeyDataGetName(dst)),
++ "mscrypt_acquire_prov",
++ XMLSEC_ERRORS_R_CRYPTO_FAILED,
++ XMLSEC_ERRORS_NO_MESSAGE);
++ return(-1);
++ }
+ }
+
+ ctxDst->dwKeySpec = ctxSrc->dwKeySpec;
+@@ -355,16 +471,16 @@
+ ctx = xmlSecMSCryptoKeyDataGetCtx(data);
+ xmlSecAssert(ctx != NULL);
+
+- if (ctx->hKey != 0) {
+- CryptDestroyKey(ctx->hKey);
++ if( ctx->p_key ) {
++ mscrypt_release_key( ctx->p_key ) ;
+ }
+
+ if(ctx->pCert != NULL) {
+ CertFreeCertificateContext(ctx->pCert);
+ }
+
+- if ((ctx->hProv != 0) && ctx->fCallerFreeProv) {
+- CryptReleaseContext(ctx->hProv, 0);
++ if( ctx->p_prov ) {
++ mscrypt_release_prov( ctx->p_prov ) ;
+ }
+
+ memset(ctx, 0, sizeof(xmlSecMSCryptoKeyDataCtx));
+@@ -384,14 +500,14 @@
+ xmlSecAssert2(ctx->pCert->pCertInfo != NULL, 0);
+ return (CertGetPublicKeyLength(X509_ASN_ENCODING | PKCS_7_ASN_ENCODING,
+ &(ctx->pCert->pCertInfo->SubjectPublicKeyInfo)));
+- } else if (ctx->hKey != 0) {
++ } else if (ctx->p_key != 0 && ctx->p_key->hKey != 0 ) {
+ DWORD length = 0;
+ DWORD lenlen = sizeof(DWORD);
+-
+- if (!CryptGetKeyParam(ctx->hKey, KP_KEYLEN, (BYTE *)&length, &lenlen, 0)) {
++
++ if (!CryptGetKeyParam(ctx->p_key->hKey, KP_KEYLEN, (BYTE *)&length, &lenlen, 0)) {
+ xmlSecError(XMLSEC_ERRORS_HERE,
+ NULL,
+- "CertDuplicateCertificateContext",
++ "CryptGetKeyParam",
+ XMLSEC_ERRORS_R_CRYPTO_FAILED,
+ XMLSEC_ERRORS_NO_MESSAGE);
+ return(0);
+@@ -581,7 +697,11 @@
+ static void xmlSecMSCryptoKeyDataRsaDebugDump(xmlSecKeyDataPtr data, FILE* output);
+ static void xmlSecMSCryptoKeyDataRsaDebugXmlDump(xmlSecKeyDataPtr data, FILE* output);
+
++#ifdef __MINGW32__ // for runtime-pseudo-reloc
++static struct _xmlSecKeyDataKlass xmlSecMSCryptoKeyDataRsaKlass = {
++#else
+ static xmlSecKeyDataKlass xmlSecMSCryptoKeyDataRsaKlass = {
++#endif
+ sizeof(xmlSecKeyDataKlass),
+ xmlSecMSCryptoKeyDataSize,
+
+@@ -938,9 +1058,10 @@
+
+ ctx = xmlSecMSCryptoKeyDataGetCtx(xmlSecKeyGetValue(key));
+ xmlSecAssert2(ctx != NULL, -1);
+- xmlSecAssert2(ctx->hKey != 0, -1);
++ xmlSecAssert2(ctx->p_key != 0, -1);
++ xmlSecAssert2(ctx->p_key->hKey != 0, -1);
+
+- if (!CryptExportKey(ctx->hKey, 0, PUBLICKEYBLOB, 0, NULL, &dwBlobLen)) {
++ if (!CryptExportKey(ctx->p_key->hKey, 0, PUBLICKEYBLOB, 0, NULL, &dwBlobLen)) {
+ xmlSecError(XMLSEC_ERRORS_HERE,
+ xmlSecErrorsSafeString(xmlSecKeyDataKlassGetName(id)),
+ "CryptExportKey",
+@@ -960,7 +1081,7 @@
+ }
+
+ blob = xmlSecBufferGetData(&buf);
+- if (!CryptExportKey(ctx->hKey, 0, PUBLICKEYBLOB, 0, blob, &dwBlobLen)) {
++ if (!CryptExportKey(ctx->p_key->hKey, 0, PUBLICKEYBLOB, 0, blob, &dwBlobLen)) {
+ xmlSecError(XMLSEC_ERRORS_HERE,
+ xmlSecErrorsSafeString(xmlSecKeyDataKlassGetName(id)),
+ "CryptExportKey",
+@@ -1295,7 +1416,11 @@
+ static void xmlSecMSCryptoKeyDataDsaDebugXmlDump(xmlSecKeyDataPtr data,
+ FILE* output);
+
++#ifdef __MINGW32__ // for runtime-pseudo-reloc
++static struct _xmlSecKeyDataKlass xmlSecMSCryptoKeyDataDsaKlass = {
++#else
+ static xmlSecKeyDataKlass xmlSecMSCryptoKeyDataDsaKlass = {
++#endif
+ sizeof(xmlSecKeyDataKlass),
+ xmlSecMSCryptoKeyDataSize,
+
+@@ -1797,9 +1922,10 @@
+
+ ctx = xmlSecMSCryptoKeyDataGetCtx(xmlSecKeyGetValue(key));
+ xmlSecAssert2(ctx != NULL, -1);
+- xmlSecAssert2(ctx->hKey != 0, -1);
++ xmlSecAssert2(ctx->p_key != 0, -1);
++ xmlSecAssert2(ctx->p_key->hKey != 0, -1);
+
+- if (!CryptExportKey(ctx->hKey, 0, PUBLICKEYBLOB, 0, NULL, &dwBlobLen)) {
++ if (!CryptExportKey(ctx->p_key->hKey, 0, PUBLICKEYBLOB, 0, NULL, &dwBlobLen)) {
+ xmlSecError(XMLSEC_ERRORS_HERE,
+ xmlSecErrorsSafeString(xmlSecKeyDataKlassGetName(id)),
+ "CryptExportKey",
+@@ -1819,7 +1945,7 @@
+ }
+
+ blob = xmlSecBufferGetData(&buf);
+- if (!CryptExportKey(ctx->hKey, 0, PUBLICKEYBLOB, 0, blob, &dwBlobLen)) {
++ if (!CryptExportKey(ctx->p_key->hKey, 0, PUBLICKEYBLOB, 0, blob, &dwBlobLen)) {
+ xmlSecError(XMLSEC_ERRORS_HERE,
+ xmlSecErrorsSafeString(xmlSecKeyDataKlassGetName(id)),
+ "CryptExportKey",
+@@ -2010,7 +2136,6 @@
+ HCRYPTKEY hKey = 0;
+ DWORD dwKeySpec;
+ DWORD dwSize;
+- int res = -1;
+ int ret;
+
+ xmlSecAssert2(xmlSecKeyDataIsValid(data), xmlSecKeyDataTypeUnknown);
+@@ -2043,12 +2168,14 @@
+ dwKeySpec = AT_SIGNATURE;
+ dwSize = ((sizeBits << 16) | CRYPT_EXPORTABLE);
+ if (!CryptGenKey(hProv, CALG_DSS_SIGN, dwSize, &hKey)) {
+- xmlSecError(XMLSEC_ERRORS_HERE,
++ xmlSecError(XMLSEC_ERRORS_HERE,
+ xmlSecErrorsSafeString(xmlSecKeyDataGetName(data)),
+ "CryptGenKey",
+ XMLSEC_ERRORS_R_CRYPTO_FAILED,
+ XMLSEC_ERRORS_NO_MESSAGE);
+- goto done;
++ if (hProv != 0)
++ CryptReleaseContext(hProv, 0);
++ return -1 ;
+ }
+
+ ret = xmlSecMSCryptoKeyDataAdoptKey(data, hProv, TRUE, hKey, dwKeySpec,
+@@ -2059,24 +2186,17 @@
+ "xmlSecMSCryptoKeyDataAdoptKey",
+ XMLSEC_ERRORS_R_XMLSEC_FAILED,
+ XMLSEC_ERRORS_NO_MESSAGE);
+- goto done;
+- }
+- hProv = 0;
+- hKey = 0;
++ if( hKey != 0 )
++ CryptDestroyKey( hKey ) ;
++ if( hProv != 0 )
++ CryptReleaseContext( hProv, 0 ) ;
+
+- /* success */
+- res = 0;
+-
+-done:
+- if (hProv != 0) {
+- CryptReleaseContext(ctx->hProv, 0);
++ return -1 ;
+ }
++ hProv = 0 ;
++ hKey = 0 ;
+
+- if (hKey != 0) {
+- CryptDestroyKey(hKey);
+- }
+-
+- return(res);
++ return 0 ;
+ }
+
+ static xmlSecKeyDataType
+--- misc/xmlsec1-1.2.6/src/mscrypto/ciphers.c 2003-09-26 08:12:51.000000000 +0200
++++ misc/build/xmlsec1-1.2.6/src/mscrypto/ciphers.c 2008-06-29 23:44:19.000000000 +0200
+@@ -785,7 +785,11 @@
+ * AES CBC cipher transforms
+ *
+ ********************************************************************/
++#ifdef __MINGW32__ // for runtime-pseudo-reloc
++static struct _xmlSecTransformKlass xmlSecMSCryptoAes128CbcKlass = {
++#else
+ static xmlSecTransformKlass xmlSecMSCryptoAes128CbcKlass = {
++#endif
+ /* klass/object sizes */
+ sizeof(xmlSecTransformKlass), /* xmlSecSize klassSize */
+ xmlSecMSCryptoBlockCipherSize, /* xmlSecSize objSize */
+@@ -824,7 +828,11 @@
+ return(&xmlSecMSCryptoAes128CbcKlass);
+ }
+
++#ifdef __MINGW32__ // for runtime-pseudo-reloc
++static struct _xmlSecTransformKlass xmlSecMSCryptoAes192CbcKlass = {
++#else
+ static xmlSecTransformKlass xmlSecMSCryptoAes192CbcKlass = {
++#endif
+ /* klass/object sizes */
+ sizeof(xmlSecTransformKlass), /* xmlSecSize klassSize */
+ xmlSecMSCryptoBlockCipherSize, /* xmlSecSize objSize */
+@@ -863,7 +871,11 @@
+ return(&xmlSecMSCryptoAes192CbcKlass);
+ }
+
++#ifdef __MINGW32__ // for runtime-pseudo-reloc
++static struct _xmlSecTransformKlass xmlSecMSCryptoAes256CbcKlass = {
++#else
+ static xmlSecTransformKlass xmlSecMSCryptoAes256CbcKlass = {
++#endif
+ /* klass/object sizes */
+ sizeof(xmlSecTransformKlass), /* xmlSecSize klassSize */
+ xmlSecMSCryptoBlockCipherSize, /* xmlSecSize objSize */
+@@ -906,7 +918,11 @@
+
+
+ #ifndef XMLSEC_NO_DES
++#ifdef __MINGW32__ // for runtime-pseudo-reloc
++static struct _xmlSecTransformKlass xmlSecMSCryptoDes3CbcKlass = {
++#else
+ static xmlSecTransformKlass xmlSecMSCryptoDes3CbcKlass = {
++#endif
+ /* klass/object sizes */
+ sizeof(xmlSecTransformKlass), /* size_t klassSize */
+ xmlSecMSCryptoBlockCipherSize, /* size_t objSize */
+--- misc/xmlsec1-1.2.6/src/mscrypto/crypto.c 2003-11-12 03:38:51.000000000 +0100
++++ misc/build/xmlsec1-1.2.6/src/mscrypto/crypto.c 2008-06-29 23:44:19.000000000 +0200
+@@ -330,13 +330,15 @@
+ BYTE*
+ xmlSecMSCryptoCertStrToName(DWORD dwCertEncodingType, LPCTSTR pszX500, DWORD dwStrType, DWORD* len) {
+ BYTE* str = NULL;
+-
++ LPCTSTR ppszError = NULL;
++
+ xmlSecAssert2(pszX500 != NULL, NULL);
+ xmlSecAssert2(len != NULL, NULL);
+
+ if (!CertStrToName(dwCertEncodingType, pszX500, dwStrType,
+- NULL, NULL, len, NULL)) {
++ NULL, NULL, len, &ppszError)) {
+ /* this might not be an error, string might just not exist */
++ DWORD dw = GetLastError();
+ return(NULL);
+ }
+
+--- misc/xmlsec1-1.2.6/src/mscrypto/digests.c 2003-09-30 04:09:51.000000000 +0200
++++ misc/build/xmlsec1-1.2.6/src/mscrypto/digests.c 2008-06-29 23:44:19.000000000 +0200
+@@ -96,12 +96,15 @@
+
+ /* TODO: Check what provider is best suited here.... */
+ if (!CryptAcquireContext(&ctx->provider, NULL, MS_STRONG_PROV, PROV_RSA_FULL, CRYPT_VERIFYCONTEXT)) {
+- xmlSecError(XMLSEC_ERRORS_HERE,
+- xmlSecErrorsSafeString(xmlSecTransformGetName(transform)),
+- NULL,
+- XMLSEC_ERRORS_R_CRYPTO_FAILED,
+- XMLSEC_ERRORS_NO_MESSAGE);
+- return(-1);
++ //#i57942# This is also committed in rev 1.4 of this file in the xmlsec project
++ if (!CryptAcquireContext(&ctx->provider, NULL, MS_ENHANCED_PROV, PROV_RSA_FULL, CRYPT_VERIFYCONTEXT)) {
++ xmlSecError(XMLSEC_ERRORS_HERE,
++ xmlSecErrorsSafeString(xmlSecTransformGetName(transform)),
++ NULL,
++ XMLSEC_ERRORS_R_CRYPTO_FAILED,
++ XMLSEC_ERRORS_NO_MESSAGE);
++ }
++ return(0);
+ }
+
+ return(0);
+@@ -298,7 +301,11 @@
+ * SHA1
+ *
+ *****************************************************************************/
++#ifdef __MINGW32__ // for runtime-pseudo-reloc
++static struct _xmlSecTransformKlass xmlSecMSCryptoSha1Klass = {
++#else
+ static xmlSecTransformKlass xmlSecMSCryptoSha1Klass = {
++#endif
+ /* klass/object sizes */
+ sizeof(xmlSecTransformKlass), /* size_t klassSize */
+ xmlSecMSCryptoDigestSize, /* size_t objSize */
+--- misc/xmlsec1-1.2.6/src/mscrypto/keysstore.c 2003-09-27 05:12:22.000000000 +0200
++++ misc/build/xmlsec1-1.2.6/src/mscrypto/keysstore.c 2008-06-29 23:44:19.000000000 +0200
+@@ -62,7 +62,11 @@
+ const xmlChar* name,
+ xmlSecKeyInfoCtxPtr keyInfoCtx);
+
++#ifdef __MINGW32__ // for runtime-pseudo-reloc
++static struct _xmlSecKeyStoreKlass xmlSecMSCryptoKeysStoreKlass = {
++#else
+ static xmlSecKeyStoreKlass xmlSecMSCryptoKeysStoreKlass = {
++#endif
+ sizeof(xmlSecKeyStoreKlass),
+ xmlSecMSCryptoKeysStoreSize,
+
+--- misc/xmlsec1-1.2.6/src/mscrypto/kt_rsa.c 2003-09-26 22:29:25.000000000 +0200
++++ misc/build/xmlsec1-1.2.6/src/mscrypto/kt_rsa.c 2008-06-29 23:44:19.000000000 +0200
+@@ -66,7 +66,11 @@
+ static int xmlSecMSCryptoRsaPkcs1Process (xmlSecTransformPtr transform,
+ xmlSecTransformCtxPtr transformCtx);
+
++#ifdef __MINGW32__ // for runtime-pseudo-reloc
++static struct _xmlSecTransformKlass xmlSecMSCryptoRsaPkcs1Klass = {
++#else
+ static xmlSecTransformKlass xmlSecMSCryptoRsaPkcs1Klass = {
++#endif
+ /* klass/object sizes */
+ sizeof(xmlSecTransformKlass), /* xmlSecSize klassSize */
+ xmlSecMSCryptoRsaPkcs1Size, /* xmlSecSize objSize */
+--- misc/xmlsec1-1.2.6/src/mscrypto/signatures.c 2003-09-26 22:29:25.000000000 +0200
++++ misc/build/xmlsec1-1.2.6/src/mscrypto/signatures.c 2008-06-29 23:44:19.000000000 +0200
+@@ -483,7 +483,11 @@
+ * RSA-SHA1 signature transform
+ *
+ ***************************************************************************/
++#ifdef __MINGW32__ // for runtime-pseudo-reloc
++static struct _xmlSecTransformKlass xmlSecMSCryptoRsaSha1Klass = {
++#else
+ static xmlSecTransformKlass xmlSecMSCryptoRsaSha1Klass = {
++#endif
+ /* klass/object sizes */
+ sizeof(xmlSecTransformKlass), /* xmlSecSize klassSize */
+ xmlSecMSCryptoSignatureSize, /* xmlSecSize objSize */
+@@ -531,7 +535,11 @@
+ *
+ ***************************************************************************/
+
++#ifdef __MINGW32__ // for runtime-pseudo-reloc
++static struct _xmlSecTransformKlass xmlSecMSCryptoDsaSha1Klass = {
++#else
+ static xmlSecTransformKlass xmlSecMSCryptoDsaSha1Klass = {
++#endif
+ /* klass/object sizes */
+ sizeof(xmlSecTransformKlass), /* xmlSecSize klassSize */
+ xmlSecMSCryptoSignatureSize, /* xmlSecSize objSize */
+--- misc/xmlsec1-1.2.6/src/mscrypto/symkeys.c 2003-09-26 02:58:13.000000000 +0200
++++ misc/build/xmlsec1-1.2.6/src/mscrypto/symkeys.c 2008-06-29 23:44:19.000000000 +0200
+@@ -72,7 +72,11 @@
+ * <xmlsec:AESKeyValue> processing
+ *
+ *************************************************************************/
++#ifdef __MINGW32__ // for runtime-pseudo-reloc
++static struct _xmlSecKeyDataKlass xmlSecMSCryptoKeyDataAesKlass = {
++#else
+ static xmlSecKeyDataKlass xmlSecMSCryptoKeyDataAesKlass = {
++#endif
+ sizeof(xmlSecKeyDataKlass),
+ xmlSecKeyDataBinarySize,
+
+@@ -153,7 +157,11 @@
+ * <xmlsec:DESKeyValue> processing
+ *
+ *************************************************************************/
++#ifdef __MINGW32__ // for runtime-pseudo-reloc
++static struct _xmlSecKeyDataKlass xmlSecMSCryptoKeyDataDesKlass = {
++#else
+ static xmlSecKeyDataKlass xmlSecMSCryptoKeyDataDesKlass = {
++#endif
+ sizeof(xmlSecKeyDataKlass),
+ xmlSecKeyDataBinarySize,
+
+--- misc/xmlsec1-1.2.6/src/mscrypto/x509.c 2003-09-26 02:58:13.000000000 +0200
++++ misc/build/xmlsec1-1.2.6/src/mscrypto/x509.c 2008-06-29 23:44:19.000000000 +0200
+@@ -240,7 +240,11 @@
+
+
+
++#ifdef __MINGW32__ // for runtime-pseudo-reloc
++static struct _xmlSecKeyDataKlass xmlSecMSCryptoKeyDataX509Klass = {
++#else
+ static xmlSecKeyDataKlass xmlSecMSCryptoKeyDataX509Klass = {
++#endif
+ sizeof(xmlSecKeyDataKlass),
+ xmlSecMSCryptoX509DataSize,
+
+@@ -1572,6 +1576,7 @@
+ xmlSecKeyInfoCtxPtr keyInfoCtx) {
+ xmlSecMSCryptoX509DataCtxPtr ctx;
+ xmlSecKeyDataStorePtr x509Store;
++ PCCERT_CONTEXT pCert ;
+ int ret;
+
+ xmlSecAssert2(xmlSecKeyDataCheckId(data, xmlSecMSCryptoKeyDataX509Id), -1);
+@@ -1610,6 +1615,53 @@
+ return(-1);
+ }
+
++ /*
++ * I'll search key according to KeyReq.
++ */
++ pCert = CertDuplicateCertificateContext( ctx->keyCert ) ;
++ if( pCert == NULL ) {
++ xmlSecError( XMLSEC_ERRORS_HERE,
++ xmlSecErrorsSafeString(xmlSecKeyDataGetName(data)),
++ "CertDuplicateCertificateContext",
++ XMLSEC_ERRORS_R_CRYPTO_FAILED,
++ XMLSEC_ERRORS_NO_MESSAGE);
++
++ return(-1);
++ }
++
++ if( ( keyInfoCtx->keyReq.keyType & xmlSecKeyDataTypePrivate ) == xmlSecKeyDataTypePrivate ) {
++ keyValue = xmlSecMSCryptoCertAdopt( pCert, xmlSecKeyDataTypePrivate ) ;
++ if(keyValue == NULL) {
++ xmlSecError(XMLSEC_ERRORS_HERE,
++ xmlSecErrorsSafeString(xmlSecKeyDataGetName(data)),
++ "xmlSecMSCryptoCertAdopt",
++ XMLSEC_ERRORS_R_XMLSEC_FAILED,
++ XMLSEC_ERRORS_NO_MESSAGE);
++
++ CertFreeCertificateContext( pCert ) ;
++ return(-1);
++ }
++ pCert = NULL ;
++ } else if( ( keyInfoCtx->keyReq.keyType & xmlSecKeyDataTypePublic ) == xmlSecKeyDataTypePublic ) {
++ keyValue = xmlSecMSCryptoCertAdopt( pCert, xmlSecKeyDataTypePublic ) ;
++ if(keyValue == NULL) {
++ xmlSecError(XMLSEC_ERRORS_HERE,
++ xmlSecErrorsSafeString(xmlSecKeyDataGetName(data)),
++ "xmlSecMSCryptoCertAdopt",
++ XMLSEC_ERRORS_R_XMLSEC_FAILED,
++ XMLSEC_ERRORS_NO_MESSAGE);
++
++ CertFreeCertificateContext( pCert ) ;
++ return(-1);
++ }
++ pCert = NULL ;
++ }
++
++
++
++ /*-
++ * Get Public key from cert, which does not always work for sign action.
++ *
+ keyValue = xmlSecMSCryptoX509CertGetKey(ctx->keyCert);
+ if(keyValue == NULL) {
+ xmlSecError(XMLSEC_ERRORS_HERE,
+@@ -1619,6 +1671,51 @@
+ XMLSEC_ERRORS_NO_MESSAGE);
+ return(-1);
+ }
++ */
++
++ /*-
++ * I'll search key according to KeyReq.
++ */
++ pCert = CertDuplicateCertificateContext( ctx->keyCert ) ;
++ if( pCert == NULL ) {
++ xmlSecError( XMLSEC_ERRORS_HERE,
++ xmlSecErrorsSafeString(xmlSecKeyDataGetName(data)),
++ "CertDuplicateCertificateContext",
++ XMLSEC_ERRORS_R_CRYPTO_FAILED,
++ XMLSEC_ERRORS_NO_MESSAGE);
++
++ return(-1);
++ }
++
++ if( ( keyInfoCtx->keyReq.keyType & xmlSecKeyDataTypePrivate ) == xmlSecKeyDataTypePrivate ) {
++ keyValue = xmlSecMSCryptoCertAdopt( pCert, xmlSecKeyDataTypePrivate ) ;
++ if(keyValue == NULL) {
++ xmlSecError(XMLSEC_ERRORS_HERE,
++ xmlSecErrorsSafeString(xmlSecKeyDataGetName(data)),
++ "xmlSecMSCryptoCertAdopt",
++ XMLSEC_ERRORS_R_XMLSEC_FAILED,
++ XMLSEC_ERRORS_NO_MESSAGE);
++
++ CertFreeCertificateContext( pCert ) ;
++ return(-1);
++ }
++ pCert = NULL ;
++ } else if( ( keyInfoCtx->keyReq.keyType & xmlSecKeyDataTypePublic ) == xmlSecKeyDataTypePublic ) {
++ keyValue = xmlSecMSCryptoCertAdopt( pCert, xmlSecKeyDataTypePublic ) ;
++ if(keyValue == NULL) {
++ xmlSecError(XMLSEC_ERRORS_HERE,
++ xmlSecErrorsSafeString(xmlSecKeyDataGetName(data)),
++ "xmlSecMSCryptoCertAdopt",
++ XMLSEC_ERRORS_R_XMLSEC_FAILED,
++ XMLSEC_ERRORS_NO_MESSAGE);
++
++ CertFreeCertificateContext( pCert ) ;
++ return(-1);
++ }
++ pCert = NULL ;
++ }
++
++
+
+ /* verify that the key matches our expectations */
+ if(xmlSecKeyReqMatchKeyValue(&(keyInfoCtx->keyReq), keyValue) != 1) {
+@@ -1882,7 +1979,7 @@
+ xmlSecAssert2(nm->pbData != NULL, NULL);
+ xmlSecAssert2(nm->cbData > 0, NULL);
+
+- csz = CertNameToStr(X509_ASN_ENCODING | PKCS_7_ASN_ENCODING, nm, CERT_X500_NAME_STR, NULL, 0);
++ csz = CertNameToStr(X509_ASN_ENCODING | PKCS_7_ASN_ENCODING, nm, CERT_X500_NAME_STR | CERT_NAME_STR_REVERSE_FLAG, NULL, 0);
+ str = (char *)xmlMalloc(csz);
+ if (NULL == str) {
+ xmlSecError(XMLSEC_ERRORS_HERE,
+@@ -1893,7 +1990,7 @@
+ return (NULL);
+ }
+
+- csz = CertNameToStr(X509_ASN_ENCODING | PKCS_7_ASN_ENCODING, nm, CERT_X500_NAME_STR, str, csz);
++ csz = CertNameToStr(X509_ASN_ENCODING | PKCS_7_ASN_ENCODING, nm, CERT_X500_NAME_STR | CERT_NAME_STR_REVERSE_FLAG, str, csz);
+ if (csz < 1) {
+ xmlSecError(XMLSEC_ERRORS_HERE,
+ NULL,
+@@ -1904,17 +2001,37 @@
+ return(NULL);
+ }
+
+- res = xmlStrdup(BAD_CAST str);
+- if(res == NULL) {
+- xmlSecError(XMLSEC_ERRORS_HERE,
+- NULL,
+- "xmlStrdup",
+- XMLSEC_ERRORS_R_MALLOC_FAILED,
+- XMLSEC_ERRORS_NO_MESSAGE);
+- xmlFree(str);
+- return(NULL);
++ /* aleksey: this is a hack, but mscrypto can not read E= flag and wants Email= instead.
++ * don't ask me how is it possible not to read something you wrote yourself but also
++ * see comment in the xmlSecMSCryptoX509FindCert function.
++ */
++ if(strncmp(str, "E=", 2) == 0) {
++ res = xmlMalloc(strlen(str) + 13 + 1);
++ if(res == NULL) {
++ xmlSecError(XMLSEC_ERRORS_HERE,
++ NULL,
++ "xmlMalloc",
++ XMLSEC_ERRORS_R_MALLOC_FAILED,
++ "size=%d",
++ strlen(str) + 13 + 1);
++ xmlFree(str);
++ return(NULL);
++ }
++
++ memcpy(res, "emailAddress=", 13);
++ strcpy(res + 13, BAD_CAST (str + 2));
++ } else {
++ res = xmlStrdup(BAD_CAST str);
++ if(res == NULL) {
++ xmlSecError(XMLSEC_ERRORS_HERE,
++ NULL,
++ "xmlStrdup",
++ XMLSEC_ERRORS_R_MALLOC_FAILED,
++ XMLSEC_ERRORS_NO_MESSAGE);
++ xmlFree(str);
++ return(NULL);
++ }
+ }
+-
+ xmlFree(str);
+ return(res);
+ }
+@@ -2153,7 +2270,11 @@
+ xmlSecSize bufSize,
+ xmlSecKeyInfoCtxPtr keyInfoCtx);
+
++#ifdef __MINGW32__ // for runtime-pseudo-reloc
++static struct _xmlSecKeyDataKlass xmlSecMSCryptoKeyDataRawX509CertKlass = {
++#else
+ static xmlSecKeyDataKlass xmlSecMSCryptoKeyDataRawX509CertKlass = {
++#endif
+ sizeof(xmlSecKeyDataKlass),
+ sizeof(xmlSecKeyData),
+
+--- misc/xmlsec1-1.2.6/src/mscrypto/x509vfy.c 2003-09-27 05:12:22.000000000 +0200
++++ misc/build/xmlsec1-1.2.6/src/mscrypto/x509vfy.c 2008-06-29 23:44:19.000000000 +0200
+@@ -70,7 +70,11 @@
+ static xmlSecByte * xmlSecMSCryptoX509NameRead (xmlSecByte *str,
+ int len);
+
++#ifdef __MINGW32__ // for runtime-pseudo-reloc
++static struct _xmlSecKeyDataStoreKlass xmlSecMSCryptoX509StoreKlass = {
++#else
+ static xmlSecKeyDataStoreKlass xmlSecMSCryptoX509StoreKlass = {
++#endif
+ sizeof(xmlSecKeyDataStoreKlass),
+ xmlSecMSCryptoX509StoreSize,
+
+@@ -125,6 +129,7 @@
+ xmlChar *issuerName, xmlChar *issuerSerial,
+ xmlChar *ski, xmlSecKeyInfoCtx* keyInfoCtx) {
+ xmlSecMSCryptoX509StoreCtxPtr ctx;
++ PCCERT_CONTEXT pCert ;
+
+ xmlSecAssert2(xmlSecKeyDataStoreCheckId(store, xmlSecMSCryptoX509StoreId), NULL);
+ xmlSecAssert2(keyInfoCtx != NULL, NULL);
+@@ -132,10 +137,17 @@
+ ctx = xmlSecMSCryptoX509StoreGetCtx(store);
+ xmlSecAssert2(ctx != NULL, NULL);
+ xmlSecAssert2(ctx->untrusted != NULL, NULL);
++ xmlSecAssert2(ctx->trusted != NULL, NULL);
+
+- return(xmlSecMSCryptoX509FindCert(ctx->untrusted, subjectName, issuerName, issuerSerial, ski));
+-}
++ pCert = NULL ;
++ if( ctx->untrusted != NULL )
++ pCert = xmlSecMSCryptoX509FindCert( ctx->untrusted, subjectName, issuerName, issuerSerial, ski ) ;
++
++ if( ctx->trusted != NULL && pCert == NULL )
++ pCert = xmlSecMSCryptoX509FindCert( ctx->trusted, subjectName, issuerName, issuerSerial, ski ) ;
+
++ return( pCert ) ;
++}
+
+ static void
+ xmlSecMSCryptoUnixTimeToFileTime(time_t t, LPFILETIME pft) {
+@@ -252,17 +264,22 @@
+ }
+
+ static BOOL
+-xmlSecMSCryptoX509StoreConstructCertsChain(xmlSecKeyDataStorePtr store, PCCERT_CONTEXT cert, HCERTSTORE certs,
+- xmlSecKeyInfoCtx* keyInfoCtx) {
++xmlSecMSCryptoX509StoreConstructCertsChain(
++ xmlSecKeyDataStorePtr store ,
++ PCCERT_CONTEXT cert ,
++ HCERTSTORE certStore ,
++ xmlSecKeyInfoCtx* keyInfoCtx
++) {
+ xmlSecMSCryptoX509StoreCtxPtr ctx;
+ PCCERT_CONTEXT issuerCert = NULL;
+ FILETIME fTime;
+ DWORD flags;
++ BOOL selfSigned ;
+
+ xmlSecAssert2(xmlSecKeyDataStoreCheckId(store, xmlSecMSCryptoX509StoreId), FALSE);
+ xmlSecAssert2(cert != NULL, FALSE);
+ xmlSecAssert2(cert->pCertInfo != NULL, FALSE);
+- xmlSecAssert2(certs != NULL, FALSE);
++ xmlSecAssert2(certStore != NULL, FALSE);
+ xmlSecAssert2(keyInfoCtx != NULL, FALSE);
+
+ ctx = xmlSecMSCryptoX509StoreGetCtx(store);
+@@ -283,60 +300,85 @@
+ return(FALSE);
+ }
+
+- if (!xmlSecMSCryptoCheckRevocation(certs, cert)) {
++ if (!xmlSecMSCryptoCheckRevocation(certStore, cert)) {
+ return(FALSE);
+ }
+
+- /* try the untrusted certs in the chain */
+- issuerCert = CertFindCertificateInStore(certs,
++ /*-
++ * Firstly try to find the cert in the trusted cert store. We will trust
++ * the certificate in the trusted store.
++ */
++ issuerCert = CertFindCertificateInStore(ctx->trusted,
+ X509_ASN_ENCODING | PKCS_7_ASN_ENCODING,
+ 0,
+ CERT_FIND_SUBJECT_NAME,
+- &(cert->pCertInfo->Issuer),
++ &(cert->pCertInfo->Subject),
+ NULL);
+- if(issuerCert == cert) {
+- /* self signed cert, forget it */
+- CertFreeCertificateContext(issuerCert);
+- } else if(issuerCert != NULL) {
+- flags = CERT_STORE_REVOCATION_FLAG | CERT_STORE_SIGNATURE_FLAG;
+- if(!CertVerifySubjectCertificateContext(cert, issuerCert, &flags)) {
+- xmlSecMSCryptoX509StoreCertError(store, issuerCert, flags);
+- CertFreeCertificateContext(issuerCert);
+- return(FALSE);
+- }
+- if(!xmlSecMSCryptoX509StoreConstructCertsChain(store, issuerCert, certs, keyInfoCtx)) {
+- xmlSecMSCryptoX509StoreCertError(store, issuerCert, flags);
+- CertFreeCertificateContext(issuerCert);
+- return(FALSE);
+- }
+- CertFreeCertificateContext(issuerCert);
+- return(TRUE);
++ if( issuerCert != NULL ) {
++ /* We have found the trusted cert, so return true */
++ CertFreeCertificateContext( issuerCert ) ;
++ return( TRUE ) ;
+ }
+
+- /* try the untrusted certs in the store */
+- issuerCert = CertFindCertificateInStore(ctx->untrusted,
++ /* Check whether the certificate is self signed certificate */
++ selfSigned = CertCompareCertificateName( X509_ASN_ENCODING | PKCS_7_ASN_ENCODING, &(cert->pCertInfo->Subject), &(cert->pCertInfo->Issuer) ) ;
++
++ /* try the untrusted certs in the chain */
++ if( !selfSigned ) {
++ issuerCert = CertFindCertificateInStore(certStore,
+ X509_ASN_ENCODING | PKCS_7_ASN_ENCODING,
+ 0,
+ CERT_FIND_SUBJECT_NAME,
+ &(cert->pCertInfo->Issuer),
+ NULL);
+- if(issuerCert == cert) {
+- /* self signed cert, forget it */
+- CertFreeCertificateContext(issuerCert);
+- } else if(issuerCert != NULL) {
+- flags = CERT_STORE_REVOCATION_FLAG | CERT_STORE_SIGNATURE_FLAG;
+- if(!CertVerifySubjectCertificateContext(cert, issuerCert, &flags)) {
+- xmlSecMSCryptoX509StoreCertError(store, issuerCert, flags);
+- CertFreeCertificateContext(issuerCert);
+- return(FALSE);
+- }
+- if(!xmlSecMSCryptoX509StoreConstructCertsChain(store, issuerCert, certs, keyInfoCtx)) {
+- CertFreeCertificateContext(issuerCert);
+- return(FALSE);
++ if( issuerCert != NULL && CertCompareCertificate( X509_ASN_ENCODING | PKCS_7_ASN_ENCODING, cert->pCertInfo, issuerCert->pCertInfo ) ) {
++ /* self signed cert, forget it */
++ CertFreeCertificateContext(issuerCert);
++ } else if(issuerCert != NULL) {
++ flags = CERT_STORE_REVOCATION_FLAG | CERT_STORE_SIGNATURE_FLAG;
++ if(!CertVerifySubjectCertificateContext(cert, issuerCert, &flags)) {
++ xmlSecMSCryptoX509StoreCertError(store, issuerCert, flags);
++ CertFreeCertificateContext(issuerCert);
++ return(FALSE);
++ }
++ if(!xmlSecMSCryptoX509StoreConstructCertsChain(store, issuerCert, certStore, keyInfoCtx)) {
++ xmlSecMSCryptoX509StoreCertError(store, issuerCert, flags);
++ CertFreeCertificateContext(issuerCert);
++ return(FALSE);
++ }
++
++ CertFreeCertificateContext(issuerCert);
++ return(TRUE);
++ }
++ }
++
++ /* try the untrusted certs in the store */
++ if( !selfSigned ) {
++ issuerCert = CertFindCertificateInStore(ctx->untrusted,
++ X509_ASN_ENCODING | PKCS_7_ASN_ENCODING,
++ 0,
++ CERT_FIND_SUBJECT_NAME,
++ &(cert->pCertInfo->Issuer),
++ NULL);
++ if( issuerCert != NULL && CertCompareCertificate( X509_ASN_ENCODING | PKCS_7_ASN_ENCODING, cert->pCertInfo, issuerCert->pCertInfo ) ) {
++ /* self signed cert, forget it */
++ CertFreeCertificateContext(issuerCert);
++ } else if(issuerCert != NULL) {
++ flags = CERT_STORE_REVOCATION_FLAG | CERT_STORE_SIGNATURE_FLAG;
++ if(!CertVerifySubjectCertificateContext(cert, issuerCert, &flags)) {
++ xmlSecMSCryptoX509StoreCertError(store, issuerCert, flags);
++ CertFreeCertificateContext(issuerCert);
++ return(FALSE);
++ }
++ if(!xmlSecMSCryptoX509StoreConstructCertsChain(store, issuerCert, certStore, keyInfoCtx)) {
++ CertFreeCertificateContext(issuerCert);
++ return(FALSE);
++ }
++
++ CertFreeCertificateContext(issuerCert);
++ return(TRUE);
++ }
+ }
+- CertFreeCertificateContext(issuerCert);
+- return(TRUE);
+- }
+
+ /* try to find issuer cert in the trusted cert in the store */
+ issuerCert = CertFindCertificateInStore(ctx->trusted,
+@@ -379,26 +421,61 @@
+ xmlSecAssert2(certs != NULL, NULL);
+ xmlSecAssert2(keyInfoCtx != NULL, NULL);
+
+- while((cert = CertEnumCertificatesInStore(certs, cert)) != NULL){
+- PCCERT_CONTEXT nextCert = NULL;
++ while( ( cert = CertEnumCertificatesInStore( certs, cert ) ) != NULL ) {
++ PCCERT_CONTEXT nextCert ;
++ unsigned char selected ;
+
+- xmlSecAssert2(cert->pCertInfo != NULL, NULL);
++ xmlSecAssert2( cert->pCertInfo != NULL, NULL ) ;
+
+- /* if cert is the issuer of any other cert in the list, then it is
+- * to be skipped */
+- nextCert = CertFindCertificateInStore(certs,
++ /* if cert is the issuer of any other cert in the list, then it is
++ * to be skipped except that the cert list only have one self-signed
++ * certificate.
++ */
++ for( selected = 0, nextCert = NULL ; ; ) {
++ nextCert = CertFindCertificateInStore( certs,
+ X509_ASN_ENCODING | PKCS_7_ASN_ENCODING,
+ 0,
+ CERT_FIND_ISSUER_NAME,
+ &(cert->pCertInfo->Subject),
+- NULL);
+- if(nextCert != NULL) {
+- CertFreeCertificateContext(nextCert);
+- continue;
+- }
+- if(xmlSecMSCryptoX509StoreConstructCertsChain(store, cert, certs, keyInfoCtx)) {
+- return(cert);
+- }
++ nextCert ) ;
++ if( nextCert != NULL ) {
++ if( CertCompareCertificate( X509_ASN_ENCODING | PKCS_7_ASN_ENCODING, cert->pCertInfo, nextCert->pCertInfo ) ) {
++ selected = 1 ;
++ continue ;
++ } else {
++ selected = 0 ;
++ break ;
++ }
++ } else {
++ selected = 1 ;
++ break ;
++ }
++ }
++
++ if( nextCert != NULL )
++ CertFreeCertificateContext( nextCert ) ;
++
++ if( !selected ) {
++ continue ;
++ }
++
++ /* JL: OpenOffice.org implements its own certificate verification routine.
++ The goal is to seperate validation of the signature
++ and the certificate. For example, OOo could show that the document signature is valid,
++ but the certificate could not be verified. If we do not prevent the verification of
++ the certificate by libxmlsec and the verification fails, then the XML signature will not be
++ verified. This would happen, for example, if the root certificate is not installed.
++
++ In the store schould only be the certificate from the X509Certificate element
++ and the X509IssuerSerial element. The latter is only there
++ if the certificate is installed. Both certificates must be the same!
++ In case of writing the signature, the store contains only the certificate that
++ was created based on the information from the X509IssuerSerial element. */
++ return cert;
++
++/* if( xmlSecMSCryptoX509StoreConstructCertsChain( store, cert, certs, keyInfoCtx ) ) {
++ return( cert ) ;
++ } */
+ }
+
+ return (NULL);
+@@ -458,9 +535,126 @@
+ return(0);
+ }
+
++int
++xmlSecMSCryptoX509StoreAdoptKeyStore (
++ xmlSecKeyDataStorePtr store,
++ HCERTSTORE keyStore
++) {
++ xmlSecMSCryptoX509StoreCtxPtr ctx;
++ int ret;
++
++ xmlSecAssert2(xmlSecKeyDataStoreCheckId(store, xmlSecMSCryptoX509StoreId), -1);
++ xmlSecAssert2( keyStore != NULL, -1);
++
++ ctx = xmlSecMSCryptoX509StoreGetCtx(store);
++ xmlSecAssert2(ctx != NULL, -1);
++ xmlSecAssert2(ctx->trusted != NULL, -1);
++
++ if( !CertAddStoreToCollection ( ctx->trusted , keyStore , CERT_PHYSICAL_STORE_ADD_ENABLE_FLAG , 2 ) ) {
++ xmlSecError(XMLSEC_ERRORS_HERE,
++ xmlSecErrorsSafeString(xmlSecKeyDataStoreGetName(store)),
++ "CertAddStoreToCollection",
++ XMLSEC_ERRORS_R_CRYPTO_FAILED,
++ XMLSEC_ERRORS_NO_MESSAGE);
++ return(-1);
++ }
++
++ {
++ PCCERT_CONTEXT ptCert ;
++
++ ptCert = NULL ;
++ while( 1 ) {
++ ptCert = CertEnumCertificatesInStore( ctx->trusted, ptCert ) ;
++ if( ptCert == NULL )
++ break ;
++ }
++ }
++
++ return(0);
++}
++
++int
++xmlSecMSCryptoX509StoreAdoptTrustedStore (
++ xmlSecKeyDataStorePtr store,
++ HCERTSTORE trustedStore
++) {
++ xmlSecMSCryptoX509StoreCtxPtr ctx;
++ int ret;
++
++ xmlSecAssert2(xmlSecKeyDataStoreCheckId(store, xmlSecMSCryptoX509StoreId), -1);
++ xmlSecAssert2( trustedStore != NULL, -1);
++
++ ctx = xmlSecMSCryptoX509StoreGetCtx(store);
++ xmlSecAssert2(ctx != NULL, -1);
++ xmlSecAssert2(ctx->trusted != NULL, -1);
++
++ if( !CertAddStoreToCollection ( ctx->trusted , trustedStore , CERT_PHYSICAL_STORE_ADD_ENABLE_FLAG , 3 ) ) {
++ xmlSecError(XMLSEC_ERRORS_HERE,
++ xmlSecErrorsSafeString(xmlSecKeyDataStoreGetName(store)),
++ "CertAddStoreToCollection",
++ XMLSEC_ERRORS_R_CRYPTO_FAILED,
++ XMLSEC_ERRORS_NO_MESSAGE);
++ return(-1);
++ }
++
++ {
++ PCCERT_CONTEXT ptCert ;
++
++ ptCert = NULL ;
++ while( 1 ) {
++ ptCert = CertEnumCertificatesInStore( ctx->trusted, ptCert ) ;
++ if( ptCert == NULL )
++ break ;
++ }
++ }
++
++ return(0);
++}
++
++int
++xmlSecMSCryptoX509StoreAdoptUntrustedStore (
++ xmlSecKeyDataStorePtr store,
++ HCERTSTORE untrustedStore
++) {
++ xmlSecMSCryptoX509StoreCtxPtr ctx;
++ int ret;
++
++ xmlSecAssert2(xmlSecKeyDataStoreCheckId(store, xmlSecMSCryptoX509StoreId), -1);
++ xmlSecAssert2( untrustedStore != NULL, -1);
++
++ ctx = xmlSecMSCryptoX509StoreGetCtx(store);
++ xmlSecAssert2(ctx != NULL, -1);
++ xmlSecAssert2(ctx->untrusted != NULL, -1);
++
++ if( !CertAddStoreToCollection ( ctx->untrusted , untrustedStore , CERT_PHYSICAL_STORE_ADD_ENABLE_FLAG , 2 ) ) {
++ xmlSecError(XMLSEC_ERRORS_HERE,
++ xmlSecErrorsSafeString(xmlSecKeyDataStoreGetName(store)),
++ "CertAddStoreToCollection",
++ XMLSEC_ERRORS_R_CRYPTO_FAILED,
++ XMLSEC_ERRORS_NO_MESSAGE);
++ return(-1);
++ }
++
++ {
++ PCCERT_CONTEXT ptCert ;
++
++ ptCert = NULL ;
++ while( 1 ) {
++ ptCert = CertEnumCertificatesInStore( ctx->untrusted, ptCert ) ;
++ if( ptCert == NULL )
++ break ;
++ }
++ }
++
++ return(0);
++}
++
+ static int
+ xmlSecMSCryptoX509StoreInitialize(xmlSecKeyDataStorePtr store) {
+ xmlSecMSCryptoX509StoreCtxPtr ctx;
++ HCERTSTORE hTrustedMemStore ;
++ HCERTSTORE hUntrustedMemStore ;
++
+ xmlSecAssert2(xmlSecKeyDataStoreCheckId(store, xmlSecMSCryptoX509StoreId), -1);
+
+ ctx = xmlSecMSCryptoX509StoreGetCtx(store);
+@@ -468,36 +662,104 @@
+
+ memset(ctx, 0, sizeof(xmlSecMSCryptoX509StoreCtx));
+
++ /* create trusted certs store collection */
++ ctx->trusted = CertOpenStore(CERT_STORE_PROV_COLLECTION,
++ 0,
++ NULL,
++ 0,
++ NULL);
++ if(ctx->trusted == NULL) {
++ xmlSecError(XMLSEC_ERRORS_HERE,
++ xmlSecErrorsSafeString(xmlSecKeyDataStoreGetName(store)),
++ "CertOpenStore",
++ XMLSEC_ERRORS_R_CRYPTO_FAILED,
++ XMLSEC_ERRORS_NO_MESSAGE);
++ return(-1);
++ }
++
+ /* create trusted certs store */
+- ctx->trusted = CertOpenStore(CERT_STORE_PROV_MEMORY,
++ hTrustedMemStore = CertOpenStore(CERT_STORE_PROV_MEMORY,
+ X509_ASN_ENCODING | PKCS_7_ASN_ENCODING,
+ 0,
+ CERT_STORE_CREATE_NEW_FLAG,
+ NULL);
+- if(ctx->trusted == NULL) {
++ if(hTrustedMemStore == NULL) {
+ xmlSecError(XMLSEC_ERRORS_HERE,
+ xmlSecErrorsSafeString(xmlSecKeyDataStoreGetName(store)),
+ "CertOpenStore",
+ XMLSEC_ERRORS_R_CRYPTO_FAILED,
+ XMLSEC_ERRORS_NO_MESSAGE);
++ CertCloseStore(ctx->trusted, CERT_CLOSE_STORE_FORCE_FLAG);
++ ctx->trusted = NULL ;
+ return(-1);
+ }
+
+- /* create trusted certs store */
+- ctx->untrusted = CertOpenStore(CERT_STORE_PROV_MEMORY,
++ /* add the memory trusted certs store to trusted certs store collection */
++ if( !CertAddStoreToCollection( ctx->trusted, hTrustedMemStore, CERT_PHYSICAL_STORE_ADD_ENABLE_FLAG, 1 ) ) {
++ xmlSecError(XMLSEC_ERRORS_HERE,
++ xmlSecErrorsSafeString(xmlSecKeyDataStoreGetName(store)),
++ "CertAddStoreToCollection",
++ XMLSEC_ERRORS_R_CRYPTO_FAILED,
++ XMLSEC_ERRORS_NO_MESSAGE);
++ CertCloseStore(ctx->trusted, CERT_CLOSE_STORE_FORCE_FLAG);
++ CertCloseStore(hTrustedMemStore, CERT_CLOSE_STORE_CHECK_FLAG);
++ ctx->trusted = NULL ;
++ return(-1);
++ }
++ CertCloseStore(hTrustedMemStore, CERT_CLOSE_STORE_CHECK_FLAG);
++
++ /* create untrusted certs store collection */
++ ctx->untrusted = CertOpenStore(CERT_STORE_PROV_COLLECTION,
++ 0,
++ NULL,
++ 0,
++ NULL);
++ if(ctx->untrusted == NULL) {
++ xmlSecError(XMLSEC_ERRORS_HERE,
++ xmlSecErrorsSafeString(xmlSecKeyDataStoreGetName(store)),
++ "CertOpenStore",
++ XMLSEC_ERRORS_R_CRYPTO_FAILED,
++ XMLSEC_ERRORS_NO_MESSAGE);
++ CertCloseStore(ctx->trusted, CERT_CLOSE_STORE_FORCE_FLAG);
++ ctx->trusted = NULL ;
++ return(-1);
++ }
++
++ /* create untrusted certs store */
++ hUntrustedMemStore = CertOpenStore(CERT_STORE_PROV_MEMORY,
+ X509_ASN_ENCODING | PKCS_7_ASN_ENCODING,
+ 0,
+ CERT_STORE_CREATE_NEW_FLAG,
+ NULL);
+- if(ctx->untrusted == NULL) {
++ if(hUntrustedMemStore == NULL) {
+ xmlSecError(XMLSEC_ERRORS_HERE,
+ xmlSecErrorsSafeString(xmlSecKeyDataStoreGetName(store)),
+ "CertOpenStore",
+ XMLSEC_ERRORS_R_CRYPTO_FAILED,
+ XMLSEC_ERRORS_NO_MESSAGE);
++ CertCloseStore(ctx->trusted, CERT_CLOSE_STORE_FORCE_FLAG);
++ CertCloseStore(ctx->untrusted, CERT_CLOSE_STORE_FORCE_FLAG);
++ ctx->trusted = NULL ;
++ ctx->untrusted = NULL ;
+ return(-1);
+ }
+
++ /* add the memory trusted certs store to untrusted certs store collection */
++ if( !CertAddStoreToCollection( ctx->untrusted, hUntrustedMemStore, CERT_PHYSICAL_STORE_ADD_ENABLE_FLAG, 1 ) ) {
++ xmlSecError(XMLSEC_ERRORS_HERE,
++ xmlSecErrorsSafeString(xmlSecKeyDataStoreGetName(store)),
++ "CertAddStoreToCollection",
++ XMLSEC_ERRORS_R_CRYPTO_FAILED,
++ XMLSEC_ERRORS_NO_MESSAGE);
++ CertCloseStore(ctx->untrusted, CERT_CLOSE_STORE_FORCE_FLAG);
++ CertCloseStore(ctx->trusted, CERT_CLOSE_STORE_FORCE_FLAG);
++ CertCloseStore(hUntrustedMemStore, CERT_CLOSE_STORE_CHECK_FLAG);
++ ctx->trusted = NULL ;
++ ctx->untrusted = NULL ;
++ return(-1);
++ }
++ CertCloseStore(hUntrustedMemStore, CERT_CLOSE_STORE_CHECK_FLAG);
++
+ return(0);
+ }
+
+@@ -567,10 +829,41 @@
+
+ if((pCert == NULL) && (NULL != issuerName) && (NULL != issuerSerial)) {
+ xmlSecBn issuerSerialBn;
++ xmlChar * p;
+ CERT_NAME_BLOB cnb;
++ CRYPT_INTEGER_BLOB cib;
+ BYTE *cName = NULL;
+ DWORD cNameLen = 0;
++
++ /* aleksey: for some unknown to me reasons, mscrypto wants Email
++ * instead of emailAddress. This code is not bullet proof and may
++ * produce incorrect results if someone has "emailAddress=" string
++ * in one of the fields, but it is best I can suggest to fix this problem.
++ * Also see xmlSecMSCryptoX509NameWrite function.
++ */
++ while( (p = (xmlChar*)xmlStrstr(issuerName, BAD_CAST "emailAddress=")) != NULL) {
++ memcpy(p, " Email=", 13);
++ }
++
++
++
++ /* get issuer name */
++ cName = xmlSecMSCryptoCertStrToName(X509_ASN_ENCODING | PKCS_7_ASN_ENCODING,
++ issuerName,
++ CERT_NAME_STR_ENABLE_UTF8_UNICODE_FLAG | CERT_OID_NAME_STR | CERT_NAME_STR_REVERSE_FLAG,
++ &cNameLen);
++ if(cName == NULL) {
++ xmlSecError(XMLSEC_ERRORS_HERE,
++ NULL,
++ "xmlSecMSCryptoCertStrToName",
++ XMLSEC_ERRORS_R_XMLSEC_FAILED,
++ XMLSEC_ERRORS_NO_MESSAGE);
++ return (NULL);
++ }
++ cnb.pbData = cName;
++ cnb.cbData = cNameLen;
+
++ /* get serial number */
+ ret = xmlSecBnInitialize(&issuerSerialBn, 0);
+ if(ret < 0) {
+ xmlSecError(XMLSEC_ERRORS_HERE,
+@@ -578,6 +871,7 @@
+ "xmlSecBnInitialize",
+ XMLSEC_ERRORS_R_XMLSEC_FAILED,
+ XMLSEC_ERRORS_NO_MESSAGE);
++ xmlFree(cName);
+ return(NULL);
+ }
+
+@@ -589,26 +883,30 @@
+ XMLSEC_ERRORS_R_XMLSEC_FAILED,
+ XMLSEC_ERRORS_NO_MESSAGE);
+ xmlSecBnFinalize(&issuerSerialBn);
+- return(NULL);
++ xmlFree(cName);
++ return(NULL);
+ }
+
+- cName = xmlSecMSCryptoCertStrToName(X509_ASN_ENCODING | PKCS_7_ASN_ENCODING,
+- issuerName,
+- CERT_OID_NAME_STR | CERT_NAME_STR_REVERSE_FLAG,
+- &cNameLen);
+- if(cName == NULL) {
++ /* I have no clue why at a sudden a swap is needed to
++ * convert from lsb... This code is purely based upon
++ * trial and error :( WK
++ */
++ ret = xmlSecBnReverse(&issuerSerialBn);
++ if(ret < 0) {
+ xmlSecError(XMLSEC_ERRORS_HERE,
+ NULL,
+- "xmlSecMSCryptoCertStrToName",
++ "xmlSecBnReverse",
+ XMLSEC_ERRORS_R_XMLSEC_FAILED,
+ XMLSEC_ERRORS_NO_MESSAGE);
+ xmlSecBnFinalize(&issuerSerialBn);
+- return (NULL);
++ xmlFree(cName);
++ return(NULL);
+ }
+
+- cnb.pbData = cName;
+- cnb.cbData = cNameLen;
+- while((pCert = CertFindCertificateInStore(store,
++ cib.pbData = xmlSecBufferGetData(&issuerSerialBn);
++ cib.cbData = xmlSecBufferGetSize(&issuerSerialBn);
++
++ while((pCert = CertFindCertificateInStore(store,
+ PKCS_7_ASN_ENCODING | X509_ASN_ENCODING,
+ 0,
+ CERT_FIND_ISSUER_NAME,
+@@ -622,10 +920,9 @@
+ if((pCert->pCertInfo != NULL) &&
+ (pCert->pCertInfo->SerialNumber.pbData != NULL) &&
+ (pCert->pCertInfo->SerialNumber.cbData > 0) &&
+- (0 == xmlSecBnCompareReverse(&issuerSerialBn, pCert->pCertInfo->SerialNumber.pbData,
+- pCert->pCertInfo->SerialNumber.cbData))) {
+-
+- break;
++ (CertCompareIntegerBlob(&(pCert->pCertInfo->SerialNumber), &cib) == TRUE)
++ ) {
++ break;
+ }
+ }
+ xmlFree(cName);
+--- misc/xmlsec1-1.2.6/src/nss/Makefile.am 2003-09-16 11:43:03.000000000 +0200
++++ misc/build/xmlsec1-1.2.6/src/nss/Makefile.am 2008-06-29 23:44:19.000000000 +0200
+@@ -20,21 +20,22 @@
+ $(NULL)
+
+ libxmlsec1_nss_la_SOURCES =\
++ akmngr.c \
+ app.c \
+ bignum.c \
+ ciphers.c \
+ crypto.c \
+ digests.c \
+ hmac.c \
++ keysstore.c \
++ keytrans.c \
++ keywrapers.c \
+ pkikeys.c \
+ signatures.c \
+ symkeys.c \
++ tokens.c \
+ x509.c \
+ x509vfy.c \
+- keysstore.c \
+- kt_rsa.c \
+- kw_des.c \
+- kw_aes.c \
+ $(NULL)
+
+ libxmlsec1_nss_la_LIBADD = \
+--- misc/xmlsec1-1.2.6/src/nss/Makefile.in 2004-08-26 08:00:32.000000000 +0200
++++ misc/build/xmlsec1-1.2.6/src/nss/Makefile.in 2008-06-29 23:44:19.000000000 +0200
+@@ -54,9 +54,9 @@
+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
+ am__objects_1 =
+-am_libxmlsec1_nss_la_OBJECTS = app.lo bignum.lo ciphers.lo crypto.lo \
++am_libxmlsec1_nss_la_OBJECTS = akmngr.lo app.lo bignum.lo ciphers.lo crypto.lo \
+ digests.lo hmac.lo pkikeys.lo signatures.lo symkeys.lo x509.lo \
+- x509vfy.lo keysstore.lo kt_rsa.lo kw_des.lo kw_aes.lo \
++ x509vfy.lo keysstore.lo tokens.lo keytrans.lo keywrapers.lo \
+ $(am__objects_1)
+ libxmlsec1_nss_la_OBJECTS = $(am_libxmlsec1_nss_la_OBJECTS)
+ DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)
+@@ -65,11 +65,11 @@
+ @AMDEP_TRUE@DEP_FILES = ./$(DEPDIR)/app.Plo ./$(DEPDIR)/bignum.Plo \
+ @AMDEP_TRUE@ ./$(DEPDIR)/ciphers.Plo ./$(DEPDIR)/crypto.Plo \
+ @AMDEP_TRUE@ ./$(DEPDIR)/digests.Plo ./$(DEPDIR)/hmac.Plo \
+-@AMDEP_TRUE@ ./$(DEPDIR)/keysstore.Plo ./$(DEPDIR)/kt_rsa.Plo \
+-@AMDEP_TRUE@ ./$(DEPDIR)/kw_aes.Plo ./$(DEPDIR)/kw_des.Plo \
++@AMDEP_TRUE@ ./$(DEPDIR)/keysstore.Plo ./$(DEPDIR)/tokens.Plo \
++@AMDEP_TRUE@ ./$(DEPDIR)/keywrapers.Plo ./$(DEPDIR)/keytrans.Plo \
+ @AMDEP_TRUE@ ./$(DEPDIR)/pkikeys.Plo ./$(DEPDIR)/signatures.Plo \
+ @AMDEP_TRUE@ ./$(DEPDIR)/symkeys.Plo ./$(DEPDIR)/x509.Plo \
+-@AMDEP_TRUE@ ./$(DEPDIR)/x509vfy.Plo
++@AMDEP_TRUE@ ./$(DEPDIR)/x509vfy.Plo ./$(DEPDIR)/akmngr.Plo
+ COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+ LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) \
+@@ -321,21 +321,22 @@
+ $(NULL)
+
+ libxmlsec1_nss_la_SOURCES = \
++ akmngr.c \
+ app.c \
+ bignum.c \
+ ciphers.c \
+ crypto.c \
+ digests.c \
+ hmac.c \
++ keysstore.c \
++ keytrans.c \
++ keywrappers.c \
+ pkikeys.c \
+ signatures.c \
+ symkeys.c \
++ tokens.c \
+ x509.c \
+ x509vfy.c \
+- keysstore.c \
+- kt_rsa.c \
+- kw_des.c \
+- kw_aes.c \
+ $(NULL)
+
+ libxmlsec1_nss_la_LIBADD = \
+@@ -418,6 +419,7 @@
+ distclean-compile:
+ -rm -f *.tab.c
+
++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/akmngr.Plo@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/app.Plo@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bignum.Plo@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ciphers.Plo@am__quote@
+@@ -425,9 +427,9 @@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/digests.Plo@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hmac.Plo@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/keysstore.Plo@am__quote@
+-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/kt_rsa.Plo@am__quote@
+-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/kw_aes.Plo@am__quote@
+-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/kw_des.Plo@am__quote@
++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tokens.Plo@am__quote@
++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/keywrapers.Plo@am__quote@
++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/keytrans.Plo@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pkikeys.Plo@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/signatures.Plo@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/symkeys.Plo@am__quote@
+--- misc/xmlsec1-1.2.6/src/nss/akmngr.c 2008-06-29 23:44:39.000000000 +0200
++++ misc/build/xmlsec1-1.2.6/src/nss/akmngr.c 2008-06-29 23:44:19.000000000 +0200
+@@ -1 +1,384 @@
+-dummy
++/**
++ * XMLSec library
++ *
++ * This is free software; see Copyright file in the source
++ * distribution for preciese wording.
++ *
++ * Copyright.........................
++ */
++#include "globals.h"
++
++#include <nspr.h>
++#include <nss.h>
++#include <pk11func.h>
++#include <cert.h>
++#include <keyhi.h>
++
++#include <xmlsec/xmlsec.h>
++#include <xmlsec/keys.h>
++#include <xmlsec/transforms.h>
++#include <xmlsec/errors.h>
++
++#include <xmlsec/nss/crypto.h>
++#include <xmlsec/nss/tokens.h>
++#include <xmlsec/nss/akmngr.h>
++#include <xmlsec/nss/pkikeys.h>
++#include <xmlsec/nss/ciphers.h>
++#include <xmlsec/nss/keysstore.h>
++
++/**
++ * xmlSecNssAppliedKeysMngrCreate:
++ * @slot: array of pointers to NSS PKCS#11 slot infomation.
++ * @cSlots: number of slots in the array
++ * @handler: the pointer to NSS certificate database.
++ *
++ * Create and load NSS crypto slot and certificate database into keys manager
++ *
++ * Returns keys manager pointer on success or NULL otherwise.
++ */
++xmlSecKeysMngrPtr
++xmlSecNssAppliedKeysMngrCreate(
++ PK11SlotInfo** slots,
++ int cSlots,
++ CERTCertDBHandle* handler
++) {
++ xmlSecKeyDataStorePtr certStore = NULL ;
++ xmlSecKeysMngrPtr keyMngr = NULL ;
++ xmlSecKeyStorePtr keyStore = NULL ;
++ int islot = 0;
++ keyStore = xmlSecKeyStoreCreate( xmlSecNssKeysStoreId ) ;
++ if( keyStore == NULL ) {
++ xmlSecError( XMLSEC_ERRORS_HERE ,
++ NULL ,
++ "xmlSecKeyStoreCreate" ,
++ XMLSEC_ERRORS_R_XMLSEC_FAILED ,
++ XMLSEC_ERRORS_NO_MESSAGE ) ;
++ return NULL ;
++ }
++
++ for (islot = 0; islot < cSlots; islot++)
++ {
++ xmlSecNssKeySlotPtr keySlot ;
++
++ /* Create a key slot */
++ keySlot = xmlSecNssKeySlotCreate() ;
++ if( keySlot == NULL ) {
++ xmlSecError( XMLSEC_ERRORS_HERE ,
++ xmlSecErrorsSafeString( xmlSecKeyStoreGetName( keyStore ) ) ,
++ "xmlSecNssKeySlotCreate" ,
++ XMLSEC_ERRORS_R_XMLSEC_FAILED ,
++ XMLSEC_ERRORS_NO_MESSAGE ) ;
++
++ xmlSecKeyStoreDestroy( keyStore ) ;
++ return NULL ;
++ }
++
++ /* Set slot */
++ if( xmlSecNssKeySlotSetSlot( keySlot , slots[islot] ) < 0 ) {
++ xmlSecError( XMLSEC_ERRORS_HERE ,
++ xmlSecErrorsSafeString( xmlSecKeyStoreGetName( keyStore ) ) ,
++ "xmlSecNssKeySlotSetSlot" ,
++ XMLSEC_ERRORS_R_XMLSEC_FAILED ,
++ XMLSEC_ERRORS_NO_MESSAGE ) ;
++
++ xmlSecKeyStoreDestroy( keyStore ) ;
++ xmlSecNssKeySlotDestroy( keySlot ) ;
++ return NULL ;
++ }
++
++ /* Adopt keySlot */
++ if( xmlSecNssKeysStoreAdoptKeySlot( keyStore , keySlot ) < 0 ) {
++ xmlSecError( XMLSEC_ERRORS_HERE ,
++ xmlSecErrorsSafeString( xmlSecKeyStoreGetName( keyStore ) ) ,
++ "xmlSecNssKeysStoreAdoptKeySlot" ,
++ XMLSEC_ERRORS_R_XMLSEC_FAILED ,
++ XMLSEC_ERRORS_NO_MESSAGE ) ;
++
++ xmlSecKeyStoreDestroy( keyStore ) ;
++ xmlSecNssKeySlotDestroy( keySlot ) ;
++ return NULL ;
++ }
++ }
++
++ keyMngr = xmlSecKeysMngrCreate() ;
++ if( keyMngr == NULL ) {
++ xmlSecError( XMLSEC_ERRORS_HERE ,
++ NULL ,
++ "xmlSecKeysMngrCreate" ,
++ XMLSEC_ERRORS_R_XMLSEC_FAILED ,
++ XMLSEC_ERRORS_NO_MESSAGE ) ;
++
++ xmlSecKeyStoreDestroy( keyStore ) ;
++ return NULL ;
++ }
++
++ /*-
++ * Add key store to manager, from now on keys manager destroys the store if
++ * needed
++ */
++ if( xmlSecKeysMngrAdoptKeysStore( keyMngr, keyStore ) < 0 ) {
++ xmlSecError( XMLSEC_ERRORS_HERE ,
++ xmlSecErrorsSafeString( xmlSecKeyStoreGetName( keyStore ) ) ,
++ "xmlSecKeysMngrAdoptKeyStore" ,
++ XMLSEC_ERRORS_R_XMLSEC_FAILED ,
++ XMLSEC_ERRORS_NO_MESSAGE ) ;
++
++ xmlSecKeyStoreDestroy( keyStore ) ;
++ xmlSecKeysMngrDestroy( keyMngr ) ;
++ return NULL ;
++ }
++
++ /*-
++ * Initialize crypto library specific data in keys manager
++ */
++ if( xmlSecNssKeysMngrInit( keyMngr ) < 0 ) {
++ xmlSecError( XMLSEC_ERRORS_HERE ,
++ NULL ,
++ "xmlSecKeysMngrCreate" ,
++ XMLSEC_ERRORS_R_XMLSEC_FAILED ,
++ XMLSEC_ERRORS_NO_MESSAGE ) ;
++
++ xmlSecKeysMngrDestroy( keyMngr ) ;
++ return NULL ;
++ }
++
++ /*-
++ * Set certificate databse to X509 key data store
++ */
++ /**
++ * Because Tej's implementation of certDB use the default DB, so I ignore
++ * the certDB handler at present. I'll modify the cert store sources to
++ * accept particular certDB instead of default ones.
++ certStore = xmlSecKeysMngrGetDataStore( keyMngr , xmlSecNssKeyDataStoreX509Id ) ;
++ if( certStore == NULL ) {
++ xmlSecError( XMLSEC_ERRORS_HERE ,
++ xmlSecErrorsSafeString( xmlSecKeyStoreGetName( keyStore ) ) ,
++ "xmlSecKeysMngrGetDataStore" ,
++ XMLSEC_ERRORS_R_XMLSEC_FAILED ,
++ XMLSEC_ERRORS_NO_MESSAGE ) ;
++
++ xmlSecKeysMngrDestroy( keyMngr ) ;
++ return NULL ;
++ }
++
++ if( xmlSecNssKeyDataStoreX509SetCertDb( certStore , handler ) < 0 ) {
++ xmlSecError( XMLSEC_ERRORS_HERE ,
++ xmlSecErrorsSafeString( xmlSecKeyStoreGetName( keyStore ) ) ,
++ "xmlSecNssKeyDataStoreX509SetCertDb" ,
++ XMLSEC_ERRORS_R_XMLSEC_FAILED ,
++ XMLSEC_ERRORS_NO_MESSAGE ) ;
++
++ xmlSecKeysMngrDestroy( keyMngr ) ;
++ return NULL ;
++ }
++ */
++
++ /*-
++ * Set the getKey callback
++ */
++ keyMngr->getKey = xmlSecKeysMngrGetKey ;
++
++ return keyMngr ;
++}
++
++int
++xmlSecNssAppliedKeysMngrSymKeyLoad(
++ xmlSecKeysMngrPtr mngr ,
++ PK11SymKey* symKey
++) {
++ xmlSecKeyPtr key ;
++ xmlSecKeyDataPtr data ;
++ xmlSecKeyStorePtr keyStore ;
++
++ xmlSecAssert2( mngr != NULL , -1 ) ;
++ xmlSecAssert2( symKey != NULL , -1 ) ;
++
++ keyStore = xmlSecKeysMngrGetKeysStore( mngr ) ;
++ if( keyStore == NULL ) {
++ xmlSecError( XMLSEC_ERRORS_HERE ,
++ NULL ,
++ "xmlSecKeysMngrGetKeysStore" ,
++ XMLSEC_ERRORS_R_XMLSEC_FAILED ,
++ XMLSEC_ERRORS_NO_MESSAGE ) ;
++ return(-1) ;
++ }
++ xmlSecAssert2( xmlSecKeyStoreCheckId( keyStore , xmlSecNssKeysStoreId ) , -1 ) ;
++
++ data = xmlSecNssSymKeyDataKeyAdopt( symKey ) ;
++ if( data == NULL ) {
++ xmlSecError( XMLSEC_ERRORS_HERE ,
++ NULL ,
++ "xmlSecNssSymKeyDataKeyAdopt" ,
++ XMLSEC_ERRORS_R_XMLSEC_FAILED ,
++ XMLSEC_ERRORS_NO_MESSAGE ) ;
++ return(-1) ;
++ }
++
++ key = xmlSecKeyCreate() ;
++ if( key == NULL ) {
++ xmlSecError( XMLSEC_ERRORS_HERE ,
++ NULL ,
++ "xmlSecNssSymKeyDataKeyAdopt" ,
++ XMLSEC_ERRORS_R_XMLSEC_FAILED ,
++ XMLSEC_ERRORS_NO_MESSAGE ) ;
++ xmlSecKeyDataDestroy( data ) ;
++ return(-1) ;
++ }
++
++ if( xmlSecKeySetValue( key , data ) < 0 ) {
++ xmlSecError( XMLSEC_ERRORS_HERE ,
++ NULL ,
++ "xmlSecNssSymKeyDataKeyAdopt" ,
++ XMLSEC_ERRORS_R_XMLSEC_FAILED ,
++ XMLSEC_ERRORS_NO_MESSAGE ) ;
++ xmlSecKeyDataDestroy( data ) ;
++ return(-1) ;
++ }
++
++ if( xmlSecNssKeysStoreAdoptKey( keyStore, key ) < 0 ) {
++ xmlSecError( XMLSEC_ERRORS_HERE ,
++ NULL ,
++ "xmlSecNssSymKeyDataKeyAdopt" ,
++ XMLSEC_ERRORS_R_XMLSEC_FAILED ,
++ XMLSEC_ERRORS_NO_MESSAGE ) ;
++ xmlSecKeyDestroy( key ) ;
++ return(-1) ;
++ }
++
++ return(0) ;
++}
++
++int
++xmlSecNssAppliedKeysMngrPubKeyLoad(
++ xmlSecKeysMngrPtr mngr ,
++ SECKEYPublicKey* pubKey
++) {
++ xmlSecKeyPtr key ;
++ xmlSecKeyDataPtr data ;
++ xmlSecKeyStorePtr keyStore ;
++
++ xmlSecAssert2( mngr != NULL , -1 ) ;
++ xmlSecAssert2( pubKey != NULL , -1 ) ;
++
++ keyStore = xmlSecKeysMngrGetKeysStore( mngr ) ;
++ if( keyStore == NULL ) {
++ xmlSecError( XMLSEC_ERRORS_HERE ,
++ NULL ,
++ "xmlSecKeysMngrGetKeysStore" ,
++ XMLSEC_ERRORS_R_XMLSEC_FAILED ,
++ XMLSEC_ERRORS_NO_MESSAGE ) ;
++ return(-1) ;
++ }
++ xmlSecAssert2( xmlSecKeyStoreCheckId( keyStore , xmlSecNssKeysStoreId ) , -1 ) ;
++
++ data = xmlSecNssPKIAdoptKey( NULL, pubKey ) ;
++ if( data == NULL ) {
++ xmlSecError( XMLSEC_ERRORS_HERE ,
++ NULL ,
++ "xmlSecNssPKIAdoptKey" ,
++ XMLSEC_ERRORS_R_XMLSEC_FAILED ,
++ XMLSEC_ERRORS_NO_MESSAGE ) ;
++ return(-1) ;
++ }
++
++ key = xmlSecKeyCreate() ;
++ if( key == NULL ) {
++ xmlSecError( XMLSEC_ERRORS_HERE ,
++ NULL ,
++ "xmlSecNssSymKeyDataKeyAdopt" ,
++ XMLSEC_ERRORS_R_XMLSEC_FAILED ,
++ XMLSEC_ERRORS_NO_MESSAGE ) ;
++ xmlSecKeyDataDestroy( data ) ;
++ return(-1) ;
++ }
++
++ if( xmlSecKeySetValue( key , data ) < 0 ) {
++ xmlSecError( XMLSEC_ERRORS_HERE ,
++ NULL ,
++ "xmlSecNssSymKeyDataKeyAdopt" ,
++ XMLSEC_ERRORS_R_XMLSEC_FAILED ,
++ XMLSEC_ERRORS_NO_MESSAGE ) ;
++ xmlSecKeyDataDestroy( data ) ;
++ return(-1) ;
++ }
++
++ if( xmlSecNssKeysStoreAdoptKey( keyStore, key ) < 0 ) {
++ xmlSecError( XMLSEC_ERRORS_HERE ,
++ NULL ,
++ "xmlSecNssSymKeyDataKeyAdopt" ,
++ XMLSEC_ERRORS_R_XMLSEC_FAILED ,
++ XMLSEC_ERRORS_NO_MESSAGE ) ;
++ xmlSecKeyDestroy( key ) ;
++ return(-1) ;
++ }
++
++ return(0) ;
++}
++
++int
++xmlSecNssAppliedKeysMngrPriKeyLoad(
++ xmlSecKeysMngrPtr mngr ,
++ SECKEYPrivateKey* priKey
++) {
++ xmlSecKeyPtr key ;
++ xmlSecKeyDataPtr data ;
++ xmlSecKeyStorePtr keyStore ;
++
++ xmlSecAssert2( mngr != NULL , -1 ) ;
++ xmlSecAssert2( priKey != NULL , -1 ) ;
++
++ keyStore = xmlSecKeysMngrGetKeysStore( mngr ) ;
++ if( keyStore == NULL ) {
++ xmlSecError( XMLSEC_ERRORS_HERE ,
++ NULL ,
++ "xmlSecKeysMngrGetKeysStore" ,
++ XMLSEC_ERRORS_R_XMLSEC_FAILED ,
++ XMLSEC_ERRORS_NO_MESSAGE ) ;
++ return(-1) ;
++ }
++ xmlSecAssert2( xmlSecKeyStoreCheckId( keyStore , xmlSecNssKeysStoreId ) , -1 ) ;
++
++ data = xmlSecNssPKIAdoptKey( priKey, NULL ) ;
++ if( data == NULL ) {
++ xmlSecError( XMLSEC_ERRORS_HERE ,
++ NULL ,
++ "xmlSecNssPKIAdoptKey" ,
++ XMLSEC_ERRORS_R_XMLSEC_FAILED ,
++ XMLSEC_ERRORS_NO_MESSAGE ) ;
++ return(-1) ;
++ }
++
++ key = xmlSecKeyCreate() ;
++ if( key == NULL ) {
++ xmlSecError( XMLSEC_ERRORS_HERE ,
++ NULL ,
++ "xmlSecNssSymKeyDataKeyAdopt" ,
++ XMLSEC_ERRORS_R_XMLSEC_FAILED ,
++ XMLSEC_ERRORS_NO_MESSAGE ) ;
++ xmlSecKeyDataDestroy( data ) ;
++ return(-1) ;
++ }
++
++ if( xmlSecKeySetValue( key , data ) < 0 ) {
++ xmlSecError( XMLSEC_ERRORS_HERE ,
++ NULL ,
++ "xmlSecNssSymKeyDataKeyAdopt" ,
++ XMLSEC_ERRORS_R_XMLSEC_FAILED ,
++ XMLSEC_ERRORS_NO_MESSAGE ) ;
++ xmlSecKeyDataDestroy( data ) ;
++ return(-1) ;
++ }
++
++ if( xmlSecNssKeysStoreAdoptKey( keyStore, key ) < 0 ) {
++ xmlSecError( XMLSEC_ERRORS_HERE ,
++ NULL ,
++ "xmlSecNssSymKeyDataKeyAdopt" ,
++ XMLSEC_ERRORS_R_XMLSEC_FAILED ,
++ XMLSEC_ERRORS_NO_MESSAGE ) ;
++ xmlSecKeyDestroy( key ) ;
++ return(-1) ;
++ }
++
++ return(0) ;
++}
++
+--- misc/xmlsec1-1.2.6/src/nss/ciphers.c 2003-09-26 02:58:15.000000000 +0200
++++ misc/build/xmlsec1-1.2.6/src/nss/ciphers.c 2008-06-29 23:44:19.000000000 +0200
+@@ -1,838 +1,967 @@
+-/**
+- * XMLSec library
+- *
+- * This is free software; see Copyright file in the source
+- * distribution for preciese wording.
+- *
+- * Copyright (C) 2002-2003 Aleksey Sanin <aleksey@aleksey.com>
+- * Copyright (c) 2003 America Online, Inc. All rights reserved.
+- */
++/* -- C Source File -- **/
+ #include "globals.h"
+
++#include <stdlib.h>
+ #include <string.h>
+
+-#include <nspr.h>
+ #include <nss.h>
+-#include <secoid.h>
+ #include <pk11func.h>
+
+ #include <xmlsec/xmlsec.h>
++#include <xmlsec/xmltree.h>
++#include <xmlsec/base64.h>
+ #include <xmlsec/keys.h>
++#include <xmlsec/keyinfo.h>
+ #include <xmlsec/transforms.h>
+ #include <xmlsec/errors.h>
+
+ #include <xmlsec/nss/crypto.h>
++#include <xmlsec/nss/ciphers.h>
+
+-#define XMLSEC_NSS_MAX_KEY_SIZE 32
+-#define XMLSEC_NSS_MAX_IV_SIZE 32
+-#define XMLSEC_NSS_MAX_BLOCK_SIZE 32
+-
+-/**************************************************************************
+- *
+- * Internal Nss Block cipher CTX
++/**
++ * Internal Nss Block Cipher Context
+ *
+- *****************************************************************************/
+-typedef struct _xmlSecNssBlockCipherCtx xmlSecNssBlockCipherCtx,
+- *xmlSecNssBlockCipherCtxPtr;
++ * This context is designed for repositing a block cipher for transform
++ */
++typedef struct _xmlSecNssBlockCipherCtx xmlSecNssBlockCipherCtx ;
++typedef struct _xmlSecNssBlockCipherCtx* xmlSecNssBlockCipherCtxPtr ;
++
+ struct _xmlSecNssBlockCipherCtx {
+- CK_MECHANISM_TYPE cipher;
+- PK11Context* cipherCtx;
+- xmlSecKeyDataId keyId;
+- int keyInitialized;
+- int ctxInitialized;
+- xmlSecByte key[XMLSEC_NSS_MAX_KEY_SIZE];
+- xmlSecSize keySize;
+- xmlSecByte iv[XMLSEC_NSS_MAX_IV_SIZE];
+- xmlSecSize ivSize;
+-};
+-static int xmlSecNssBlockCipherCtxInit (xmlSecNssBlockCipherCtxPtr ctx,
+- xmlSecBufferPtr in,
+- xmlSecBufferPtr out,
+- int encrypt,
+- const xmlChar* cipherName,
+- xmlSecTransformCtxPtr transformCtx);
+-static int xmlSecNssBlockCipherCtxUpdate (xmlSecNssBlockCipherCtxPtr ctx,
+- xmlSecBufferPtr in,
+- xmlSecBufferPtr out,
+- int encrypt,
+- const xmlChar* cipherName,
+- xmlSecTransformCtxPtr transformCtx);
+-static int xmlSecNssBlockCipherCtxFinal (xmlSecNssBlockCipherCtxPtr ctx,
+- xmlSecBufferPtr in,
+- xmlSecBufferPtr out,
+- int encrypt,
+- const xmlChar* cipherName,
+- xmlSecTransformCtxPtr transformCtx);
+-static int
+-xmlSecNssBlockCipherCtxInit(xmlSecNssBlockCipherCtxPtr ctx,
+- xmlSecBufferPtr in, xmlSecBufferPtr out,
+- int encrypt,
+- const xmlChar* cipherName,
+- xmlSecTransformCtxPtr transformCtx) {
+- SECItem keyItem;
+- SECItem ivItem;
+- PK11SlotInfo* slot;
+- PK11SymKey* symKey;
+- int ivLen;
+- SECStatus rv;
+- int ret;
+-
+- xmlSecAssert2(ctx != NULL, -1);
+- xmlSecAssert2(ctx->cipher != 0, -1);
+- xmlSecAssert2(ctx->cipherCtx == NULL, -1);
+- xmlSecAssert2(ctx->keyInitialized != 0, -1);
+- xmlSecAssert2(ctx->ctxInitialized == 0, -1);
+- xmlSecAssert2(in != NULL, -1);
+- xmlSecAssert2(out != NULL, -1);
+- xmlSecAssert2(transformCtx != NULL, -1);
+-
+- ivLen = PK11_GetIVLength(ctx->cipher);
+- xmlSecAssert2(ivLen > 0, -1);
+- xmlSecAssert2((xmlSecSize)ivLen <= sizeof(ctx->iv), -1);
+-
+- if(encrypt) {
+- /* generate random iv */
+- rv = PK11_GenerateRandom(ctx->iv, ivLen);
+- if(rv != SECSuccess) {
+- xmlSecError(XMLSEC_ERRORS_HERE,
+- xmlSecErrorsSafeString(cipherName),
+- "PK11_GenerateRandom",
+- XMLSEC_ERRORS_R_CRYPTO_FAILED,
+- "size=%d", ivLen);
+- return(-1);
+- }
+-
+- /* write iv to the output */
+- ret = xmlSecBufferAppend(out, ctx->iv, ivLen);
+- if(ret < 0) {
+- xmlSecError(XMLSEC_ERRORS_HERE,
+- xmlSecErrorsSafeString(cipherName),
+- "xmlSecBufferAppend",
+- XMLSEC_ERRORS_R_XMLSEC_FAILED,
+- "size=%d", ivLen);
+- return(-1);
+- }
+-
+- } else {
+- /* if we don't have enough data, exit and hope that
+- * we'll have iv next time */
+- if(xmlSecBufferGetSize(in) < (xmlSecSize)ivLen) {
+- return(0);
+- }
+-
+- /* copy iv to our buffer*/
+- xmlSecAssert2(xmlSecBufferGetData(in) != NULL, -1);
+- memcpy(ctx->iv, xmlSecBufferGetData(in), ivLen);
+-
+- /* and remove from input */
+- ret = xmlSecBufferRemoveHead(in, ivLen);
+- if(ret < 0) {
+- xmlSecError(XMLSEC_ERRORS_HERE,
+- xmlSecErrorsSafeString(cipherName),
+- "xmlSecBufferRemoveHead",
+- XMLSEC_ERRORS_R_XMLSEC_FAILED,
+- "size=%d", ivLen);
+- return(-1);
++ CK_MECHANISM_TYPE cipher ;
++ PK11SymKey* symkey ;
++ PK11Context* cipherCtx ;
++ xmlSecKeyDataId keyId ;
++} ;
++
++#define xmlSecNssBlockCipherSize \
++ ( sizeof( xmlSecTransform ) + sizeof( xmlSecNssBlockCipherCtx ) )
++
++#define xmlSecNssBlockCipherGetCtx( transform ) \
++ ( ( xmlSecNssBlockCipherCtxPtr )( ( ( xmlSecByte* )( transform ) ) + sizeof( xmlSecTransform ) ) )
++
++static int
++xmlSecNssBlockCipherCheckId(
++ xmlSecTransformPtr transform
++) {
++ #ifndef XMLSEC_NO_DES
++ if( xmlSecTransformCheckId( transform, xmlSecNssTransformDes3CbcId ) ) {
++ return 1 ;
+ }
+- }
++ #endif /* XMLSEC_NO_DES */
+
+- memset(&keyItem, 0, sizeof(keyItem));
+- keyItem.data = ctx->key;
+- keyItem.len = ctx->keySize;
+- memset(&ivItem, 0, sizeof(ivItem));
+- ivItem.data = ctx->iv;
+- ivItem.len = ctx->ivSize;
+-
+- slot = PK11_GetBestSlot(ctx->cipher, NULL);
+- if(slot == NULL) {
+- xmlSecError(XMLSEC_ERRORS_HERE,
+- xmlSecErrorsSafeString(cipherName),
+- "PK11_GetBestSlot",
+- XMLSEC_ERRORS_R_CRYPTO_FAILED,
+- XMLSEC_ERRORS_NO_MESSAGE);
+- return(-1);
+- }
+-
+- symKey = PK11_ImportSymKey(slot, ctx->cipher, PK11_OriginDerive,
+- CKA_SIGN, &keyItem, NULL);
+- if(symKey == NULL) {
+- xmlSecError(XMLSEC_ERRORS_HERE,
+- xmlSecErrorsSafeString(cipherName),
+- "PK11_ImportSymKey",
+- XMLSEC_ERRORS_R_CRYPTO_FAILED,
+- XMLSEC_ERRORS_NO_MESSAGE);
+- PK11_FreeSlot(slot);
+- return(-1);
+- }
++ #ifndef XMLSEC_NO_AES
++ if( xmlSecTransformCheckId( transform, xmlSecNssTransformAes128CbcId ) ||
++ xmlSecTransformCheckId( transform, xmlSecNssTransformAes192CbcId ) ||
++ xmlSecTransformCheckId( transform, xmlSecNssTransformAes256CbcId ) ) {
+
+- ctx->cipherCtx = PK11_CreateContextBySymKey(ctx->cipher,
+- (encrypt) ? CKA_ENCRYPT : CKA_DECRYPT,
+- symKey, &ivItem);
+- if(ctx->cipherCtx == NULL) {
+- xmlSecError(XMLSEC_ERRORS_HERE,
+- xmlSecErrorsSafeString(cipherName),
+- "PK11_CreateContextBySymKey",
+- XMLSEC_ERRORS_R_CRYPTO_FAILED,
+- XMLSEC_ERRORS_NO_MESSAGE);
+- PK11_FreeSymKey(symKey);
+- PK11_FreeSlot(slot);
+- return(-1);
++ return 1 ;
+ }
+-
+- ctx->ctxInitialized = 1;
+- PK11_FreeSymKey(symKey);
+- PK11_FreeSlot(slot);
+- return(0);
++ #endif /* XMLSEC_NO_AES */
++
++ return 0 ;
+ }
+
+-static int
+-xmlSecNssBlockCipherCtxUpdate(xmlSecNssBlockCipherCtxPtr ctx,
+- xmlSecBufferPtr in, xmlSecBufferPtr out,
+- int encrypt,
+- const xmlChar* cipherName,
+- xmlSecTransformCtxPtr transformCtx) {
+- xmlSecSize inSize, inBlocks, outSize;
+- int blockLen;
+- int outLen = 0;
+- xmlSecByte* outBuf;
+- SECStatus rv;
+- int ret;
+-
+- xmlSecAssert2(ctx != NULL, -1);
+- xmlSecAssert2(ctx->cipher != 0, -1);
+- xmlSecAssert2(ctx->cipherCtx != NULL, -1);
+- xmlSecAssert2(ctx->ctxInitialized != 0, -1);
+- xmlSecAssert2(in != NULL, -1);
+- xmlSecAssert2(out != NULL, -1);
+- xmlSecAssert2(transformCtx != NULL, -1);
++static int
++xmlSecNssBlockCipherFetchCtx(
++ xmlSecNssBlockCipherCtxPtr context ,
++ xmlSecTransformId id
++) {
++ xmlSecAssert2( context != NULL, -1 ) ;
++
++ #ifndef XMLSEC_NO_DES
++ if( id == xmlSecNssTransformDes3CbcId ) {
++ context->cipher = CKM_DES3_CBC ;
++ context->keyId = xmlSecNssKeyDataDesId ;
++ } else
++ #endif /* XMLSEC_NO_DES */
++
++ #ifndef XMLSEC_NO_AES
++ if( id == xmlSecNssTransformAes128CbcId ) {
++ context->cipher = CKM_AES_CBC ;
++ context->keyId = xmlSecNssKeyDataAesId ;
++ } else
++ if( id == xmlSecNssTransformAes192CbcId ) {
++ context->cipher = CKM_AES_CBC ;
++ context->keyId = xmlSecNssKeyDataAesId ;
++ } else
++ if( id == xmlSecNssTransformAes256CbcId ) {
++ context->cipher = CKM_AES_CBC ;
++ context->keyId = xmlSecNssKeyDataAesId ;
++ } else
++ #endif /* XMLSEC_NO_AES */
++
++ if( 1 ) {
++ xmlSecError( XMLSEC_ERRORS_HERE ,
++ NULL ,
++ NULL ,
++ XMLSEC_ERRORS_R_CRYPTO_FAILED ,
++ XMLSEC_ERRORS_NO_MESSAGE ) ;
++ return -1 ;
++ }
+
+- blockLen = PK11_GetBlockSize(ctx->cipher, NULL);
+- xmlSecAssert2(blockLen > 0, -1);
++ return 0 ;
++}
+
+- inSize = xmlSecBufferGetSize(in);
+- outSize = xmlSecBufferGetSize(out);
+-
+- if(inSize < (xmlSecSize)blockLen) {
+- return(0);
+- }
++/**
++ * xmlSecTransformInitializeMethod:
++ * @transform: the pointer to transform object.
++ *
++ * The transform specific initialization method.
++ *
++ * Returns 0 on success or a negative value otherwise.
++ */
++static int
++xmlSecNssBlockCipherInitialize(
++ xmlSecTransformPtr transform
++) {
++ xmlSecNssBlockCipherCtxPtr context = NULL ;
++
++ xmlSecAssert2( xmlSecNssBlockCipherCheckId( transform ), -1 ) ;
++ xmlSecAssert2( xmlSecTransformCheckSize( transform, xmlSecNssBlockCipherSize ), -1 ) ;
++
++ context = xmlSecNssBlockCipherGetCtx( transform ) ;
++ if( context == NULL ) {
++ xmlSecError( XMLSEC_ERRORS_HERE ,
++ xmlSecErrorsSafeString( xmlSecTransformGetName( transform ) ) ,
++ "xmlSecNssBlockCipherGetCtx" ,
++ XMLSEC_ERRORS_R_CRYPTO_FAILED ,
++ XMLSEC_ERRORS_NO_MESSAGE ) ;
++ return -1 ;
++ }
++
++ if( xmlSecNssBlockCipherFetchCtx( context , transform->id ) < 0 ) {
++ xmlSecError( XMLSEC_ERRORS_HERE ,
++ xmlSecErrorsSafeString( xmlSecTransformGetName( transform ) ) ,
++ "xmlSecNssBlockCipherFetchCtx" ,
++ XMLSEC_ERRORS_R_CRYPTO_FAILED ,
++ XMLSEC_ERRORS_NO_MESSAGE ) ;
++ return -1 ;
++ }
+
+- if(encrypt) {
+- inBlocks = inSize / ((xmlSecSize)blockLen);
+- } else {
+- /* we want to have the last block in the input buffer
+- * for padding check */
+- inBlocks = (inSize - 1) / ((xmlSecSize)blockLen);
+- }
+- inSize = inBlocks * ((xmlSecSize)blockLen);
++ context->symkey = NULL ;
++ context->cipherCtx = NULL ;
+
+- /* we write out the input size plus may be one block */
+- ret = xmlSecBufferSetMaxSize(out, outSize + inSize + blockLen);
+- if(ret < 0) {
+- xmlSecError(XMLSEC_ERRORS_HERE,
+- xmlSecErrorsSafeString(cipherName),
+- "xmlSecBufferSetMaxSize",
+- XMLSEC_ERRORS_R_XMLSEC_FAILED,
+- "size=%d", outSize + inSize + blockLen);
+- return(-1);
+- }
+- outBuf = xmlSecBufferGetData(out) + outSize;
+-
+- rv = PK11_CipherOp(ctx->cipherCtx, outBuf, &outLen, inSize + blockLen,
+- xmlSecBufferGetData(in), inSize);
+- if(rv != SECSuccess) {
+- xmlSecError(XMLSEC_ERRORS_HERE,
+- xmlSecErrorsSafeString(cipherName),
+- "PK11_CipherOp",
+- XMLSEC_ERRORS_R_CRYPTO_FAILED,
+- XMLSEC_ERRORS_NO_MESSAGE);
+- return(-1);
+- }
+- xmlSecAssert2((xmlSecSize)outLen == inSize, -1);
+-
+- /* set correct output buffer size */
+- ret = xmlSecBufferSetSize(out, outSize + outLen);
+- if(ret < 0) {
+- xmlSecError(XMLSEC_ERRORS_HERE,
+- xmlSecErrorsSafeString(cipherName),
+- "xmlSecBufferSetSize",
+- XMLSEC_ERRORS_R_XMLSEC_FAILED,
+- "size=%d", outSize + outLen);
+- return(-1);
+- }
+-
+- /* remove the processed block from input */
+- ret = xmlSecBufferRemoveHead(in, inSize);
+- if(ret < 0) {
+- xmlSecError(XMLSEC_ERRORS_HERE,
+- xmlSecErrorsSafeString(cipherName),
+- "xmlSecBufferRemoveHead",
+- XMLSEC_ERRORS_R_XMLSEC_FAILED,
+- "size=%d", inSize);
+- return(-1);
+- }
+- return(0);
++ return 0 ;
+ }
+
+-static int
+-xmlSecNssBlockCipherCtxFinal(xmlSecNssBlockCipherCtxPtr ctx,
+- xmlSecBufferPtr in,
+- xmlSecBufferPtr out,
+- int encrypt,
+- const xmlChar* cipherName,
+- xmlSecTransformCtxPtr transformCtx) {
+- xmlSecSize inSize, outSize;
+- int blockLen, outLen = 0;
+- xmlSecByte* inBuf;
+- xmlSecByte* outBuf;
+- SECStatus rv;
+- int ret;
+-
+- xmlSecAssert2(ctx != NULL, -1);
+- xmlSecAssert2(ctx->cipher != 0, -1);
+- xmlSecAssert2(ctx->cipherCtx != NULL, -1);
+- xmlSecAssert2(ctx->ctxInitialized != 0, -1);
+- xmlSecAssert2(in != NULL, -1);
+- xmlSecAssert2(out != NULL, -1);
+- xmlSecAssert2(transformCtx != NULL, -1);
+-
+- blockLen = PK11_GetBlockSize(ctx->cipher, NULL);
+- xmlSecAssert2(blockLen > 0, -1);
++/**
++ * xmlSecTransformFinalizeMethod:
++ * @transform: the pointer to transform object.
++ *
++ * The transform specific destroy method.
++ */
++static void
++xmlSecNssBlockCipherFinalize(
++ xmlSecTransformPtr transform
++) {
++ xmlSecNssBlockCipherCtxPtr context = NULL ;
+
+- inSize = xmlSecBufferGetSize(in);
+- outSize = xmlSecBufferGetSize(out);
++ xmlSecAssert( xmlSecNssBlockCipherCheckId( transform ) ) ;
++ xmlSecAssert( xmlSecTransformCheckSize( transform, xmlSecNssBlockCipherSize ) ) ;
+
+- if(encrypt != 0) {
+- xmlSecAssert2(inSize < (xmlSecSize)blockLen, -1);
+-
+- /* create padding */
+- ret = xmlSecBufferSetMaxSize(in, blockLen);
+- if(ret < 0) {
+- xmlSecError(XMLSEC_ERRORS_HERE,
+- xmlSecErrorsSafeString(cipherName),
+- "xmlSecBufferSetMaxSize",
+- XMLSEC_ERRORS_R_XMLSEC_FAILED,
+- "size=%d", blockLen);
+- return(-1);
+- }
+- inBuf = xmlSecBufferGetData(in);
+-
+- /* generate random padding */
+- if((xmlSecSize)blockLen > (inSize + 1)) {
+- rv = PK11_GenerateRandom(inBuf + inSize, blockLen - inSize - 1);
+- if(rv != SECSuccess) {
+- xmlSecError(XMLSEC_ERRORS_HERE,
+- xmlSecErrorsSafeString(cipherName),
+- "PK11_GenerateRandom",
+- XMLSEC_ERRORS_R_CRYPTO_FAILED,
+- "size=%d", blockLen - inSize - 1);
+- return(-1);
+- }
+- }
+- inBuf[blockLen - 1] = blockLen - inSize;
+- inSize = blockLen;
+- } else {
+- if(inSize != (xmlSecSize)blockLen) {
+- xmlSecError(XMLSEC_ERRORS_HERE,
+- xmlSecErrorsSafeString(cipherName),
+- NULL,
+- XMLSEC_ERRORS_R_INVALID_DATA,
+- "data=%d;block=%d", inSize, blockLen);
+- return(-1);
++ context = xmlSecNssBlockCipherGetCtx( transform ) ;
++ if( context == NULL ) {
++ xmlSecError( XMLSEC_ERRORS_HERE ,
++ xmlSecErrorsSafeString( xmlSecTransformGetName( transform ) ) ,
++ "xmlSecNssBlockCipherGetCtx" ,
++ XMLSEC_ERRORS_R_CRYPTO_FAILED ,
++ XMLSEC_ERRORS_NO_MESSAGE ) ;
++ return ;
+ }
+- }
+-
+- /* process last block */
+- ret = xmlSecBufferSetMaxSize(out, outSize + 2 * blockLen);
+- if(ret < 0) {
+- xmlSecError(XMLSEC_ERRORS_HERE,
+- xmlSecErrorsSafeString(cipherName),
+- "xmlSecBufferSetMaxSize",
+- XMLSEC_ERRORS_R_XMLSEC_FAILED,
+- "size=%d", outSize + 2 * blockLen);
+- return(-1);
+- }
+- outBuf = xmlSecBufferGetData(out) + outSize;
+
+- rv = PK11_CipherOp(ctx->cipherCtx, outBuf, &outLen, 2 * blockLen,
+- xmlSecBufferGetData(in), inSize);
+- if(rv != SECSuccess) {
+- xmlSecError(XMLSEC_ERRORS_HERE,
+- xmlSecErrorsSafeString(cipherName),
+- "PK11_CipherOp",
+- XMLSEC_ERRORS_R_CRYPTO_FAILED,
+- XMLSEC_ERRORS_NO_MESSAGE);
+- return(-1);
+- }
+- xmlSecAssert2((xmlSecSize)outLen == inSize, -1);
+-
+- if(encrypt == 0) {
+- /* check padding */
+- if(outLen < outBuf[blockLen - 1]) {
+- xmlSecError(XMLSEC_ERRORS_HERE,
+- xmlSecErrorsSafeString(cipherName),
+- NULL,
+- XMLSEC_ERRORS_R_INVALID_DATA,
+- "padding=%d;buffer=%d",
+- outBuf[blockLen - 1], outLen);
+- return(-1);
+- }
+- outLen -= outBuf[blockLen - 1];
+- }
+-
+- /* set correct output buffer size */
+- ret = xmlSecBufferSetSize(out, outSize + outLen);
+- if(ret < 0) {
+- xmlSecError(XMLSEC_ERRORS_HERE,
+- xmlSecErrorsSafeString(cipherName),
+- "xmlSecBufferSetSize",
+- XMLSEC_ERRORS_R_XMLSEC_FAILED,
+- "size=%d", outSize + outLen);
+- return(-1);
+- }
++ if( context->cipherCtx != NULL ) {
++ PK11_DestroyContext( context->cipherCtx, PR_TRUE ) ;
++ context->cipherCtx = NULL ;
++ }
+
+- /* remove the processed block from input */
+- ret = xmlSecBufferRemoveHead(in, inSize);
+- if(ret < 0) {
+- xmlSecError(XMLSEC_ERRORS_HERE,
+- xmlSecErrorsSafeString(cipherName),
+- "xmlSecBufferRemoveHead",
+- XMLSEC_ERRORS_R_XMLSEC_FAILED,
+- "size=%d", inSize);
+- return(-1);
+- }
++ if( context->symkey != NULL ) {
++ PK11_FreeSymKey( context->symkey ) ;
++ context->symkey = NULL ;
++ }
+
+- return(0);
++ context->cipher = CKM_INVALID_MECHANISM ;
++ context->keyId = NULL ;
+ }
+
+-
+-/******************************************************************************
+- *
+- * EVP Block Cipher transforms
++/**
++ * xmlSecTransformSetKeyRequirementsMethod:
++ * @transform: the pointer to transform object.
++ * @keyReq: the pointer to key requirements structure.
+ *
+- * xmlSecNssBlockCipherCtx block is located after xmlSecTransform structure
++ * Transform specific method to set transform's key requirements.
+ *
+- *****************************************************************************/
+-#define xmlSecNssBlockCipherSize \
+- (sizeof(xmlSecTransform) + sizeof(xmlSecNssBlockCipherCtx))
+-#define xmlSecNssBlockCipherGetCtx(transform) \
+- ((xmlSecNssBlockCipherCtxPtr)(((xmlSecByte*)(transform)) + sizeof(xmlSecTransform)))
+-
+-static int xmlSecNssBlockCipherInitialize (xmlSecTransformPtr transform);
+-static void xmlSecNssBlockCipherFinalize (xmlSecTransformPtr transform);
+-static int xmlSecNssBlockCipherSetKeyReq (xmlSecTransformPtr transform,
+- xmlSecKeyReqPtr keyReq);
+-static int xmlSecNssBlockCipherSetKey (xmlSecTransformPtr transform,
+- xmlSecKeyPtr key);
+-static int xmlSecNssBlockCipherExecute (xmlSecTransformPtr transform,
+- int last,
+- xmlSecTransformCtxPtr transformCtx);
+-static int xmlSecNssBlockCipherCheckId (xmlSecTransformPtr transform);
+-
+-
++ * Returns 0 on success or a negative value otherwise.
++ */
++static int
++xmlSecNssBlockCipherSetKeyReq(
++ xmlSecTransformPtr transform ,
++ xmlSecKeyReqPtr keyReq
++) {
++ xmlSecNssBlockCipherCtxPtr context = NULL ;
++ xmlSecSize cipherSize = 0 ;
++
++ xmlSecAssert2( xmlSecNssBlockCipherCheckId( transform ), -1 ) ;
++ xmlSecAssert2( xmlSecTransformCheckSize( transform, xmlSecNssBlockCipherSize ), -1 ) ;
++ xmlSecAssert2( keyReq != NULL , -1 ) ;
++ xmlSecAssert2( ( transform->operation == xmlSecTransformOperationEncrypt ) || ( transform->operation == xmlSecTransformOperationDecrypt ), -1 ) ;
++
++ context = xmlSecNssBlockCipherGetCtx( transform ) ;
++ if( context == NULL ) {
++ xmlSecError( XMLSEC_ERRORS_HERE ,
++ xmlSecErrorsSafeString( xmlSecTransformGetName( transform ) ) ,
++ "xmlSecNssBlockCipherGetCtx" ,
++ XMLSEC_ERRORS_R_CRYPTO_FAILED ,
++ XMLSEC_ERRORS_NO_MESSAGE ) ;
++ return -1 ;
++ }
++
++ keyReq->keyId = context->keyId ;
++ keyReq->keyType = xmlSecKeyDataTypeSymmetric ;
++
++ if( transform->operation == xmlSecTransformOperationEncrypt ) {
++ keyReq->keyUsage = xmlSecKeyUsageEncrypt ;
++ } else {
++ keyReq->keyUsage = xmlSecKeyUsageDecrypt ;
++ }
++
++ /*
++ if( context->symkey != NULL )
++ cipherSize = PK11_GetKeyLength( context->symkey ) ;
+
+-static int
+-xmlSecNssBlockCipherCheckId(xmlSecTransformPtr transform) {
+-#ifndef XMLSEC_NO_DES
+- if(xmlSecTransformCheckId(transform, xmlSecNssTransformDes3CbcId)) {
+- return(1);
+- }
+-#endif /* XMLSEC_NO_DES */
++ keyReq->keyBitsSize = cipherSize * 8 ;
++ */
+
+-#ifndef XMLSEC_NO_AES
+- if(xmlSecTransformCheckId(transform, xmlSecNssTransformAes128CbcId) ||
+- xmlSecTransformCheckId(transform, xmlSecNssTransformAes192CbcId) ||
+- xmlSecTransformCheckId(transform, xmlSecNssTransformAes256CbcId)) {
+-
+- return(1);
+- }
+-#endif /* XMLSEC_NO_AES */
+-
+- return(0);
++ return 0 ;
+ }
+
+-static int
+-xmlSecNssBlockCipherInitialize(xmlSecTransformPtr transform) {
+- xmlSecNssBlockCipherCtxPtr ctx;
+-
+- xmlSecAssert2(xmlSecNssBlockCipherCheckId(transform), -1);
+- xmlSecAssert2(xmlSecTransformCheckSize(transform, xmlSecNssBlockCipherSize), -1);
++/**
++ * xmlSecTransformSetKeyMethod:
++ * @transform: the pointer to transform object.
++ * @key: the pointer to key.
++ *
++ * The transform specific method to set the key for use.
++ *
++ * Returns 0 on success or a negative value otherwise.
++ */
++static int
++xmlSecNssBlockCipherSetKey(
++ xmlSecTransformPtr transform ,
++ xmlSecKeyPtr key
++) {
++ xmlSecNssBlockCipherCtxPtr context = NULL ;
++ xmlSecKeyDataPtr keyData = NULL ;
++ PK11SymKey* symkey = NULL ;
++ CK_ATTRIBUTE_TYPE operation ;
++ int ivLen ;
++
++ xmlSecAssert2( xmlSecNssBlockCipherCheckId( transform ), -1 ) ;
++ xmlSecAssert2( xmlSecTransformCheckSize( transform, xmlSecNssBlockCipherSize ), -1 ) ;
++ xmlSecAssert2( key != NULL , -1 ) ;
++ xmlSecAssert2( ( transform->operation == xmlSecTransformOperationEncrypt ) || ( transform->operation == xmlSecTransformOperationDecrypt ), -1 ) ;
++
++ context = xmlSecNssBlockCipherGetCtx( transform ) ;
++ if( context == NULL || context->keyId == NULL || context->symkey != NULL ) {
++ xmlSecError( XMLSEC_ERRORS_HERE ,
++ xmlSecErrorsSafeString( xmlSecTransformGetName( transform ) ) ,
++ "xmlSecNssBlockCipherGetCtx" ,
++ XMLSEC_ERRORS_R_CRYPTO_FAILED ,
++ XMLSEC_ERRORS_NO_MESSAGE ) ;
++ return -1 ;
++ }
++ xmlSecAssert2( xmlSecKeyCheckId( key, context->keyId ), -1 ) ;
++
++ keyData = xmlSecKeyGetValue( key ) ;
++ if( keyData == NULL ) {
++ xmlSecError( XMLSEC_ERRORS_HERE ,
++ xmlSecErrorsSafeString( xmlSecKeyGetName( key ) ) ,
++ "xmlSecKeyGetValue" ,
++ XMLSEC_ERRORS_R_CRYPTO_FAILED ,
++ XMLSEC_ERRORS_NO_MESSAGE ) ;
++ return -1 ;
++ }
++
++ if( ( symkey = xmlSecNssSymKeyDataGetKey( keyData ) ) == NULL ) {
++ xmlSecError( XMLSEC_ERRORS_HERE ,
++ xmlSecErrorsSafeString( xmlSecKeyDataGetName( keyData ) ) ,
++ "xmlSecNssSymKeyDataGetKey" ,
++ XMLSEC_ERRORS_R_CRYPTO_FAILED ,
++ XMLSEC_ERRORS_NO_MESSAGE ) ;
++ return -1 ;
++ }
+
+- ctx = xmlSecNssBlockCipherGetCtx(transform);
+- xmlSecAssert2(ctx != NULL, -1);
+-
+- memset(ctx, 0, sizeof(xmlSecNssBlockCipherCtx));
++ context->symkey = symkey ;
+
+-#ifndef XMLSEC_NO_DES
+- if(transform->id == xmlSecNssTransformDes3CbcId) {
+- ctx->cipher = CKM_DES3_CBC;
+- ctx->keyId = xmlSecNssKeyDataDesId;
+- ctx->keySize = 24;
+- } else
+-#endif /* XMLSEC_NO_DES */
+-
+-#ifndef XMLSEC_NO_AES
+- if(transform->id == xmlSecNssTransformAes128CbcId) {
+- ctx->cipher = CKM_AES_CBC;
+- ctx->keyId = xmlSecNssKeyDataAesId;
+- ctx->keySize = 16;
+- } else if(transform->id == xmlSecNssTransformAes192CbcId) {
+- ctx->cipher = CKM_AES_CBC;
+- ctx->keyId = xmlSecNssKeyDataAesId;
+- ctx->keySize = 24;
+- } else if(transform->id == xmlSecNssTransformAes256CbcId) {
+- ctx->cipher = CKM_AES_CBC;
+- ctx->keyId = xmlSecNssKeyDataAesId;
+- ctx->keySize = 32;
+- } else
+-#endif /* XMLSEC_NO_AES */
+-
+- if(1) {
+- xmlSecError(XMLSEC_ERRORS_HERE,
+- xmlSecErrorsSafeString(xmlSecTransformGetName(transform)),
+- NULL,
+- XMLSEC_ERRORS_R_INVALID_TRANSFORM,
+- XMLSEC_ERRORS_NO_MESSAGE);
+- return(-1);
+- }
+-
+- return(0);
++ return 0 ;
+ }
+
+-static void
+-xmlSecNssBlockCipherFinalize(xmlSecTransformPtr transform) {
+- xmlSecNssBlockCipherCtxPtr ctx;
+-
+- xmlSecAssert(xmlSecNssBlockCipherCheckId(transform));
+- xmlSecAssert(xmlSecTransformCheckSize(transform, xmlSecNssBlockCipherSize));
++/**
++ * Block cipher transform init
++ */
++static int
++xmlSecNssBlockCipherCtxInit(
++ xmlSecNssBlockCipherCtxPtr ctx ,
++ xmlSecBufferPtr in ,
++ xmlSecBufferPtr out ,
++ int encrypt ,
++ const xmlChar* cipherName ,
++ xmlSecTransformCtxPtr transformCtx
++) {
++ SECItem ivItem ;
++ SECItem* secParam = NULL ;
++ xmlSecBufferPtr ivBuf = NULL ;
++ int ivLen ;
++
++ xmlSecAssert2( ctx != NULL , -1 ) ;
++ xmlSecAssert2( ctx->cipher != CKM_INVALID_MECHANISM , -1 ) ;
++ xmlSecAssert2( ctx->symkey != NULL , -1 ) ;
++ xmlSecAssert2( ctx->cipherCtx == NULL , -1 ) ;
++ xmlSecAssert2( ctx->keyId != NULL , -1 ) ;
++ xmlSecAssert2( in != NULL , -1 ) ;
++ xmlSecAssert2( out != NULL , -1 ) ;
++ xmlSecAssert2( transformCtx != NULL , -1 ) ;
++
++ ivLen = PK11_GetIVLength( ctx->cipher ) ;
++ if( ivLen < 0 ) {
++ xmlSecError( XMLSEC_ERRORS_HERE ,
++ NULL ,
++ "PK11_GetIVLength" ,
++ XMLSEC_ERRORS_R_CRYPTO_FAILED ,
++ XMLSEC_ERRORS_NO_MESSAGE ) ;
++ return -1 ;
++ }
++
++ if( ( ivBuf = xmlSecBufferCreate( ivLen ) ) == NULL ) {
++ xmlSecError( XMLSEC_ERRORS_HERE ,
++ NULL ,
++ "xmlSecBufferCreate" ,
++ XMLSEC_ERRORS_R_CRYPTO_FAILED ,
++ XMLSEC_ERRORS_NO_MESSAGE ) ;
++ return -1 ;
++ }
++
++ if( encrypt ) {
++ if( PK11_GenerateRandom( ivBuf->data , ivLen ) != SECSuccess ) {
++ xmlSecError( XMLSEC_ERRORS_HERE ,
++ xmlSecErrorsSafeString( cipherName ) ,
++ "PK11_GenerateRandom" ,
++ XMLSEC_ERRORS_R_CRYPTO_FAILED ,
++ XMLSEC_ERRORS_NO_MESSAGE ) ;
++ xmlSecBufferDestroy( ivBuf ) ;
++ return -1 ;
++ }
++ if( xmlSecBufferSetSize( ivBuf , ivLen ) < 0 ) {
++ xmlSecError( XMLSEC_ERRORS_HERE ,
++ NULL ,
++ "xmlSecBufferSetSize" ,
++ XMLSEC_ERRORS_R_CRYPTO_FAILED ,
++ XMLSEC_ERRORS_NO_MESSAGE ) ;
++ xmlSecBufferDestroy( ivBuf ) ;
++ return -1 ;
++ }
++
++ if( xmlSecBufferAppend( out , ivBuf->data , ivLen ) < 0 ) {
++ xmlSecError( XMLSEC_ERRORS_HERE ,
++ xmlSecErrorsSafeString( cipherName ) ,
++ "xmlSecBufferAppend" ,
++ XMLSEC_ERRORS_R_CRYPTO_FAILED ,
++ XMLSEC_ERRORS_NO_MESSAGE ) ;
++ xmlSecBufferDestroy( ivBuf ) ;
++ return -1 ;
++ }
++ } else {
++ if( xmlSecBufferSetData( ivBuf , in->data , ivLen ) < 0 ) {
++ xmlSecError( XMLSEC_ERRORS_HERE ,
++ xmlSecErrorsSafeString( cipherName ) ,
++ "xmlSecBufferSetData" ,
++ XMLSEC_ERRORS_R_CRYPTO_FAILED ,
++ XMLSEC_ERRORS_NO_MESSAGE ) ;
++ xmlSecBufferDestroy( ivBuf ) ;
++ return -1 ;
++ }
++
++ if( xmlSecBufferRemoveHead( in , ivLen ) < 0 ) {
++ xmlSecError( XMLSEC_ERRORS_HERE ,
++ xmlSecErrorsSafeString( cipherName ) ,
++ "xmlSecBufferRemoveHead" ,
++ XMLSEC_ERRORS_R_CRYPTO_FAILED ,
++ XMLSEC_ERRORS_NO_MESSAGE ) ;
++ xmlSecBufferDestroy( ivBuf ) ;
++ return -1 ;
++ }
++ }
++
++ ivItem.data = xmlSecBufferGetData( ivBuf ) ;
++ ivItem.len = xmlSecBufferGetSize( ivBuf ) ;
++ if( ( secParam = PK11_ParamFromIV( ctx->cipher , &ivItem ) ) == NULL ) {
++ xmlSecError( XMLSEC_ERRORS_HERE ,
++ xmlSecErrorsSafeString( cipherName ) ,
++ "PK11_ParamFromIV" ,
++ XMLSEC_ERRORS_R_CRYPTO_FAILED ,
++ XMLSEC_ERRORS_NO_MESSAGE ) ;
++ xmlSecBufferDestroy( ivBuf ) ;
++ return -1 ;
++ }
++
++ ctx->cipherCtx = PK11_CreateContextBySymKey( ctx->cipher , encrypt ? CKA_ENCRYPT : CKA_DECRYPT , ctx->symkey , secParam ) ;
++ if( ctx->cipherCtx == NULL ) {
++ xmlSecError( XMLSEC_ERRORS_HERE ,
++ xmlSecErrorsSafeString( cipherName ) ,
++ "xmlSecBufferRemoveHead" ,
++ XMLSEC_ERRORS_R_CRYPTO_FAILED ,
++ XMLSEC_ERRORS_NO_MESSAGE ) ;
++ SECITEM_FreeItem( secParam , PR_TRUE ) ;
++ xmlSecBufferDestroy( ivBuf ) ;
++ return -1 ;
++ }
+
+- ctx = xmlSecNssBlockCipherGetCtx(transform);
+- xmlSecAssert(ctx != NULL);
++ SECITEM_FreeItem( secParam , PR_TRUE ) ;
++ xmlSecBufferDestroy( ivBuf ) ;
+
+- if(ctx->cipherCtx != NULL) {
+- PK11_DestroyContext(ctx->cipherCtx, PR_TRUE);
+- }
+-
+- memset(ctx, 0, sizeof(xmlSecNssBlockCipherCtx));
++ return 0 ;
+ }
+
+-static int
+-xmlSecNssBlockCipherSetKeyReq(xmlSecTransformPtr transform, xmlSecKeyReqPtr keyReq) {
+- xmlSecNssBlockCipherCtxPtr ctx;
+-
+- xmlSecAssert2(xmlSecNssBlockCipherCheckId(transform), -1);
+- xmlSecAssert2((transform->operation == xmlSecTransformOperationEncrypt) || (transform->operation == xmlSecTransformOperationDecrypt), -1);
+- xmlSecAssert2(xmlSecTransformCheckSize(transform, xmlSecNssBlockCipherSize), -1);
+- xmlSecAssert2(keyReq != NULL, -1);
+-
+- ctx = xmlSecNssBlockCipherGetCtx(transform);
+- xmlSecAssert2(ctx != NULL, -1);
+- xmlSecAssert2(ctx->keyId != NULL, -1);
+-
+- keyReq->keyId = ctx->keyId;
+- keyReq->keyType = xmlSecKeyDataTypeSymmetric;
+- if(transform->operation == xmlSecTransformOperationEncrypt) {
+- keyReq->keyUsage = xmlSecKeyUsageEncrypt;
+- } else {
+- keyReq->keyUsage = xmlSecKeyUsageDecrypt;
+- }
+- keyReq->keyBitsSize = 8 * ctx->keySize;
+- return(0);
+-}
++/**
++ * Block cipher transform update
++ */
++static int
++xmlSecNssBlockCipherCtxUpdate(
++ xmlSecNssBlockCipherCtxPtr ctx ,
++ xmlSecBufferPtr in ,
++ xmlSecBufferPtr out ,
++ int encrypt ,
++ const xmlChar* cipherName ,
++ xmlSecTransformCtxPtr transformCtx
++) {
++ xmlSecSize inSize ;
++ xmlSecSize outSize ;
++ xmlSecSize inBlocks ;
++ int blockSize ;
++ int outLen ;
++ xmlSecByte* outBuf ;
++
++ xmlSecAssert2( ctx != NULL , -1 ) ;
++ xmlSecAssert2( ctx->cipher != CKM_INVALID_MECHANISM , -1 ) ;
++ xmlSecAssert2( ctx->symkey != NULL , -1 ) ;
++ xmlSecAssert2( ctx->cipherCtx != NULL , -1 ) ;
++ xmlSecAssert2( ctx->keyId != NULL , -1 ) ;
++ xmlSecAssert2( in != NULL , -1 ) ;
++ xmlSecAssert2( out != NULL , -1 ) ;
++ xmlSecAssert2( transformCtx != NULL , -1 ) ;
++
++ if( ( blockSize = PK11_GetBlockSize( ctx->cipher , NULL ) ) < 0 ) {
++ xmlSecError( XMLSEC_ERRORS_HERE ,
++ xmlSecErrorsSafeString( cipherName ) ,
++ "PK11_GetBlockSize" ,
++ XMLSEC_ERRORS_R_CRYPTO_FAILED ,
++ XMLSEC_ERRORS_NO_MESSAGE ) ;
++ return -1 ;
++ }
++
++ inSize = xmlSecBufferGetSize( in ) ;
++ outSize = xmlSecBufferGetSize( out ) ;
++
++ inBlocks = ( encrypt != 0 ? inSize : ( inSize - 1 ) ) / blockSize ;
++ inSize = inBlocks * blockSize ;
++
++ if( inSize < blockSize ) {
++ return 0 ;
++ }
++
++ if( xmlSecBufferSetMaxSize( out , outSize + inSize + blockSize ) < 0 ) {
++ xmlSecError( XMLSEC_ERRORS_HERE ,
++ xmlSecErrorsSafeString( cipherName ) ,
++ "xmlSecBufferSetMaxSize" ,
++ XMLSEC_ERRORS_R_CRYPTO_FAILED ,
++ XMLSEC_ERRORS_NO_MESSAGE ) ;
++ return -1 ;
++ }
++ outBuf = xmlSecBufferGetData( out ) + outSize ;
++
++ if( PK11_CipherOp( ctx->cipherCtx , outBuf , &outLen , inSize + blockSize , xmlSecBufferGetData( in ) , inSize ) != SECSuccess ) {
++ xmlSecError( XMLSEC_ERRORS_HERE ,
++ xmlSecErrorsSafeString( cipherName ) ,
++ "PK11_CipherOp" ,
++ XMLSEC_ERRORS_R_CRYPTO_FAILED ,
++ XMLSEC_ERRORS_NO_MESSAGE ) ;
++ return -1 ;
++ }
++
++ if( xmlSecBufferSetSize( out , outSize + outLen ) < 0 ) {
++ xmlSecError( XMLSEC_ERRORS_HERE ,
++ xmlSecErrorsSafeString( cipherName ) ,
++ "xmlSecBufferSetSize" ,
++ XMLSEC_ERRORS_R_CRYPTO_FAILED ,
++ XMLSEC_ERRORS_NO_MESSAGE ) ;
++ return -1 ;
++ }
++
++ if( xmlSecBufferRemoveHead( in , inSize ) < 0 ) {
++ xmlSecError( XMLSEC_ERRORS_HERE ,
++ xmlSecErrorsSafeString( cipherName ) ,
++ "xmlSecBufferRemoveHead" ,
++ XMLSEC_ERRORS_R_CRYPTO_FAILED ,
++ XMLSEC_ERRORS_NO_MESSAGE ) ;
++ return -1 ;
++ }
+
+-static int
+-xmlSecNssBlockCipherSetKey(xmlSecTransformPtr transform, xmlSecKeyPtr key) {
+- xmlSecNssBlockCipherCtxPtr ctx;
+- xmlSecBufferPtr buffer;
+-
+- xmlSecAssert2(xmlSecNssBlockCipherCheckId(transform), -1);
+- xmlSecAssert2((transform->operation == xmlSecTransformOperationEncrypt) || (transform->operation == xmlSecTransformOperationDecrypt), -1);
+- xmlSecAssert2(xmlSecTransformCheckSize(transform, xmlSecNssBlockCipherSize), -1);
+- xmlSecAssert2(key != NULL, -1);
+-
+- ctx = xmlSecNssBlockCipherGetCtx(transform);
+- xmlSecAssert2(ctx != NULL, -1);
+- xmlSecAssert2(ctx->cipher != 0, -1);
+- xmlSecAssert2(ctx->keyInitialized == 0, -1);
+- xmlSecAssert2(ctx->keyId != NULL, -1);
+- xmlSecAssert2(xmlSecKeyCheckId(key, ctx->keyId), -1);
+-
+- xmlSecAssert2(ctx->keySize > 0, -1);
+- xmlSecAssert2(ctx->keySize <= sizeof(ctx->key), -1);
+-
+- buffer = xmlSecKeyDataBinaryValueGetBuffer(xmlSecKeyGetValue(key));
+- xmlSecAssert2(buffer != NULL, -1);
+-
+- if(xmlSecBufferGetSize(buffer) < ctx->keySize) {
+- xmlSecError(XMLSEC_ERRORS_HERE,
+- xmlSecErrorsSafeString(xmlSecTransformGetName(transform)),
+- NULL,
+- XMLSEC_ERRORS_R_INVALID_KEY_DATA_SIZE,
+- "keySize=%d;expected=%d",
+- xmlSecBufferGetSize(buffer), ctx->keySize);
+- return(-1);
+- }
+-
+- xmlSecAssert2(xmlSecBufferGetData(buffer) != NULL, -1);
+- memcpy(ctx->key, xmlSecBufferGetData(buffer), ctx->keySize);
+-
+- ctx->keyInitialized = 1;
+- return(0);
++ return 0 ;
+ }
+
++/**
++ * Block cipher transform final
++ */
+ static int
+-xmlSecNssBlockCipherExecute(xmlSecTransformPtr transform, int last, xmlSecTransformCtxPtr transformCtx) {
+- xmlSecNssBlockCipherCtxPtr ctx;
+- xmlSecBufferPtr in, out;
+- int ret;
+-
+- xmlSecAssert2(xmlSecNssBlockCipherCheckId(transform), -1);
+- xmlSecAssert2((transform->operation == xmlSecTransformOperationEncrypt) || (transform->operation == xmlSecTransformOperationDecrypt), -1);
+- xmlSecAssert2(xmlSecTransformCheckSize(transform, xmlSecNssBlockCipherSize), -1);
+- xmlSecAssert2(transformCtx != NULL, -1);
+-
+- in = &(transform->inBuf);
+- out = &(transform->outBuf);
+-
+- ctx = xmlSecNssBlockCipherGetCtx(transform);
+- xmlSecAssert2(ctx != NULL, -1);
++xmlSecNssBlockCipherCtxFinal(
++ xmlSecNssBlockCipherCtxPtr ctx ,
++ xmlSecBufferPtr in ,
++ xmlSecBufferPtr out ,
++ int encrypt ,
++ const xmlChar* cipherName ,
++ xmlSecTransformCtxPtr transformCtx
++) {
++ xmlSecSize inSize ;
++ xmlSecSize outSize ;
++ int blockSize ;
++ int outLen ;
++ xmlSecByte* inBuf ;
++ xmlSecByte* outBuf ;
++
++ xmlSecAssert2( ctx != NULL , -1 ) ;
++ xmlSecAssert2( ctx->cipher != CKM_INVALID_MECHANISM , -1 ) ;
++ xmlSecAssert2( ctx->symkey != NULL , -1 ) ;
++ xmlSecAssert2( ctx->cipherCtx != NULL , -1 ) ;
++ xmlSecAssert2( ctx->keyId != NULL , -1 ) ;
++ xmlSecAssert2( in != NULL , -1 ) ;
++ xmlSecAssert2( out != NULL , -1 ) ;
++ xmlSecAssert2( transformCtx != NULL , -1 ) ;
++
++ if( ( blockSize = PK11_GetBlockSize( ctx->cipher , NULL ) ) < 0 ) {
++ xmlSecError( XMLSEC_ERRORS_HERE ,
++ xmlSecErrorsSafeString( cipherName ) ,
++ "PK11_GetBlockSize" ,
++ XMLSEC_ERRORS_R_CRYPTO_FAILED ,
++ XMLSEC_ERRORS_NO_MESSAGE ) ;
++ return -1 ;
++ }
++
++ inSize = xmlSecBufferGetSize( in ) ;
++ outSize = xmlSecBufferGetSize( out ) ;
++
++ /******************************************************************/
++ if( encrypt != 0 ) {
++ xmlSecAssert2( inSize < blockSize, -1 ) ;
++
++ /* create padding */
++ if( xmlSecBufferSetMaxSize( in , blockSize ) < 0 ) {
++ xmlSecError( XMLSEC_ERRORS_HERE ,
++ xmlSecErrorsSafeString( cipherName ) ,
++ "xmlSecBufferSetMaxSize" ,
++ XMLSEC_ERRORS_R_CRYPTO_FAILED ,
++ XMLSEC_ERRORS_NO_MESSAGE ) ;
++ return -1 ;
++ }
++ inBuf = xmlSecBufferGetData( in ) ;
++
++ /* generate random */
++ if( blockSize > ( inSize + 1 ) ) {
++ if( PK11_GenerateRandom( inBuf + inSize, blockSize - inSize - 1 ) != SECSuccess ) {
++ xmlSecError( XMLSEC_ERRORS_HERE ,
++ xmlSecErrorsSafeString( cipherName ) ,
++ "PK11_GenerateRandom" ,
++ XMLSEC_ERRORS_R_CRYPTO_FAILED ,
++ XMLSEC_ERRORS_NO_MESSAGE ) ;
++ return -1 ;
++ }
++ }
++
++ inBuf[blockSize-1] = blockSize - inSize ;
++ inSize = blockSize ;
++ } else {
++ if( inSize != blockSize ) {
++ xmlSecError( XMLSEC_ERRORS_HERE ,
++ xmlSecErrorsSafeString( cipherName ) ,
++ NULL ,
++ XMLSEC_ERRORS_R_CRYPTO_FAILED ,
++ XMLSEC_ERRORS_NO_MESSAGE ) ;
++ return -1 ;
++ }
++ }
++
++ /* process the last block */
++ if( xmlSecBufferSetMaxSize( out , outSize + inSize + blockSize ) < 0 ) {
++ xmlSecError( XMLSEC_ERRORS_HERE ,
++ xmlSecErrorsSafeString( cipherName ) ,
++ "xmlSecBufferSetMaxSize" ,
++ XMLSEC_ERRORS_R_CRYPTO_FAILED ,
++ XMLSEC_ERRORS_NO_MESSAGE ) ;
++ return -1 ;
++ }
++ outBuf = xmlSecBufferGetData( out ) + outSize ;
++
++ if( PK11_CipherOp( ctx->cipherCtx , outBuf , &outLen , inSize + blockSize , xmlSecBufferGetData( in ) , inSize ) != SECSuccess ) {
++ xmlSecError( XMLSEC_ERRORS_HERE ,
++ xmlSecErrorsSafeString( cipherName ) ,
++ "PK11_CipherOp" ,
++ XMLSEC_ERRORS_R_CRYPTO_FAILED ,
++ XMLSEC_ERRORS_NO_MESSAGE ) ;
++ return -1 ;
++ }
++
++ if( encrypt == 0 ) {
++ /* check padding */
++ if( outLen < outBuf[blockSize-1] ) {
++ xmlSecError( XMLSEC_ERRORS_HERE ,
++ xmlSecErrorsSafeString( cipherName ) ,
++ NULL ,
++ XMLSEC_ERRORS_R_CRYPTO_FAILED ,
++ XMLSEC_ERRORS_NO_MESSAGE ) ;
++ return -1 ;
++ }
++
++ outLen -= outBuf[blockSize-1] ;
++ }
++ /******************************************************************/
++
++ /******************************************************************
++ if( xmlSecBufferSetMaxSize( out , outSize + blockSize ) < 0 ) {
++ xmlSecError( XMLSEC_ERRORS_HERE ,
++ xmlSecErrorsSafeString( cipherName ) ,
++ "xmlSecBufferSetMaxSize" ,
++ XMLSEC_ERRORS_R_CRYPTO_FAILED ,
++ XMLSEC_ERRORS_NO_MESSAGE ) ;
++ return -1 ;
++ }
++
++ outBuf = xmlSecBufferGetData( out ) + outSize ;
++
++ if( PK11_DigestFinal( ctx->cipherCtx , outBuf , &outLen , blockSize ) != SECSuccess ) {
++ xmlSecError( XMLSEC_ERRORS_HERE ,
++ xmlSecErrorsSafeString( cipherName ) ,
++ "PK11_DigestFinal" ,
++ XMLSEC_ERRORS_R_CRYPTO_FAILED ,
++ XMLSEC_ERRORS_NO_MESSAGE ) ;
++ return -1 ;
++ }
++ ******************************************************************/
++
++ if( xmlSecBufferSetSize( out , outSize + outLen ) < 0 ) {
++ xmlSecError( XMLSEC_ERRORS_HERE ,
++ xmlSecErrorsSafeString( cipherName ) ,
++ "xmlSecBufferSetSize" ,
++ XMLSEC_ERRORS_R_CRYPTO_FAILED ,
++ XMLSEC_ERRORS_NO_MESSAGE ) ;
++ return -1 ;
++ }
++
++ if( xmlSecBufferRemoveHead( in , inSize ) < 0 ) {
++ xmlSecError( XMLSEC_ERRORS_HERE ,
++ xmlSecErrorsSafeString( cipherName ) ,
++ "xmlSecBufferRemoveHead" ,
++ XMLSEC_ERRORS_R_CRYPTO_FAILED ,
++ XMLSEC_ERRORS_NO_MESSAGE ) ;
++ return -1 ;
++ }
++
++/* PK11_Finalize( ctx->cipherCtx ) ;*/
++ PK11_DestroyContext( ctx->cipherCtx , PR_TRUE ) ;
++ ctx->cipherCtx = NULL ;
+
+- if(transform->status == xmlSecTransformStatusNone) {
+- transform->status = xmlSecTransformStatusWorking;
+- }
+-
+- if(transform->status == xmlSecTransformStatusWorking) {
+- if(ctx->ctxInitialized == 0) {
+- ret = xmlSecNssBlockCipherCtxInit(ctx, in, out,
+- (transform->operation == xmlSecTransformOperationEncrypt) ? 1 : 0,
+- xmlSecTransformGetName(transform), transformCtx);
+- if(ret < 0) {
+- xmlSecError(XMLSEC_ERRORS_HERE,
+- xmlSecErrorsSafeString(xmlSecTransformGetName(transform)),
+- "xmlSecNssBlockCipherCtxInit",
+- XMLSEC_ERRORS_R_XMLSEC_FAILED,
+- XMLSEC_ERRORS_NO_MESSAGE);
+- return(-1);
+- }
+- }
+- if((ctx->ctxInitialized == 0) && (last != 0)) {
+- xmlSecError(XMLSEC_ERRORS_HERE,
+- xmlSecErrorsSafeString(xmlSecTransformGetName(transform)),
+- NULL,
+- XMLSEC_ERRORS_R_INVALID_DATA,
+- "not enough data to initialize transform");
+- return(-1);
+- }
+-
+- if(ctx->ctxInitialized != 0) {
+- ret = xmlSecNssBlockCipherCtxUpdate(ctx, in, out,
+- (transform->operation == xmlSecTransformOperationEncrypt) ? 1 : 0,
+- xmlSecTransformGetName(transform), transformCtx);
+- if(ret < 0) {
+- xmlSecError(XMLSEC_ERRORS_HERE,
+- xmlSecErrorsSafeString(xmlSecTransformGetName(transform)),
+- "xmlSecNssBlockCipherCtxUpdate",
+- XMLSEC_ERRORS_R_XMLSEC_FAILED,
+- XMLSEC_ERRORS_NO_MESSAGE);
+- return(-1);
+- }
+- }
+-
+- if(last) {
+- ret = xmlSecNssBlockCipherCtxFinal(ctx, in, out,
+- (transform->operation == xmlSecTransformOperationEncrypt) ? 1 : 0,
+- xmlSecTransformGetName(transform), transformCtx);
+- if(ret < 0) {
+- xmlSecError(XMLSEC_ERRORS_HERE,
+- xmlSecErrorsSafeString(xmlSecTransformGetName(transform)),
+- "xmlSecNssBlockCipherCtxFinal",
+- XMLSEC_ERRORS_R_XMLSEC_FAILED,
+- XMLSEC_ERRORS_NO_MESSAGE);
+- return(-1);
+- }
+- transform->status = xmlSecTransformStatusFinished;
+- }
+- } else if(transform->status == xmlSecTransformStatusFinished) {
+- /* the only way we can get here is if there is no input */
+- xmlSecAssert2(xmlSecBufferGetSize(in) == 0, -1);
+- } else if(transform->status == xmlSecTransformStatusNone) {
+- /* the only way we can get here is if there is no enough data in the input */
+- xmlSecAssert2(last == 0, -1);
+- } else {
+- xmlSecError(XMLSEC_ERRORS_HERE,
+- xmlSecErrorsSafeString(xmlSecTransformGetName(transform)),
+- NULL,
+- XMLSEC_ERRORS_R_INVALID_STATUS,
+- "status=%d", transform->status);
+- return(-1);
+- }
+-
+- return(0);
++ return 0 ;
+ }
+
+
+-#ifndef XMLSEC_NO_AES
+-/*********************************************************************
++
++/**
++ * xmlSecTransformExecuteMethod:
++ * @transform: the pointer to transform object.
++ * @last: the flag: if set to 1 then it's the last data chunk.
++ * @transformCtx: the pointer to transform context object.
+ *
+- * AES CBC cipher transforms
++ * Transform specific method to process a chunk of data.
+ *
+- ********************************************************************/
++ * Returns 0 on success or a negative value otherwise.
++ */
++static int
++xmlSecNssBlockCipherExecute(
++ xmlSecTransformPtr transform ,
++ int last ,
++ xmlSecTransformCtxPtr transformCtx
++) {
++ xmlSecNssBlockCipherCtxPtr context = NULL ;
++ xmlSecBufferPtr inBuf = NULL ;
++ xmlSecBufferPtr outBuf = NULL ;
++ const xmlChar* cipherName ;
++ int operation ;
++ int rtv ;
++
++ xmlSecAssert2( xmlSecNssBlockCipherCheckId( transform ), -1 ) ;
++ xmlSecAssert2( xmlSecTransformCheckSize( transform, xmlSecNssBlockCipherSize ), -1 ) ;
++ xmlSecAssert2( ( transform->operation == xmlSecTransformOperationEncrypt ) || ( transform->operation == xmlSecTransformOperationDecrypt ), -1 ) ;
++ xmlSecAssert2( transformCtx != NULL , -1 ) ;
++
++ context = xmlSecNssBlockCipherGetCtx( transform ) ;
++ if( context == NULL ) {
++ xmlSecError( XMLSEC_ERRORS_HERE ,
++ xmlSecErrorsSafeString( xmlSecTransformGetName( transform ) ) ,
++ "xmlSecNssBlockCipherGetCtx" ,
++ XMLSEC_ERRORS_R_CRYPTO_FAILED ,
++ XMLSEC_ERRORS_NO_MESSAGE ) ;
++ return -1 ;
++ }
++
++ inBuf = &( transform->inBuf ) ;
++ outBuf = &( transform->outBuf ) ;
++
++ if( transform->status == xmlSecTransformStatusNone ) {
++ transform->status = xmlSecTransformStatusWorking ;
++ }
++
++ operation = ( transform->operation == xmlSecTransformOperationEncrypt ) ? 1 : 0 ;
++ cipherName = xmlSecTransformGetName( transform ) ;
++
++ if( transform->status == xmlSecTransformStatusWorking ) {
++ if( context->cipherCtx == NULL ) {
++ rtv = xmlSecNssBlockCipherCtxInit( context, inBuf , outBuf , operation , cipherName , transformCtx ) ;
++ if( rtv < 0 ) {
++ xmlSecError( XMLSEC_ERRORS_HERE ,
++ xmlSecErrorsSafeString( xmlSecTransformGetName( transform ) ) ,
++ "xmlSecNssBlockCipherCtxInit" ,
++ XMLSEC_ERRORS_R_INVALID_STATUS ,
++ XMLSEC_ERRORS_NO_MESSAGE ) ;
++ return -1 ;
++ }
++ }
++
++ if( context->cipherCtx == NULL && last != 0 ) {
++ xmlSecError( XMLSEC_ERRORS_HERE ,
++ xmlSecErrorsSafeString( xmlSecTransformGetName( transform ) ) ,
++ NULL ,
++ XMLSEC_ERRORS_R_INVALID_STATUS ,
++ "No enough data to intialize transform" ) ;
++ return -1 ;
++ }
++
++ if( context->cipherCtx != NULL ) {
++ rtv = xmlSecNssBlockCipherCtxUpdate( context, inBuf , outBuf , operation , cipherName , transformCtx ) ;
++ if( rtv < 0 ) {
++ xmlSecError( XMLSEC_ERRORS_HERE ,
++ xmlSecErrorsSafeString( xmlSecTransformGetName( transform ) ) ,
++ "xmlSecNssBlockCipherCtxUpdate" ,
++ XMLSEC_ERRORS_R_INVALID_STATUS ,
++ XMLSEC_ERRORS_NO_MESSAGE ) ;
++ return -1 ;
++ }
++ }
++
++ if( last ) {
++ rtv = xmlSecNssBlockCipherCtxFinal( context, inBuf , outBuf , operation , cipherName , transformCtx ) ;
++ if( rtv < 0 ) {
++ xmlSecError( XMLSEC_ERRORS_HERE ,
++ xmlSecErrorsSafeString( xmlSecTransformGetName( transform ) ) ,
++ "xmlSecNssBlockCipherCtxFinal" ,
++ XMLSEC_ERRORS_R_INVALID_STATUS ,
++ XMLSEC_ERRORS_NO_MESSAGE ) ;
++ return -1 ;
++ }
++ transform->status = xmlSecTransformStatusFinished ;
++ }
++ } else if( transform->status == xmlSecTransformStatusFinished ) {
++ if( xmlSecBufferGetSize( inBuf ) != 0 ) {
++ xmlSecError( XMLSEC_ERRORS_HERE ,
++ xmlSecErrorsSafeString( xmlSecTransformGetName( transform ) ) ,
++ NULL ,
++ XMLSEC_ERRORS_R_INVALID_STATUS ,
++ "status=%d", transform->status ) ;
++ return -1 ;
++ }
++ } else {
++ xmlSecError( XMLSEC_ERRORS_HERE ,
++ xmlSecErrorsSafeString( xmlSecTransformGetName( transform ) ) ,
++ NULL ,
++ XMLSEC_ERRORS_R_INVALID_STATUS ,
++ "status=%d", transform->status ) ;
++ return -1 ;
++ }
++
++ return 0 ;
++}
++
++#ifdef __MINGW32__ // for runtime-pseudo-reloc
++static struct _xmlSecTransformKlass xmlSecNssAes128CbcKlass = {
++#else
+ static xmlSecTransformKlass xmlSecNssAes128CbcKlass = {
+- /* klass/object sizes */
+- sizeof(xmlSecTransformKlass), /* xmlSecSize klassSize */
+- xmlSecNssBlockCipherSize, /* xmlSecSize objSize */
+-
+- xmlSecNameAes128Cbc, /* const xmlChar* name; */
+- xmlSecHrefAes128Cbc, /* const xmlChar* href; */
+- xmlSecTransformUsageEncryptionMethod, /* xmlSecAlgorithmUsage usage; */
+-
+- xmlSecNssBlockCipherInitialize, /* xmlSecTransformInitializeMethod initialize; */
+- xmlSecNssBlockCipherFinalize, /* xmlSecTransformFinalizeMethod finalize; */
+- NULL, /* xmlSecTransformNodeReadMethod readNode; */
+- NULL, /* xmlSecTransformNodeWriteMethod writeNode; */
+- xmlSecNssBlockCipherSetKeyReq, /* xmlSecTransformSetKeyMethod setKeyReq; */
+- xmlSecNssBlockCipherSetKey, /* xmlSecTransformSetKeyMethod setKey; */
+- NULL, /* xmlSecTransformValidateMethod validate; */
+- xmlSecTransformDefaultGetDataType, /* xmlSecTransformGetDataTypeMethod getDataType; */
+- xmlSecTransformDefaultPushBin, /* xmlSecTransformPushBinMethod pushBin; */
+- xmlSecTransformDefaultPopBin, /* xmlSecTransformPopBinMethod popBin; */
+- NULL, /* xmlSecTransformPushXmlMethod pushXml; */
+- NULL, /* xmlSecTransformPopXmlMethod popXml; */
+- xmlSecNssBlockCipherExecute, /* xmlSecTransformExecuteMethod execute; */
+-
+- NULL, /* void* reserved0; */
+- NULL, /* void* reserved1; */
+-};
++#endif
++ sizeof( xmlSecTransformKlass ) ,
++ xmlSecNssBlockCipherSize ,
++
++ xmlSecNameAes128Cbc ,
++ xmlSecHrefAes128Cbc ,
++ xmlSecTransformUsageEncryptionMethod ,
++
++ xmlSecNssBlockCipherInitialize ,
++ xmlSecNssBlockCipherFinalize ,
++ NULL ,
++ NULL ,
++
++ xmlSecNssBlockCipherSetKeyReq ,
++ xmlSecNssBlockCipherSetKey ,
++ NULL ,
++ xmlSecTransformDefaultGetDataType ,
++
++ xmlSecTransformDefaultPushBin ,
++ xmlSecTransformDefaultPopBin ,
++ NULL ,
++ NULL ,
++ xmlSecNssBlockCipherExecute ,
++
++ NULL ,
++ NULL
++} ;
++
++
++#ifdef __MINGW32__ // for runtime-pseudo-reloc
++static struct _xmlSecTransformKlass xmlSecNssAes192CbcKlass = {
++#else
++static xmlSecTransformKlass xmlSecNssAes192CbcKlass = {
++#endif
++ sizeof( xmlSecTransformKlass ) ,
++ xmlSecNssBlockCipherSize ,
++
++ xmlSecNameAes192Cbc ,
++ xmlSecHrefAes192Cbc ,
++ xmlSecTransformUsageEncryptionMethod ,
++
++ xmlSecNssBlockCipherInitialize ,
++ xmlSecNssBlockCipherFinalize ,
++ NULL ,
++ NULL ,
++
++ xmlSecNssBlockCipherSetKeyReq ,
++ xmlSecNssBlockCipherSetKey ,
++ NULL ,
++ xmlSecTransformDefaultGetDataType ,
++
++ xmlSecTransformDefaultPushBin ,
++ xmlSecTransformDefaultPopBin ,
++ NULL ,
++ NULL ,
++ xmlSecNssBlockCipherExecute ,
++
++ NULL ,
++ NULL
++} ;
++
++
++#ifdef __MINGW32__ // for runtime-pseudo-reloc
++static struct _xmlSecTransformKlass xmlSecNssAes256CbcKlass = {
++#else
++static xmlSecTransformKlass xmlSecNssAes256CbcKlass = {
++#endif
++ sizeof( xmlSecTransformKlass ) ,
++ xmlSecNssBlockCipherSize ,
++
++ xmlSecNameAes256Cbc ,
++ xmlSecHrefAes256Cbc ,
++ xmlSecTransformUsageEncryptionMethod ,
++
++ xmlSecNssBlockCipherInitialize ,
++ xmlSecNssBlockCipherFinalize ,
++ NULL ,
++ NULL ,
++
++ xmlSecNssBlockCipherSetKeyReq ,
++ xmlSecNssBlockCipherSetKey ,
++ NULL ,
++ xmlSecTransformDefaultGetDataType ,
++
++ xmlSecTransformDefaultPushBin ,
++ xmlSecTransformDefaultPopBin ,
++ NULL ,
++ NULL ,
++ xmlSecNssBlockCipherExecute ,
++
++ NULL ,
++ NULL
++} ;
++
++#ifdef __MINGW32__ // for runtime-pseudo-reloc
++static struct _xmlSecTransformKlass xmlSecNssDes3CbcKlass = {
++#else
++static xmlSecTransformKlass xmlSecNssDes3CbcKlass = {
++#endif
++ sizeof( xmlSecTransformKlass ) ,
++ xmlSecNssBlockCipherSize ,
++
++ xmlSecNameDes3Cbc ,
++ xmlSecHrefDes3Cbc ,
++ xmlSecTransformUsageEncryptionMethod ,
++
++ xmlSecNssBlockCipherInitialize ,
++ xmlSecNssBlockCipherFinalize ,
++ NULL ,
++ NULL ,
++
++ xmlSecNssBlockCipherSetKeyReq ,
++ xmlSecNssBlockCipherSetKey ,
++ NULL ,
++ xmlSecTransformDefaultGetDataType ,
++
++ xmlSecTransformDefaultPushBin ,
++ xmlSecTransformDefaultPopBin ,
++ NULL ,
++ NULL ,
++ xmlSecNssBlockCipherExecute ,
++
++ NULL ,
++ NULL
++} ;
+
+ /**
+- * xmlSecNssTransformAes128CbcGetKlass:
+- *
+- * AES 128 CBC encryption transform klass.
+- *
+- * Returns pointer to AES 128 CBC encryption transform.
+- */
+-xmlSecTransformId
+-xmlSecNssTransformAes128CbcGetKlass(void) {
+- return(&xmlSecNssAes128CbcKlass);
++ * xmlSecNssTransformAes128CbcGetKlass
++ *
++ * Get the AES128_CBC transform klass
++ *
++ * Return AES128_CBC transform klass
++ */
++xmlSecTransformId
++xmlSecNssTransformAes128CbcGetKlass( void ) {
++ return ( &xmlSecNssAes128CbcKlass ) ;
+ }
+
+-static xmlSecTransformKlass xmlSecNssAes192CbcKlass = {
+- /* klass/object sizes */
+- sizeof(xmlSecTransformKlass), /* xmlSecSize klassSize */
+- xmlSecNssBlockCipherSize, /* xmlSecSize objSize */
+-
+- xmlSecNameAes192Cbc, /* const xmlChar* name; */
+- xmlSecHrefAes192Cbc, /* const xmlChar* href; */
+- xmlSecTransformUsageEncryptionMethod, /* xmlSecAlgorithmUsage usage; */
+-
+- xmlSecNssBlockCipherInitialize, /* xmlSecTransformInitializeMethod initialize; */
+- xmlSecNssBlockCipherFinalize, /* xmlSecTransformFinalizeMethod finalize; */
+- NULL, /* xmlSecTransformNodeReadMethod readNode; */
+- NULL, /* xmlSecTransformNodeWriteMethod writeNode; */
+- xmlSecNssBlockCipherSetKeyReq, /* xmlSecTransformSetKeyMethod setKeyReq; */
+- xmlSecNssBlockCipherSetKey, /* xmlSecTransformSetKeyMethod setKey; */
+- NULL, /* xmlSecTransformValidateMethod validate; */
+- xmlSecTransformDefaultGetDataType, /* xmlSecTransformGetDataTypeMethod getDataType; */
+- xmlSecTransformDefaultPushBin, /* xmlSecTransformPushBinMethod pushBin; */
+- xmlSecTransformDefaultPopBin, /* xmlSecTransformPopBinMethod popBin; */
+- NULL, /* xmlSecTransformPushXmlMethod pushXml; */
+- NULL, /* xmlSecTransformPopXmlMethod popXml; */
+- xmlSecNssBlockCipherExecute, /* xmlSecTransformExecuteMethod execute; */
+-
+- NULL, /* void* reserved0; */
+- NULL, /* void* reserved1; */
+-};
+-
+ /**
+- * xmlSecNssTransformAes192CbcGetKlass:
+- *
+- * AES 192 CBC encryption transform klass.
+- *
+- * Returns pointer to AES 192 CBC encryption transform.
+- */
+-xmlSecTransformId
+-xmlSecNssTransformAes192CbcGetKlass(void) {
+- return(&xmlSecNssAes192CbcKlass);
++ * xmlSecNssTransformAes192CbcGetKlass
++ *
++ * Get the AES192_CBC transform klass
++ *
++ * Return AES192_CBC transform klass
++ */
++xmlSecTransformId
++xmlSecNssTransformAes192CbcGetKlass( void ) {
++ return ( &xmlSecNssAes192CbcKlass ) ;
+ }
+
+-static xmlSecTransformKlass xmlSecNssAes256CbcKlass = {
+- /* klass/object sizes */
+- sizeof(xmlSecTransformKlass), /* xmlSecSize klassSize */
+- xmlSecNssBlockCipherSize, /* xmlSecSize objSize */
+-
+- xmlSecNameAes256Cbc, /* const xmlChar* name; */
+- xmlSecHrefAes256Cbc, /* const xmlChar* href; */
+- xmlSecTransformUsageEncryptionMethod, /* xmlSecAlgorithmUsage usage; */
+-
+- xmlSecNssBlockCipherInitialize, /* xmlSecTransformInitializeMethod initialize; */
+- xmlSecNssBlockCipherFinalize, /* xmlSecTransformFinalizeMethod finalize; */
+- NULL, /* xmlSecTransformNodeReadMethod readNode; */
+- NULL, /* xmlSecTransformNodeWriteMethod writeNode; */
+- xmlSecNssBlockCipherSetKeyReq, /* xmlSecTransformSetKeyMethod setKeyReq; */
+- xmlSecNssBlockCipherSetKey, /* xmlSecTransformSetKeyMethod setKey; */
+- NULL, /* xmlSecTransformValidateMethod validate; */
+- xmlSecTransformDefaultGetDataType, /* xmlSecTransformGetDataTypeMethod getDataType; */
+- xmlSecTransformDefaultPushBin, /* xmlSecTransformPushBinMethod pushBin; */
+- xmlSecTransformDefaultPopBin, /* xmlSecTransformPopBinMethod popBin; */
+- NULL, /* xmlSecTransformPushXmlMethod pushXml; */
+- NULL, /* xmlSecTransformPopXmlMethod popXml; */
+- xmlSecNssBlockCipherExecute, /* xmlSecTransformExecuteMethod execute; */
+-
+- NULL, /* void* reserved0; */
+- NULL, /* void* reserved1; */
+-};
+-
+ /**
+- * xmlSecNssTransformAes256CbcGetKlass:
+- *
+- * AES 256 CBC encryption transform klass.
+- *
+- * Returns pointer to AES 256 CBC encryption transform.
+- */
+-xmlSecTransformId
+-xmlSecNssTransformAes256CbcGetKlass(void) {
+- return(&xmlSecNssAes256CbcKlass);
++ * xmlSecNssTransformAes256CbcGetKlass
++ *
++ * Get the AES256_CBC transform klass
++ *
++ * Return AES256_CBC transform klass
++ */
++xmlSecTransformId
++xmlSecNssTransformAes256CbcGetKlass( void ) {
++ return ( &xmlSecNssAes256CbcKlass ) ;
+ }
+
+-#endif /* XMLSEC_NO_AES */
+-
+-#ifndef XMLSEC_NO_DES
+-static xmlSecTransformKlass xmlSecNssDes3CbcKlass = {
+- /* klass/object sizes */
+- sizeof(xmlSecTransformKlass), /* xmlSecSize klassSize */
+- xmlSecNssBlockCipherSize, /* xmlSecSize objSize */
+-
+- xmlSecNameDes3Cbc, /* const xmlChar* name; */
+- xmlSecHrefDes3Cbc, /* const xmlChar* href; */
+- xmlSecTransformUsageEncryptionMethod, /* xmlSecAlgorithmUsage usage; */
+-
+- xmlSecNssBlockCipherInitialize, /* xmlSecTransformInitializeMethod initialize; */
+- xmlSecNssBlockCipherFinalize, /* xmlSecTransformFinalizeMethod finalize; */
+- NULL, /* xmlSecTransformNodeReadMethod readNode; */
+- NULL, /* xmlSecTransformNodeWriteMethod writeNode; */
+- xmlSecNssBlockCipherSetKeyReq, /* xmlSecTransformSetKeyMethod setKeyReq; */
+- xmlSecNssBlockCipherSetKey, /* xmlSecTransformSetKeyMethod setKey; */
+- NULL, /* xmlSecTransformValidateMethod validate; */
+- xmlSecTransformDefaultGetDataType, /* xmlSecTransformGetDataTypeMethod getDataType; */
+- xmlSecTransformDefaultPushBin, /* xmlSecTransformPushBinMethod pushBin; */
+- xmlSecTransformDefaultPopBin, /* xmlSecTransformPopBinMethod popBin; */
+- NULL, /* xmlSecTransformPushXmlMethod pushXml; */
+- NULL, /* xmlSecTransformPopXmlMethod popXml; */
+- xmlSecNssBlockCipherExecute, /* xmlSecTransformExecuteMethod execute; */
+-
+- NULL, /* void* reserved0; */
+- NULL, /* void* reserved1; */
+-};
+-
+-/**
+- * xmlSecNssTransformDes3CbcGetKlass:
++/**
++ * xmlSecNssTransformDes3CbcGetKlass
+ *
+- * Triple DES CBC encryption transform klass.
+- *
+- * Returns pointer to Triple DES encryption transform.
++ * Get the DES3_CBC transform klass
++ *
++ * Return DES3_CBC transform klass
+ */
+-xmlSecTransformId
+-xmlSecNssTransformDes3CbcGetKlass(void) {
+- return(&xmlSecNssDes3CbcKlass);
++xmlSecTransformId
++xmlSecNssTransformDes3CbcGetKlass( void ) {
++ return ( &xmlSecNssDes3CbcKlass ) ;
+ }
+-#endif /* XMLSEC_NO_DES */
++
+
+--- misc/xmlsec1-1.2.6/src/nss/crypto.c 2003-10-29 16:57:25.000000000 +0100
++++ misc/build/xmlsec1-1.2.6/src/nss/crypto.c 2008-06-29 23:44:19.000000000 +0200
+@@ -130,6 +130,7 @@
+ /**
+ * High level routines form xmlsec command line utility
+ */
++/*
+ gXmlSecNssFunctions->cryptoAppInit = xmlSecNssAppInit;
+ gXmlSecNssFunctions->cryptoAppShutdown = xmlSecNssAppShutdown;
+ gXmlSecNssFunctions->cryptoAppDefaultKeysMngrInit = xmlSecNssAppDefaultKeysMngrInit;
+@@ -143,10 +144,29 @@
+ gXmlSecNssFunctions->cryptoAppPkcs12LoadMemory = xmlSecNssAppPkcs12LoadMemory;
+ gXmlSecNssFunctions->cryptoAppKeyCertLoad = xmlSecNssAppKeyCertLoad;
+ gXmlSecNssFunctions->cryptoAppKeyCertLoadMemory = xmlSecNssAppKeyCertLoadMemory;
+-#endif /* XMLSEC_NO_X509 */
++#endif
+ gXmlSecNssFunctions->cryptoAppKeyLoad = xmlSecNssAppKeyLoad;
+ gXmlSecNssFunctions->cryptoAppKeyLoadMemory = xmlSecNssAppKeyLoadMemory;
+ gXmlSecNssFunctions->cryptoAppDefaultPwdCallback = (void*)xmlSecNssAppGetDefaultPwdCallback;
++*/
++
++ gXmlSecNssFunctions->cryptoAppInit = NULL ;
++ gXmlSecNssFunctions->cryptoAppShutdown = NULL ;
++ gXmlSecNssFunctions->cryptoAppDefaultKeysMngrInit = NULL ;
++ gXmlSecNssFunctions->cryptoAppDefaultKeysMngrAdoptKey = NULL ;
++ gXmlSecNssFunctions->cryptoAppDefaultKeysMngrLoad = NULL ;
++ gXmlSecNssFunctions->cryptoAppDefaultKeysMngrSave = NULL ;
++#ifndef XMLSEC_NO_X509
++ gXmlSecNssFunctions->cryptoAppKeysMngrCertLoad = NULL ;
++ gXmlSecNssFunctions->cryptoAppKeysMngrCertLoadMemory= NULL ;
++ gXmlSecNssFunctions->cryptoAppPkcs12Load = NULL ;
++ gXmlSecNssFunctions->cryptoAppPkcs12LoadMemory = NULL ;
++ gXmlSecNssFunctions->cryptoAppKeyCertLoad = NULL ;
++ gXmlSecNssFunctions->cryptoAppKeyCertLoadMemory = NULL ;
++#endif /* XMLSEC_NO_X509 */
++ gXmlSecNssFunctions->cryptoAppKeyLoad = NULL ;
++ gXmlSecNssFunctions->cryptoAppKeyLoadMemory = NULL ;
++ gXmlSecNssFunctions->cryptoAppDefaultPwdCallback = (void*)NULL ;
+
+ return(gXmlSecNssFunctions);
+ }
+--- misc/xmlsec1-1.2.6/src/nss/digests.c 2003-09-26 02:58:15.000000000 +0200
++++ misc/build/xmlsec1-1.2.6/src/nss/digests.c 2008-06-29 23:44:19.000000000 +0200
+@@ -21,7 +21,6 @@
+ #include <xmlsec/transforms.h>
+ #include <xmlsec/errors.h>
+
+-#include <xmlsec/nss/app.h>
+ #include <xmlsec/nss/crypto.h>
+
+ #define XMLSEC_NSS_MAX_DIGEST_SIZE 32
+@@ -107,7 +106,7 @@
+ xmlSecErrorsSafeString(xmlSecTransformGetName(transform)),
+ "SECOID_FindOIDByTag",
+ XMLSEC_ERRORS_R_CRYPTO_FAILED,
+- XMLSEC_ERRORS_NO_MESSAGE);
++ "error code=%d", PORT_GetError());
+ return(-1);
+ }
+
+@@ -117,7 +116,7 @@
+ xmlSecErrorsSafeString(xmlSecTransformGetName(transform)),
+ "PK11_CreateDigestContext",
+ XMLSEC_ERRORS_R_CRYPTO_FAILED,
+- XMLSEC_ERRORS_NO_MESSAGE);
++ "error code=%d", PORT_GetError());
+ return(-1);
+ }
+
+@@ -208,7 +207,7 @@
+ xmlSecErrorsSafeString(xmlSecTransformGetName(transform)),
+ "PK11_DigestBegin",
+ XMLSEC_ERRORS_R_CRYPTO_FAILED,
+- XMLSEC_ERRORS_NO_MESSAGE);
++ "error code=%d", PORT_GetError());
+ return(-1);
+ }
+ transform->status = xmlSecTransformStatusWorking;
+@@ -225,7 +224,7 @@
+ xmlSecErrorsSafeString(xmlSecTransformGetName(transform)),
+ "PK11_DigestOp",
+ XMLSEC_ERRORS_R_CRYPTO_FAILED,
+- XMLSEC_ERRORS_NO_MESSAGE);
++ "error code=%d", PORT_GetError());
+ return(-1);
+ }
+
+@@ -246,7 +245,7 @@
+ xmlSecErrorsSafeString(xmlSecTransformGetName(transform)),
+ "PK11_DigestFinal",
+ XMLSEC_ERRORS_R_CRYPTO_FAILED,
+- XMLSEC_ERRORS_NO_MESSAGE);
++ "error code=%d", PORT_GetError());
+ return(-1);
+ }
+ xmlSecAssert2(ctx->dgstSize > 0, -1);
+@@ -285,7 +284,11 @@
+ * SHA1 Digest transforms
+ *
+ *****************************************************************************/
++#ifdef __MINGW32__ // for runtime-pseudo-reloc
++static struct _xmlSecTransformKlass xmlSecNssSha1Klass = {
++#else
+ static xmlSecTransformKlass xmlSecNssSha1Klass = {
++#endif
+ /* klass/object sizes */
+ sizeof(xmlSecTransformKlass), /* xmlSecSize klassSize */
+ xmlSecNssDigestSize, /* xmlSecSize objSize */
+--- misc/xmlsec1-1.2.6/src/nss/hmac.c 2003-09-26 02:58:15.000000000 +0200
++++ misc/build/xmlsec1-1.2.6/src/nss/hmac.c 2008-06-29 23:44:19.000000000 +0200
+@@ -23,8 +23,8 @@
+ #include <xmlsec/transforms.h>
+ #include <xmlsec/errors.h>
+
+-#include <xmlsec/nss/app.h>
+ #include <xmlsec/nss/crypto.h>
++#include <xmlsec/nss/tokens.h>
+
+ #define XMLSEC_NSS_MAX_HMAC_SIZE 128
+
+@@ -241,13 +241,13 @@
+ keyItem.data = xmlSecBufferGetData(buffer);
+ keyItem.len = xmlSecBufferGetSize(buffer);
+
+- slot = PK11_GetBestSlot(ctx->digestType, NULL);
++ slot = xmlSecNssSlotGet(ctx->digestType);
+ if(slot == NULL) {
+ xmlSecError(XMLSEC_ERRORS_HERE,
+ xmlSecErrorsSafeString(xmlSecTransformGetName(transform)),
+- "PK11_GetBestSlot",
++ "xmlSecNssSlotGet",
+ XMLSEC_ERRORS_R_CRYPTO_FAILED,
+- XMLSEC_ERRORS_NO_MESSAGE);
++ "error code=%d", PORT_GetError());
+ return(-1);
+ }
+
+@@ -258,7 +258,7 @@
+ xmlSecErrorsSafeString(xmlSecTransformGetName(transform)),
+ "PK11_ImportSymKey",
+ XMLSEC_ERRORS_R_CRYPTO_FAILED,
+- XMLSEC_ERRORS_NO_MESSAGE);
++ "error code=%d", PORT_GetError());
+ PK11_FreeSlot(slot);
+ return(-1);
+ }
+@@ -269,7 +269,7 @@
+ xmlSecErrorsSafeString(xmlSecTransformGetName(transform)),
+ "PK11_CreateContextBySymKey",
+ XMLSEC_ERRORS_R_CRYPTO_FAILED,
+- XMLSEC_ERRORS_NO_MESSAGE);
++ "error code=%d", PORT_GetError());
+ PK11_FreeSymKey(symKey);
+ PK11_FreeSlot(slot);
+ return(-1);
+@@ -368,7 +368,7 @@
+ xmlSecErrorsSafeString(xmlSecTransformGetName(transform)),
+ "PK11_DigestBegin",
+ XMLSEC_ERRORS_R_CRYPTO_FAILED,
+- XMLSEC_ERRORS_NO_MESSAGE);
++ "error code=%d", PORT_GetError());
+ return(-1);
+ }
+ transform->status = xmlSecTransformStatusWorking;
+@@ -385,7 +385,7 @@
+ xmlSecErrorsSafeString(xmlSecTransformGetName(transform)),
+ "PK11_DigestOp",
+ XMLSEC_ERRORS_R_CRYPTO_FAILED,
+- XMLSEC_ERRORS_NO_MESSAGE);
++ "error code=%d", PORT_GetError());
+ return(-1);
+ }
+
+@@ -408,7 +408,7 @@
+ xmlSecErrorsSafeString(xmlSecTransformGetName(transform)),
+ "PK11_DigestFinal",
+ XMLSEC_ERRORS_R_CRYPTO_FAILED,
+- XMLSEC_ERRORS_NO_MESSAGE);
++ "error code=%d", PORT_GetError());
+ return(-1);
+ }
+ xmlSecAssert2(dgstSize > 0, -1);
+@@ -459,7 +459,11 @@
+ /**
+ * HMAC SHA1
+ */
++#ifdef __MINGW32__ // for runtime-pseudo-reloc
++static struct _xmlSecTransformKlass xmlSecNssHmacSha1Klass = {
++#else
+ static xmlSecTransformKlass xmlSecNssHmacSha1Klass = {
++#endif
+ /* klass/object sizes */
+ sizeof(xmlSecTransformKlass), /* xmlSecSize klassSize */
+ xmlSecNssHmacSize, /* xmlSecSize objSize */
+@@ -501,7 +505,11 @@
+ /**
+ * HMAC Ripemd160
+ */
++#ifdef __MINGW32__ // for runtime-pseudo-reloc
++static struct _xmlSecTransformKlass xmlSecNssHmacRipemd160Klass = {
++#else
+ static xmlSecTransformKlass xmlSecNssHmacRipemd160Klass = {
++#endif
+ /* klass/object sizes */
+ sizeof(xmlSecTransformKlass), /* xmlSecSize klassSize */
+ xmlSecNssHmacSize, /* xmlSecSize objSize */
+@@ -543,7 +551,11 @@
+ /**
+ * HMAC Md5
+ */
++#ifdef __MINGW32__ // for runtime-pseudo-reloc
++static struct _xmlSecTransformKlass xmlSecNssHmacMd5Klass = {
++#else
+ static xmlSecTransformKlass xmlSecNssHmacMd5Klass = {
++#endif
+ /* klass/object sizes */
+ sizeof(xmlSecTransformKlass), /* xmlSecSize klassSize */
+ xmlSecNssHmacSize, /* xmlSecSize objSize */
+--- misc/xmlsec1-1.2.6/src/nss/keysstore.c 2003-09-26 02:58:15.000000000 +0200
++++ misc/build/xmlsec1-1.2.6/src/nss/keysstore.c 2008-06-29 23:44:19.000000000 +0200
+@@ -1,119 +1,522 @@
+ /**
+ * XMLSec library
+ *
+- * Nss keys store that uses Simple Keys Store under the hood. Uses the
+- * Nss DB as a backing store for the finding keys, but the NSS DB is
+- * not written to by the keys store.
+- * So, if store->findkey is done and the key is not found in the simple
+- * keys store, the NSS DB is looked up.
+- * If store is called to adopt a key, that key is not written to the NSS
+- * DB.
+- * Thus, the NSS DB can be used to pre-load keys and becomes an alternate
+- * source of keys for xmlsec
+- *
+ * This is free software; see Copyright file in the source
+ * distribution for precise wording.
+ *
+- * Copyright (c) 2003 America Online, Inc. All rights reserved.
++ * Copyright................................
+ */
+-#include "globals.h"
+
+-#include <stdlib.h>
++/**
++ * NSS key store uses a key list and a slot list as the key repository. NSS slot
++ * list is a backup repository for the finding keys. If a key is not found from
++ * the key list, the NSS slot list is looked up.
++ *
++ * Any key in the key list will not save to pkcs11 slot. When a store to called
++ * to adopt a key, the key is resident in the key list; While a store to called
++ * to set a is resident in the key list; While a store to called to set a slot
++ * list, which means that the keys in the listed slot can be used for xml sign-
++ * nature or encryption.
++ *
++ * Then, a user can adjust slot list to effect the crypto behaviors of xmlSec.
++ *
++ * The framework will decrease the user interfaces to administrate xmlSec crypto
++ * engine. He can only focus on NSS layer functions. For examples, after the
++ * user set up a slot list handler to the keys store, he do not need to do any
++ * other work atop xmlSec interfaces, his action on the slot list handler, such
++ * as add a token to, delete a token from the list, will directly effect the key
++ * store behaviors.
++ *
++ * For example, a scenariio:
++ * 0. Create a slot list;( NSS interfaces )
++ * 1. Create a keys store;( xmlSec interfaces )
++ * 2. Set slot list with the keys store;( xmlSec Interfaces )
++ * 3. Add a slot to the slot list;( NSS interfaces )
++ * 4. Perform xml signature; ( xmlSec Interfaces )
++ * 5. Deleter a slot from the slot list;( NSS interfaces )
++ * 6. Perform xml encryption; ( xmlSec Interfaces )
++ * 7. Perform xml signature;( xmlSec Interfaces )
++ * 8. Destroy the keys store;( xmlSec Interfaces )
++ * 8. Destroy the slot list.( NSS Interfaces )
++ */
++
++#include "globals.h"
+ #include <string.h>
+
+-#include <nss.h>
+-#include <cert.h>
+-#include <pk11func.h>
+-#include <keyhi.h>
++#include <nss.h>
++#include <pk11func.h>
++#include <prinit.h>
++#include <keyhi.h>
+
+-#include <libxml/tree.h>
+
+ #include <xmlsec/xmlsec.h>
+-#include <xmlsec/buffer.h>
+-#include <xmlsec/base64.h>
+-#include <xmlsec/errors.h>
+-#include <xmlsec/xmltree.h>
+-
++#include <xmlsec/keys.h>
+ #include <xmlsec/keysmngr.h>
++#include <xmlsec/transforms.h>
++#include <xmlsec/xmltree.h>
++#include <xmlsec/errors.h>
+
+ #include <xmlsec/nss/crypto.h>
+ #include <xmlsec/nss/keysstore.h>
+-#include <xmlsec/nss/x509.h>
++#include <xmlsec/nss/tokens.h>
++#include <xmlsec/nss/ciphers.h>
+ #include <xmlsec/nss/pkikeys.h>
+
+-/****************************************************************************
++/**
++ * Internal NSS key store context
+ *
+- * Nss Keys Store. Uses Simple Keys Store under the hood
+- *
+- * Simple Keys Store ptr is located after xmlSecKeyStore
++ * This context is located after xmlSecKeyStore
++ */
++typedef struct _xmlSecNssKeysStoreCtx xmlSecNssKeysStoreCtx ;
++typedef struct _xmlSecNssKeysStoreCtx* xmlSecNssKeysStoreCtxPtr ;
++
++struct _xmlSecNssKeysStoreCtx {
++ xmlSecPtrListPtr keyList ;
++ xmlSecPtrListPtr slotList ;
++} ;
++
++#define xmlSecNssKeysStoreSize \
++ ( sizeof( xmlSecKeyStore ) + sizeof( xmlSecNssKeysStoreCtx ) )
++
++#define xmlSecNssKeysStoreGetCtx( data ) \
++ ( ( xmlSecNssKeysStoreCtxPtr )( ( ( xmlSecByte* )( data ) ) + sizeof( xmlSecKeyStore ) ) )
++
++int xmlSecNssKeysStoreAdoptKeySlot(
++ xmlSecKeyStorePtr store ,
++ xmlSecNssKeySlotPtr keySlot
++) {
++ xmlSecNssKeysStoreCtxPtr context = NULL ;
++
++ xmlSecAssert2( xmlSecKeyStoreCheckId( store , xmlSecNssKeysStoreId ) , -1 ) ;
++ xmlSecAssert2( xmlSecKeyStoreCheckSize( store , xmlSecNssKeysStoreSize ) , -1 ) ;
++
++ context = xmlSecNssKeysStoreGetCtx( store ) ;
++ if( context == NULL ) {
++ xmlSecError( XMLSEC_ERRORS_HERE ,
++ xmlSecErrorsSafeString( xmlSecKeyStoreGetName( store ) ) ,
++ "xmlSecNssKeysStoreGetCtx" ,
++ XMLSEC_ERRORS_R_XMLSEC_FAILED ,
++ XMLSEC_ERRORS_NO_MESSAGE ) ;
++ return -1 ;
++ }
++
++ if( context->slotList == NULL ) {
++ if( ( context->slotList = xmlSecPtrListCreate( xmlSecNssKeySlotListId ) ) == NULL ) {
++ xmlSecError( XMLSEC_ERRORS_HERE ,
++ xmlSecErrorsSafeString( xmlSecKeyStoreGetName( store ) ) ,
++ "xmlSecPtrListCreate" ,
++ XMLSEC_ERRORS_R_XMLSEC_FAILED ,
++ XMLSEC_ERRORS_NO_MESSAGE ) ;
++ return -1 ;
++ }
++ }
++
++ if( !xmlSecPtrListCheckId( context->slotList , xmlSecNssKeySlotListId ) ) {
++ xmlSecError( XMLSEC_ERRORS_HERE ,
++ xmlSecErrorsSafeString( xmlSecKeyStoreGetName( store ) ) ,
++ "xmlSecPtrListCheckId" ,
++ XMLSEC_ERRORS_R_XMLSEC_FAILED ,
++ XMLSEC_ERRORS_NO_MESSAGE ) ;
++ return -1 ;
++ }
++
++ if( xmlSecPtrListAdd( context->slotList , keySlot ) < 0 ) {
++ xmlSecError( XMLSEC_ERRORS_HERE ,
++ xmlSecErrorsSafeString( xmlSecKeyStoreGetName( store ) ) ,
++ "xmlSecPtrListAdd" ,
++ XMLSEC_ERRORS_R_XMLSEC_FAILED ,
++ XMLSEC_ERRORS_NO_MESSAGE ) ;
++ return -1 ;
++ }
++
++ return 0 ;
++}
++
++int xmlSecNssKeysStoreAdoptKey(
++ xmlSecKeyStorePtr store ,
++ xmlSecKeyPtr key
++) {
++ xmlSecNssKeysStoreCtxPtr context = NULL ;
++
++ xmlSecAssert2( xmlSecKeyStoreCheckId( store , xmlSecNssKeysStoreId ) , -1 ) ;
++ xmlSecAssert2( xmlSecKeyStoreCheckSize( store , xmlSecNssKeysStoreSize ) , -1 ) ;
++
++ context = xmlSecNssKeysStoreGetCtx( store ) ;
++ if( context == NULL ) {
++ xmlSecError( XMLSEC_ERRORS_HERE ,
++ xmlSecErrorsSafeString( xmlSecKeyStoreGetName( store ) ) ,
++ "xmlSecNssKeysStoreGetCtx" ,
++ XMLSEC_ERRORS_R_XMLSEC_FAILED ,
++ XMLSEC_ERRORS_NO_MESSAGE ) ;
++ return -1 ;
++ }
++
++ if( context->keyList == NULL ) {
++ if( ( context->keyList = xmlSecPtrListCreate( xmlSecKeyPtrListId ) ) == NULL ) {
++ xmlSecError( XMLSEC_ERRORS_HERE ,
++ xmlSecErrorsSafeString( xmlSecKeyStoreGetName( store ) ) ,
++ "xmlSecPtrListCreate" ,
++ XMLSEC_ERRORS_R_XMLSEC_FAILED ,
++ XMLSEC_ERRORS_NO_MESSAGE ) ;
++ return -1 ;
++ }
++ }
++
++ if( !xmlSecPtrListCheckId( context->keyList , xmlSecKeyPtrListId ) ) {
++ xmlSecError( XMLSEC_ERRORS_HERE ,
++ xmlSecErrorsSafeString( xmlSecKeyStoreGetName( store ) ) ,
++ "xmlSecPtrListCheckId" ,
++ XMLSEC_ERRORS_R_XMLSEC_FAILED ,
++ XMLSEC_ERRORS_NO_MESSAGE ) ;
++ return -1 ;
++ }
++
++ if( xmlSecPtrListAdd( context->keyList , key ) < 0 ) {
++ xmlSecError( XMLSEC_ERRORS_HERE ,
++ xmlSecErrorsSafeString( xmlSecKeyStoreGetName( store ) ) ,
++ "xmlSecPtrListAdd" ,
++ XMLSEC_ERRORS_R_XMLSEC_FAILED ,
++ XMLSEC_ERRORS_NO_MESSAGE ) ;
++ return -1 ;
++ }
++
++ return 0 ;
++}
++
++/**
++ * xmlSecKeyStoreInitializeMethod:
++ * @store: the store.
+ *
+- ***************************************************************************/
+-#define xmlSecNssKeysStoreSize \
+- (sizeof(xmlSecKeyStore) + sizeof(xmlSecKeyStorePtr))
+-
+-#define xmlSecNssKeysStoreGetSS(store) \
+- ((xmlSecKeyStoreCheckSize((store), xmlSecNssKeysStoreSize)) ? \
+- (xmlSecKeyStorePtr*)(((xmlSecByte*)(store)) + sizeof(xmlSecKeyStore)) : \
+- (xmlSecKeyStorePtr*)NULL)
+-
+-static int xmlSecNssKeysStoreInitialize (xmlSecKeyStorePtr store);
+-static void xmlSecNssKeysStoreFinalize (xmlSecKeyStorePtr store);
+-static xmlSecKeyPtr xmlSecNssKeysStoreFindKey (xmlSecKeyStorePtr store,
+- const xmlChar* name,
+- xmlSecKeyInfoCtxPtr keyInfoCtx);
++ * Keys store specific initialization method.
++ *
++ * Returns 0 on success or a negative value if an error occurs.
++ */
++static int
++xmlSecNssKeysStoreInitialize(
++ xmlSecKeyStorePtr store
++) {
++ xmlSecNssKeysStoreCtxPtr context = NULL ;
++
++ xmlSecAssert2( xmlSecKeyStoreCheckId( store , xmlSecNssKeysStoreId ) , -1 ) ;
++ xmlSecAssert2( xmlSecKeyStoreCheckSize( store , xmlSecNssKeysStoreSize ) , -1 ) ;
++
++ context = xmlSecNssKeysStoreGetCtx( store ) ;
++ if( context == NULL ) {
++ xmlSecError( XMLSEC_ERRORS_HERE ,
++ xmlSecErrorsSafeString( xmlSecKeyStoreGetName( store ) ) ,
++ "xmlSecNssKeysStoreGetCtx" ,
++ XMLSEC_ERRORS_R_XMLSEC_FAILED ,
++ XMLSEC_ERRORS_NO_MESSAGE ) ;
++ return -1 ;
++ }
+
+-static xmlSecKeyStoreKlass xmlSecNssKeysStoreKlass = {
+- sizeof(xmlSecKeyStoreKlass),
+- xmlSecNssKeysStoreSize,
++ context->keyList = NULL ;
++ context->slotList = NULL ;
+
+- /* data */
+- BAD_CAST "NSS-keys-store", /* const xmlChar* name; */
+-
+- /* constructors/destructor */
+- xmlSecNssKeysStoreInitialize, /* xmlSecKeyStoreInitializeMethod initialize; */
+- xmlSecNssKeysStoreFinalize, /* xmlSecKeyStoreFinalizeMethod finalize; */
+- xmlSecNssKeysStoreFindKey, /* xmlSecKeyStoreFindKeyMethod findKey; */
+-
+- /* reserved for the future */
+- NULL, /* void* reserved0; */
+- NULL, /* void* reserved1; */
+-};
++ return 0 ;
++}
+
+-/**
+- * xmlSecNssKeysStoreGetKlass:
+- *
+- * The Nss list based keys store klass.
++/**
++ * xmlSecKeyStoreFinalizeMethod:
++ * @store: the store.
+ *
+- * Returns Nss list based keys store klass.
++ * Keys store specific finalization (destroy) method.
+ */
+-xmlSecKeyStoreId
+-xmlSecNssKeysStoreGetKlass(void) {
+- return(&xmlSecNssKeysStoreKlass);
++void
++xmlSecNssKeysStoreFinalize(
++ xmlSecKeyStorePtr store
++) {
++ xmlSecNssKeysStoreCtxPtr context = NULL ;
++
++ xmlSecAssert( xmlSecKeyStoreCheckId( store , xmlSecNssKeysStoreId ) ) ;
++ xmlSecAssert( xmlSecKeyStoreCheckSize( store , xmlSecNssKeysStoreSize ) ) ;
++
++ context = xmlSecNssKeysStoreGetCtx( store ) ;
++ if( context == NULL ) {
++ xmlSecError( XMLSEC_ERRORS_HERE ,
++ xmlSecErrorsSafeString( xmlSecKeyStoreGetName( store ) ) ,
++ "xmlSecNssKeysStoreGetCtx" ,
++ XMLSEC_ERRORS_R_XMLSEC_FAILED ,
++ XMLSEC_ERRORS_NO_MESSAGE ) ;
++ return ;
++ }
++
++ if( context->keyList != NULL ) {
++ xmlSecPtrListDestroy( context->keyList ) ;
++ context->keyList = NULL ;
++ }
++
++ if( context->slotList != NULL ) {
++ xmlSecPtrListDestroy( context->slotList ) ;
++ context->slotList = NULL ;
++ }
+ }
+
+-/**
+- * xmlSecNssKeysStoreAdoptKey:
+- * @store: the pointer to Nss keys store.
+- * @key: the pointer to key.
+- *
+- * Adds @key to the @store.
++xmlSecKeyPtr
++xmlSecNssKeysStoreFindKeyFromSlot(
++ PK11SlotInfo* slot,
++ const xmlChar* name,
++ xmlSecKeyInfoCtxPtr keyInfoCtx
++) {
++ xmlSecKeyPtr key = NULL ;
++ xmlSecKeyDataPtr data = NULL ;
++ int length ;
++
++ xmlSecAssert2( slot != NULL , NULL ) ;
++ xmlSecAssert2( name != NULL , NULL ) ;
++ xmlSecAssert2( keyInfoCtx != NULL , NULL ) ;
++
++ if( ( keyInfoCtx->keyReq.keyType & xmlSecKeyDataTypeSymmetric ) == xmlSecKeyDataTypeSymmetric ) {
++ PK11SymKey* symKey ;
++ PK11SymKey* curKey ;
++
++ /* Find symmetric key from the slot by name */
++ symKey = PK11_ListFixedKeysInSlot( slot , ( char* )name , NULL ) ;
++ for( curKey = symKey ; curKey != NULL ; curKey = PK11_GetNextSymKey( curKey ) ) {
++ /* Check the key request */
++ length = PK11_GetKeyLength( curKey ) ;
++ length *= 8 ;
++ if( ( keyInfoCtx->keyReq.keyBitsSize > 0 ) &&
++ ( length > 0 ) &&
++ ( length < keyInfoCtx->keyReq.keyBitsSize ) )
++ continue ;
++
++ /* We find a eligible key */
++ data = xmlSecNssSymKeyDataKeyAdopt( curKey ) ;
++ if( data == NULL ) {
++ /* Do nothing */
++ }
++ break ;
++ }
++
++ /* Destroy the sym key list */
++ for( curKey = symKey ; curKey != NULL ; ) {
++ symKey = curKey ;
++ curKey = PK11_GetNextSymKey( symKey ) ;
++ PK11_FreeSymKey( symKey ) ;
++ }
++ } else if( ( keyInfoCtx->keyReq.keyType & xmlSecKeyDataTypePublic ) == xmlSecKeyDataTypePublic ) {
++ SECKEYPublicKeyList* pubKeyList ;
++ SECKEYPublicKey* pubKey ;
++ SECKEYPublicKeyListNode* curPub ;
++
++ /* Find asymmetric key from the slot by name */
++ pubKeyList = PK11_ListPublicKeysInSlot( slot , ( char* )name ) ;
++ pubKey = NULL ;
++ curPub = PUBKEY_LIST_HEAD(pubKeyList);
++ for( ; !PUBKEY_LIST_END(curPub, pubKeyList) ; curPub = PUBKEY_LIST_NEXT( curPub ) ) {
++ /* Check the key request */
++ length = SECKEY_PublicKeyStrength( curPub->key ) ;
++ length *= 8 ;
++ if( ( keyInfoCtx->keyReq.keyBitsSize > 0 ) &&
++ ( length > 0 ) &&
++ ( length < keyInfoCtx->keyReq.keyBitsSize ) )
++ continue ;
++
++ /* We find a eligible key */
++ pubKey = curPub->key ;
++ break ;
++ }
++
++ if( pubKey != NULL ) {
++ data = xmlSecNssPKIAdoptKey( NULL, pubKey ) ;
++ if( data == NULL ) {
++ /* Do nothing */
++ }
++ }
++
++ /* Destroy the public key list */
++ SECKEY_DestroyPublicKeyList( pubKeyList ) ;
++ } else if( ( keyInfoCtx->keyReq.keyType & xmlSecKeyDataTypePrivate ) == xmlSecKeyDataTypePrivate ) {
++ SECKEYPrivateKeyList* priKeyList = NULL ;
++ SECKEYPrivateKey* priKey = NULL ;
++ SECKEYPrivateKeyListNode* curPri ;
++
++ /* Find asymmetric key from the slot by name */
++ priKeyList = PK11_ListPrivKeysInSlot( slot , ( char* )name , NULL ) ;
++ priKey = NULL ;
++ curPri = PRIVKEY_LIST_HEAD(priKeyList);
++ for( ; !PRIVKEY_LIST_END(curPri, priKeyList) ; curPri = PRIVKEY_LIST_NEXT( curPri ) ) {
++ /* Check the key request */
++ length = PK11_SignatureLen( curPri->key ) ;
++ length *= 8 ;
++ if( ( keyInfoCtx->keyReq.keyBitsSize > 0 ) &&
++ ( length > 0 ) &&
++ ( length < keyInfoCtx->keyReq.keyBitsSize ) )
++ continue ;
++
++ /* We find a eligible key */
++ priKey = curPri->key ;
++ break ;
++ }
++
++ if( priKey != NULL ) {
++ data = xmlSecNssPKIAdoptKey( priKey, NULL ) ;
++ if( data == NULL ) {
++ /* Do nothing */
++ }
++ }
++
++ /* Destroy the private key list */
++ SECKEY_DestroyPrivateKeyList( priKeyList ) ;
++ }
++
++ /* If we have gotten the key value */
++ if( data != NULL ) {
++ if( ( key = xmlSecKeyCreate() ) == NULL ) {
++ xmlSecError( XMLSEC_ERRORS_HERE ,
++ NULL ,
++ "xmlSecKeyCreate" ,
++ XMLSEC_ERRORS_R_XMLSEC_FAILED ,
++ XMLSEC_ERRORS_NO_MESSAGE ) ;
++
++ xmlSecKeyDataDestroy( data ) ;
++ return NULL ;
++ }
++
++ if( xmlSecKeySetValue( key , data ) < 0 ) {
++ xmlSecError( XMLSEC_ERRORS_HERE ,
++ NULL ,
++ "xmlSecKeySetValue" ,
++ XMLSEC_ERRORS_R_XMLSEC_FAILED ,
++ XMLSEC_ERRORS_NO_MESSAGE ) ;
++
++ xmlSecKeyDestroy( key ) ;
++ xmlSecKeyDataDestroy( data ) ;
++ return NULL ;
++ }
++ }
++
++ return(key);
++}
++
++/**
++ * xmlSecKeyStoreFindKeyMethod:
++ * @store: the store.
++ * @name: the desired key name.
++ * @keyInfoCtx: the pointer to key info context.
+ *
+- * Returns 0 on success or a negative value if an error occurs.
++ * Keys store specific find method. The caller is responsible for destroying
++ * the returned key using #xmlSecKeyDestroy method.
++ *
++ * Returns the pointer to a key or NULL if key is not found or an error occurs.
+ */
+-int
+-xmlSecNssKeysStoreAdoptKey(xmlSecKeyStorePtr store, xmlSecKeyPtr key) {
+- xmlSecKeyStorePtr *ss;
+-
+- xmlSecAssert2(xmlSecKeyStoreCheckId(store, xmlSecNssKeysStoreId), -1);
+- xmlSecAssert2((key != NULL), -1);
++static xmlSecKeyPtr
++xmlSecNssKeysStoreFindKey(
++ xmlSecKeyStorePtr store ,
++ const xmlChar* name ,
++ xmlSecKeyInfoCtxPtr keyInfoCtx
++) {
++ xmlSecNssKeysStoreCtxPtr context = NULL ;
++ xmlSecKeyPtr key = NULL ;
++ xmlSecNssKeySlotPtr keySlot = NULL ;
++ xmlSecSize pos ;
++ xmlSecSize size ;
++
++ xmlSecAssert2( xmlSecKeyStoreCheckId( store , xmlSecNssKeysStoreId ) , NULL ) ;
++ xmlSecAssert2( xmlSecKeyStoreCheckSize( store , xmlSecNssKeysStoreSize ) , NULL ) ;
++ xmlSecAssert2( keyInfoCtx != NULL , NULL ) ;
++
++ context = xmlSecNssKeysStoreGetCtx( store ) ;
++ if( context == NULL ) {
++ xmlSecError( XMLSEC_ERRORS_HERE ,
++ xmlSecErrorsSafeString( xmlSecKeyStoreGetName( store ) ) ,
++ "xmlSecNssKeysStoreGetCtx" ,
++ XMLSEC_ERRORS_R_XMLSEC_FAILED ,
++ XMLSEC_ERRORS_NO_MESSAGE ) ;
++ return NULL ;
++ }
++
++ /*-
++ * Look for key at keyList at first.
++ */
++ if( context->keyList != NULL ) {
++ size = xmlSecPtrListGetSize( context->keyList ) ;
++ for( pos = 0 ; pos < size ; pos ++ ) {
++ key = ( xmlSecKeyPtr )xmlSecPtrListGetItem( context->keyList , pos ) ;
++ if( key != NULL && xmlSecKeyMatch( key , name , &( keyInfoCtx->keyReq ) ) ) {
++ return xmlSecKeyDuplicate( key ) ;
++ }
++ }
++ }
++
++ /*-
++ * Find the key from slotList
++ */
++ if( context->slotList != NULL ) {
++ PK11SlotInfo* slot = NULL ;
++
++ size = xmlSecPtrListGetSize( context->slotList ) ;
++ for( pos = 0 ; pos < size ; pos ++ ) {
++ keySlot = ( xmlSecNssKeySlotPtr )xmlSecPtrListGetItem( context->slotList , pos ) ;
++ slot = xmlSecNssKeySlotGetSlot( keySlot ) ;
++ if( slot == NULL ) {
++ continue ;
++ } else {
++ key = xmlSecNssKeysStoreFindKeyFromSlot( slot, name, keyInfoCtx ) ;
++ if( key == NULL ) {
++ continue ;
++ } else {
++ return( key ) ;
++ }
++ }
++ }
++ }
++
++ /*-
++ * Create a session key if we can not find the key from keyList and slotList
++ */
++ if( ( keyInfoCtx->keyReq.keyType & xmlSecKeyDataTypeSession ) == xmlSecKeyDataTypeSession ) {
++ key = xmlSecKeyGenerate( keyInfoCtx->keyReq.keyId , keyInfoCtx->keyReq.keyBitsSize , xmlSecKeyDataTypeSession ) ;
++ if( key == NULL ) {
++ xmlSecError( XMLSEC_ERRORS_HERE ,
++ xmlSecErrorsSafeString( xmlSecKeyStoreGetName( store ) ) ,
++ "xmlSecKeySetValue" ,
++ XMLSEC_ERRORS_R_XMLSEC_FAILED ,
++ XMLSEC_ERRORS_NO_MESSAGE ) ;
++ return NULL ;
++ }
++
++ return key ;
++ }
++
++ /**
++ * We have no way to find the key any more.
++ */
++ return NULL ;
++}
+
+- ss = xmlSecNssKeysStoreGetSS(store);
+- xmlSecAssert2(((ss != NULL) && (*ss != NULL) &&
+- (xmlSecKeyStoreCheckId(*ss, xmlSecSimpleKeysStoreId))), -1);
++#ifdef __MINGW32__ // for runtime-pseudo-reloc
++static struct _xmlSecKeyStoreKlass xmlSecNssKeysStoreKlass = {
++#else
++static xmlSecKeyStoreKlass xmlSecNssKeysStoreKlass = {
++#endif
++ sizeof( xmlSecKeyStoreKlass ) ,
++ xmlSecNssKeysStoreSize ,
++ BAD_CAST "implicit_nss_keys_store" ,
++ xmlSecNssKeysStoreInitialize ,
++ xmlSecNssKeysStoreFinalize ,
++ xmlSecNssKeysStoreFindKey ,
++ NULL ,
++ NULL
++} ;
+
+- return (xmlSecSimpleKeysStoreAdoptKey(*ss, key));
++/**
++ * xmlSecNssKeysStoreGetKlass:
++ *
++ * The simple list based keys store klass.
++ *
++ * Returns simple list based keys store klass.
++ */
++xmlSecKeyStoreId
++xmlSecNssKeysStoreGetKlass( void ) {
++ return &xmlSecNssKeysStoreKlass ;
+ }
+
++
++/**************************
++ * Application routines
++ */
+ /**
+ * xmlSecNssKeysStoreLoad:
+ * @store: the pointer to Nss keys store.
+@@ -125,8 +528,11 @@
+ * Returns 0 on success or a negative value if an error occurs.
+ */
+ int
+-xmlSecNssKeysStoreLoad(xmlSecKeyStorePtr store, const char *uri,
+- xmlSecKeysMngrPtr keysMngr) {
++xmlSecNssKeysStoreLoad(
++ xmlSecKeyStorePtr store,
++ const char *uri,
++ xmlSecKeysMngrPtr keysMngr
++) {
+ xmlDocPtr doc;
+ xmlNodePtr root;
+ xmlNodePtr cur;
+@@ -252,254 +658,147 @@
+ */
+ int
+ xmlSecNssKeysStoreSave(xmlSecKeyStorePtr store, const char *filename, xmlSecKeyDataType type) {
+- xmlSecKeyStorePtr *ss;
+-
+- xmlSecAssert2(xmlSecKeyStoreCheckId(store, xmlSecNssKeysStoreId), -1);
+- xmlSecAssert2((filename != NULL), -1);
+-
+- ss = xmlSecNssKeysStoreGetSS(store);
+- xmlSecAssert2(((ss != NULL) && (*ss != NULL) &&
+- (xmlSecKeyStoreCheckId(*ss, xmlSecSimpleKeysStoreId))), -1);
+-
+- return (xmlSecSimpleKeysStoreSave(*ss, filename, type));
+-}
+-
+-static int
+-xmlSecNssKeysStoreInitialize(xmlSecKeyStorePtr store) {
+- xmlSecKeyStorePtr *ss;
+-
+- xmlSecAssert2(xmlSecKeyStoreCheckId(store, xmlSecNssKeysStoreId), -1);
++ xmlSecKeyInfoCtx keyInfoCtx;
++ xmlSecNssKeysStoreCtxPtr context ;
++ xmlSecPtrListPtr list;
++ xmlSecKeyPtr key;
++ xmlSecSize i, keysSize;
++ xmlDocPtr doc;
++ xmlNodePtr cur;
++ xmlSecKeyDataPtr data;
++ xmlSecPtrListPtr idsList;
++ xmlSecKeyDataId dataId;
++ xmlSecSize idsSize, j;
++ int ret;
+
+- ss = xmlSecNssKeysStoreGetSS(store);
+- xmlSecAssert2((*ss == NULL), -1);
++ xmlSecAssert2( xmlSecKeyStoreCheckId( store , xmlSecNssKeysStoreId ), -1 ) ;
++ xmlSecAssert2( xmlSecKeyStoreCheckSize( store , xmlSecNssKeysStoreSize ), -1 ) ;
++ xmlSecAssert2(filename != NULL, -1);
++
++ context = xmlSecNssKeysStoreGetCtx( store ) ;
++ xmlSecAssert2( context != NULL, -1 );
++
++ list = context->keyList ;
++ xmlSecAssert2( list != NULL, -1 );
++ xmlSecAssert2(xmlSecPtrListCheckId(list, xmlSecKeyPtrListId), -1);
+
+- *ss = xmlSecKeyStoreCreate(xmlSecSimpleKeysStoreId);
+- if(*ss == NULL) {
+- xmlSecError(XMLSEC_ERRORS_HERE,
++ /* create doc */
++ doc = xmlSecCreateTree(BAD_CAST "Keys", xmlSecNs);
++ if(doc == NULL) {
++ xmlSecError(XMLSEC_ERRORS_HERE,
+ xmlSecErrorsSafeString(xmlSecKeyStoreGetName(store)),
+- "xmlSecKeyStoreCreate",
++ "xmlSecCreateTree",
+ XMLSEC_ERRORS_R_XMLSEC_FAILED,
+- "xmlSecSimpleKeysStoreId");
+- return(-1);
++ XMLSEC_ERRORS_NO_MESSAGE);
++ return(-1);
+ }
+-
+- return(0);
+-}
+-
+-static void
+-xmlSecNssKeysStoreFinalize(xmlSecKeyStorePtr store) {
+- xmlSecKeyStorePtr *ss;
+-
+- xmlSecAssert(xmlSecKeyStoreCheckId(store, xmlSecNssKeysStoreId));
+-
+- ss = xmlSecNssKeysStoreGetSS(store);
+- xmlSecAssert((ss != NULL) && (*ss != NULL));
+
+- xmlSecKeyStoreDestroy(*ss);
+-}
+-
+-static xmlSecKeyPtr
+-xmlSecNssKeysStoreFindKey(xmlSecKeyStorePtr store, const xmlChar* name,
+- xmlSecKeyInfoCtxPtr keyInfoCtx) {
+- xmlSecKeyStorePtr* ss;
+- xmlSecKeyPtr key = NULL;
+- xmlSecKeyPtr retval = NULL;
+- xmlSecKeyReqPtr keyReq = NULL;
+- CERTCertificate *cert = NULL;
+- SECKEYPublicKey *pubkey = NULL;
+- SECKEYPrivateKey *privkey = NULL;
+- xmlSecKeyDataPtr data = NULL;
+- xmlSecKeyDataPtr x509Data = NULL;
+- int ret;
+-
+- xmlSecAssert2(xmlSecKeyStoreCheckId(store, xmlSecNssKeysStoreId), NULL);
+- xmlSecAssert2(keyInfoCtx != NULL, NULL);
+-
+- ss = xmlSecNssKeysStoreGetSS(store);
+- xmlSecAssert2(((ss != NULL) && (*ss != NULL)), NULL);
+-
+- key = xmlSecKeyStoreFindKey(*ss, name, keyInfoCtx);
+- if (key != NULL) {
+- return (key);
+- }
++ idsList = xmlSecKeyDataIdsGet();
++ xmlSecAssert2(idsList != NULL, -1);
++
++ keysSize = xmlSecPtrListGetSize(list);
++ idsSize = xmlSecPtrListGetSize(idsList);
++ for(i = 0; i < keysSize; ++i) {
++ key = (xmlSecKeyPtr)xmlSecPtrListGetItem(list, i);
++ xmlSecAssert2(key != NULL, -1);
++
++ cur = xmlSecAddChild(xmlDocGetRootElement(doc), xmlSecNodeKeyInfo, xmlSecDSigNs);
++ if(cur == NULL) {
++ xmlSecError(XMLSEC_ERRORS_HERE,
++ xmlSecErrorsSafeString(xmlSecKeyStoreGetName(store)),
++ "xmlSecAddChild",
++ XMLSEC_ERRORS_R_XMLSEC_FAILED,
++ "node=%s",
++ xmlSecErrorsSafeString(xmlSecNodeKeyInfo));
++ xmlFreeDoc(doc);
++ return(-1);
++ }
+
+- /* Try to find the key in the NSS DB, and construct an xmlSecKey.
+- * we must have a name to lookup keys in NSS DB.
+- */
+- if (name == NULL) {
+- goto done;
+- }
++ /* special data key name */
++ if(xmlSecKeyGetName(key) != NULL) {
++ if(xmlSecAddChild(cur, xmlSecNodeKeyName, xmlSecDSigNs) == NULL) {
++ xmlSecError(XMLSEC_ERRORS_HERE,
++ xmlSecErrorsSafeString(xmlSecKeyStoreGetName(store)),
++ "xmlSecAddChild",
++ XMLSEC_ERRORS_R_XMLSEC_FAILED,
++ "node=%s",
++ xmlSecErrorsSafeString(xmlSecNodeKeyName));
++ xmlFreeDoc(doc);
++ return(-1);
++ }
++ }
++
++ /* create nodes for other keys data */
++ for(j = 0; j < idsSize; ++j) {
++ dataId = (xmlSecKeyDataId)xmlSecPtrListGetItem(idsList, j);
++ xmlSecAssert2(dataId != xmlSecKeyDataIdUnknown, -1);
+
+- /* what type of key are we looking for?
+- * TBD: For now, we'll look only for public/private keys using the
+- * name as a cert nickname. Later on, we can attempt to find
+- * symmetric keys using PK11_FindFixedKey
+- */
+- keyReq = &(keyInfoCtx->keyReq);
+- if (keyReq->keyType &
+- (xmlSecKeyDataTypePublic | xmlSecKeyDataTypePrivate)) {
+- cert = CERT_FindCertByNickname (CERT_GetDefaultCertDB(), (char *)name);
+- if (cert == NULL) {
+- goto done;
+- }
+-
+- if (keyReq->keyType & xmlSecKeyDataTypePublic) {
+- pubkey = CERT_ExtractPublicKey(cert);
+- if (pubkey == NULL) {
+- xmlSecError(XMLSEC_ERRORS_HERE,
+- NULL,
+- "CERT_ExtractPublicKey",
+- XMLSEC_ERRORS_R_CRYPTO_FAILED,
+- XMLSEC_ERRORS_NO_MESSAGE);
+- goto done;
++ if(dataId->dataNodeName == NULL) {
++ continue;
++ }
++
++ data = xmlSecKeyGetData(key, dataId);
++ if(data == NULL) {
++ continue;
+ }
+- }
+
+- if (keyReq->keyType & xmlSecKeyDataTypePrivate) {
+- privkey = PK11_FindKeyByAnyCert(cert, NULL);
+- if (privkey == NULL) {
+- xmlSecError(XMLSEC_ERRORS_HERE,
+- NULL,
+- "PK11_FindKeyByAnyCert",
+- XMLSEC_ERRORS_R_CRYPTO_FAILED,
+- XMLSEC_ERRORS_NO_MESSAGE);
+- goto done;
++ if(xmlSecAddChild(cur, dataId->dataNodeName, dataId->dataNodeNs) == NULL) {
++ xmlSecError(XMLSEC_ERRORS_HERE,
++ xmlSecErrorsSafeString(xmlSecKeyStoreGetName(store)),
++ "xmlSecAddChild",
++ XMLSEC_ERRORS_R_XMLSEC_FAILED,
++ "node=%s",
++ xmlSecErrorsSafeString(dataId->dataNodeName));
++ xmlFreeDoc(doc);
++ return(-1);
+ }
+ }
+
+- data = xmlSecNssPKIAdoptKey(privkey, pubkey);
+- if(data == NULL) {
+- xmlSecError(XMLSEC_ERRORS_HERE,
+- NULL,
+- "xmlSecNssPKIAdoptKey",
+- XMLSEC_ERRORS_R_XMLSEC_FAILED,
+- XMLSEC_ERRORS_NO_MESSAGE);
+- goto done;
+- }
+- privkey = NULL;
+- pubkey = NULL;
+-
+- key = xmlSecKeyCreate();
+- if (key == NULL) {
++ ret = xmlSecKeyInfoCtxInitialize(&keyInfoCtx, NULL);
++ if(ret < 0) {
+ xmlSecError(XMLSEC_ERRORS_HERE,
+- NULL,
+- "xmlSecKeyCreate",
++ xmlSecErrorsSafeString(xmlSecKeyStoreGetName(store)),
++ "xmlSecKeyInfoCtxInitialize",
+ XMLSEC_ERRORS_R_XMLSEC_FAILED,
+ XMLSEC_ERRORS_NO_MESSAGE);
+- return (NULL);
+- }
+-
+- x509Data = xmlSecKeyDataCreate(xmlSecNssKeyDataX509Id);
+- if(x509Data == NULL) {
+- xmlSecError(XMLSEC_ERRORS_HERE,
+- NULL,
+- "xmlSecKeyDataCreate",
+- XMLSEC_ERRORS_R_XMLSEC_FAILED,
+- "transform=%s",
+- xmlSecErrorsSafeString(xmlSecTransformKlassGetName(xmlSecNssKeyDataX509Id)));
+- goto done;
+- }
+-
+- ret = xmlSecNssKeyDataX509AdoptKeyCert(x509Data, cert);
+- if (ret < 0) {
+- xmlSecError(XMLSEC_ERRORS_HERE,
+- NULL,
+- "xmlSecNssKeyDataX509AdoptKeyCert",
+- XMLSEC_ERRORS_R_XMLSEC_FAILED,
+- "data=%s",
+- xmlSecErrorsSafeString(xmlSecKeyDataGetName(x509Data)));
+- goto done;
+- }
+- cert = CERT_DupCertificate(cert);
+- if (cert == NULL) {
+- xmlSecError(XMLSEC_ERRORS_HERE,
+- NULL,
+- "CERT_DupCertificate",
+- XMLSEC_ERRORS_R_CRYPTO_FAILED,
+- "data=%s",
+- xmlSecErrorsSafeString(xmlSecKeyDataGetName(x509Data)));
+- goto done;
+- }
+-
+- ret = xmlSecNssKeyDataX509AdoptCert(x509Data, cert);
+- if (ret < 0) {
+- xmlSecError(XMLSEC_ERRORS_HERE,
+- NULL,
+- "xmlSecNssKeyDataX509AdoptCert",
+- XMLSEC_ERRORS_R_XMLSEC_FAILED,
+- "data=%s",
+- xmlSecErrorsSafeString(xmlSecKeyDataGetName(x509Data)));
+- goto done;
++ xmlFreeDoc(doc);
++ return(-1);
+ }
+- cert = NULL;
+
+- ret = xmlSecKeySetValue(key, data);
+- if (ret < 0) {
+- xmlSecError(XMLSEC_ERRORS_HERE,
+- NULL,
+- "xmlSecKeySetValue",
+- XMLSEC_ERRORS_R_XMLSEC_FAILED,
+- "data=%s",
+- xmlSecErrorsSafeString(xmlSecKeyDataGetName(data)));
+- goto done;
+- }
+- data = NULL;
++ keyInfoCtx.mode = xmlSecKeyInfoModeWrite;
++ keyInfoCtx.keyReq.keyId = xmlSecKeyDataIdUnknown;
++ keyInfoCtx.keyReq.keyType = type;
++ keyInfoCtx.keyReq.keyUsage = xmlSecKeyDataUsageAny;
+
+- ret = xmlSecKeyAdoptData(key, x509Data);
+- if (ret < 0) {
++ /* finally write key in the node */
++ ret = xmlSecKeyInfoNodeWrite(cur, key, &keyInfoCtx);
++ if(ret < 0) {
+ xmlSecError(XMLSEC_ERRORS_HERE,
+- NULL,
+- "xmlSecKeyAdoptData",
++ xmlSecErrorsSafeString(xmlSecKeyStoreGetName(store)),
++ "xmlSecKeyInfoNodeWrite",
+ XMLSEC_ERRORS_R_XMLSEC_FAILED,
+- "data=%s",
+- xmlSecErrorsSafeString(xmlSecKeyDataGetName(x509Data)));
+- goto done;
+- }
+- x509Data = NULL;
+-
+- retval = key;
+- key = NULL;
+- }
+-
+-done:
+- if (cert != NULL) {
+- CERT_DestroyCertificate(cert);
+- }
+- if (pubkey != NULL) {
+- SECKEY_DestroyPublicKey(pubkey);
+- }
+- if (privkey != NULL) {
+- SECKEY_DestroyPrivateKey(privkey);
+- }
+- if (data != NULL) {
+- xmlSecKeyDataDestroy(data);
+- }
+- if (x509Data != NULL) {
+- xmlSecKeyDataDestroy(x509Data);
+- }
+- if (key != NULL) {
+- xmlSecKeyDestroy(key);
++ XMLSEC_ERRORS_NO_MESSAGE);
++ xmlSecKeyInfoCtxFinalize(&keyInfoCtx);
++ xmlFreeDoc(doc);
++ return(-1);
++ }
++ xmlSecKeyInfoCtxFinalize(&keyInfoCtx);
+ }
+-
+- /* now that we have a key, make sure it is valid and let the simple
+- * store adopt it */
+- if (retval) {
+- if (xmlSecKeyIsValid(retval)) {
+- ret = xmlSecSimpleKeysStoreAdoptKey(*ss, retval);
+- if (ret < 0) {
++
++ /* now write result */
++ ret = xmlSaveFormatFile(filename, doc, 1);
++ if(ret < 0) {
+ xmlSecError(XMLSEC_ERRORS_HERE,
+- xmlSecErrorsSafeString(xmlSecKeyStoreGetName(store)),
+- "xmlSecSimpleKeysStoreAdoptKey",
+- XMLSEC_ERRORS_R_XMLSEC_FAILED,
+- XMLSEC_ERRORS_NO_MESSAGE);
+- xmlSecKeyDestroy(retval);
+- retval = NULL;
+- }
+- } else {
+- xmlSecKeyDestroy(retval);
+- retval = NULL;
+- }
+- }
+-
+- return (retval);
++ xmlSecErrorsSafeString(xmlSecKeyStoreGetName(store)),
++ "xmlSaveFormatFile",
++ XMLSEC_ERRORS_R_XML_FAILED,
++ "filename=%s",
++ xmlSecErrorsSafeString(filename));
++ xmlFreeDoc(doc);
++ return(-1);
++ }
++
++ xmlFreeDoc(doc);
++ return(0);
+ }
++
+--- misc/xmlsec1-1.2.6/src/nss/keytrans.c 2008-06-29 23:44:39.000000000 +0200
++++ misc/build/xmlsec1-1.2.6/src/nss/keytrans.c 2008-06-29 23:44:19.000000000 +0200
+@@ -1 +1,752 @@
+-dummy
++/**
++ *
++ * XMLSec library
++ *
++ * AES Algorithm support
++ *
++ * This is free software; see Copyright file in the source
++ * distribution for preciese wording.
++ *
++ * Copyright .................................
++ */
++#include "globals.h"
++
++#include <stdlib.h>
++#include <stdio.h>
++#include <string.h>
++
++#include <nss.h>
++#include <pk11func.h>
++#include <keyhi.h>
++#include <key.h>
++#include <hasht.h>
++
++#include <xmlsec/xmlsec.h>
++#include <xmlsec/xmltree.h>
++#include <xmlsec/keys.h>
++#include <xmlsec/transforms.h>
++#include <xmlsec/errors.h>
++
++#include <xmlsec/nss/crypto.h>
++#include <xmlsec/nss/pkikeys.h>
++#include <xmlsec/nss/tokens.h>
++
++/*********************************************************************
++ *
++ * key transform transforms
++ *
++ ********************************************************************/
++typedef struct _xmlSecNssKeyTransportCtx xmlSecNssKeyTransportCtx ;
++typedef struct _xmlSecNssKeyTransportCtx* xmlSecNssKeyTransportCtxPtr ;
++
++#define xmlSecNssKeyTransportSize \
++ ( sizeof( xmlSecTransform ) + sizeof( xmlSecNssKeyTransportCtx ) )
++
++#define xmlSecNssKeyTransportGetCtx( transform ) \
++ ( ( xmlSecNssKeyTransportCtxPtr )( ( ( xmlSecByte* )( transform ) ) + sizeof( xmlSecTransform ) ) )
++
++struct _xmlSecNssKeyTransportCtx {
++ CK_MECHANISM_TYPE cipher ;
++ SECKEYPublicKey* pubkey ;
++ SECKEYPrivateKey* prikey ;
++ xmlSecKeyDataId keyId ;
++ xmlSecBufferPtr material ; /* to be encrypted/decrypted material */
++} ;
++
++static int xmlSecNssKeyTransportInitialize(xmlSecTransformPtr transform);
++static void xmlSecNssKeyTransportFinalize(xmlSecTransformPtr transform);
++static int xmlSecNssKeyTransportSetKeyReq(xmlSecTransformPtr transform,
++ xmlSecKeyReqPtr keyReq);
++static int xmlSecNssKeyTransportSetKey(xmlSecTransformPtr transform,
++ xmlSecKeyPtr key);
++static int xmlSecNssKeyTransportExecute(xmlSecTransformPtr transform,
++ int last,
++ xmlSecTransformCtxPtr transformCtx);
++static xmlSecSize xmlSecNssKeyTransportGetKeySize(xmlSecTransformPtr transform);
++
++static int
++xmlSecNssKeyTransportCheckId(
++ xmlSecTransformPtr transform
++) {
++ #ifndef XMLSEC_NO_RSA
++ if( xmlSecTransformCheckId( transform, xmlSecNssTransformRsaPkcs1Id ) ||
++ xmlSecTransformCheckId( transform, xmlSecNssTransformRsaOaepId ) ) {
++
++ return(1);
++ }
++ #endif /* XMLSEC_NO_RSA */
++
++ return(0);
++}
++
++static int
++xmlSecNssKeyTransportInitialize(xmlSecTransformPtr transform) {
++ xmlSecNssKeyTransportCtxPtr context ;
++ int ret;
++
++ xmlSecAssert2(xmlSecNssKeyTransportCheckId(transform), -1);
++ xmlSecAssert2(xmlSecTransformCheckSize(transform, xmlSecNssKeyTransportSize), -1);
++
++ context = xmlSecNssKeyTransportGetCtx( transform ) ;
++ xmlSecAssert2( context != NULL , -1 ) ;
++
++ #ifndef XMLSEC_NO_RSA
++ if( transform->id == xmlSecNssTransformRsaPkcs1Id ) {
++ context->cipher = CKM_RSA_PKCS ;
++ context->keyId = xmlSecNssKeyDataRsaId ;
++ } else if( transform->id == xmlSecNssTransformRsaOaepId ) {
++ context->cipher = CKM_RSA_PKCS_OAEP ;
++ context->keyId = xmlSecNssKeyDataRsaId ;
++ } else
++ #endif /* XMLSEC_NO_RSA */
++
++ if( 1 ) {
++ xmlSecError( XMLSEC_ERRORS_HERE ,
++ xmlSecErrorsSafeString(xmlSecTransformGetName(transform)),
++ NULL ,
++ XMLSEC_ERRORS_R_CRYPTO_FAILED ,
++ XMLSEC_ERRORS_NO_MESSAGE ) ;
++ return(-1);
++ }
++
++ context->pubkey = NULL ;
++ context->prikey = NULL ;
++ context->material = NULL ;
++
++ return(0);
++}
++
++static void
++xmlSecNssKeyTransportFinalize(xmlSecTransformPtr transform) {
++ xmlSecNssKeyTransportCtxPtr context ;
++
++ xmlSecAssert(xmlSecNssKeyTransportCheckId(transform));
++ xmlSecAssert(xmlSecTransformCheckSize(transform, xmlSecNssKeyTransportSize));
++
++ context = xmlSecNssKeyTransportGetCtx( transform ) ;
++ xmlSecAssert( context != NULL ) ;
++
++ if( context->pubkey != NULL ) {
++ SECKEY_DestroyPublicKey( context->pubkey ) ;
++ context->pubkey = NULL ;
++ }
++
++ if( context->prikey != NULL ) {
++ SECKEY_DestroyPrivateKey( context->prikey ) ;
++ context->prikey = NULL ;
++ }
++
++ if( context->material != NULL ) {
++ xmlSecBufferDestroy(context->material);
++ context->material = NULL ;
++ }
++}
++
++static int
++xmlSecNssKeyTransportSetKeyReq(xmlSecTransformPtr transform, xmlSecKeyReqPtr keyReq) {
++ xmlSecNssKeyTransportCtxPtr context ;
++ xmlSecSize cipherSize = 0 ;
++
++
++ xmlSecAssert2(xmlSecNssKeyTransportCheckId(transform), -1);
++ xmlSecAssert2(xmlSecTransformCheckSize(transform, xmlSecNssKeyTransportSize), -1);
++ xmlSecAssert2((transform->operation == xmlSecTransformOperationEncrypt) || (transform->operation == xmlSecTransformOperationDecrypt), -1);
++ xmlSecAssert2(keyReq != NULL, -1);
++
++ context = xmlSecNssKeyTransportGetCtx( transform ) ;
++ xmlSecAssert2( context != NULL , -1 ) ;
++
++ keyReq->keyId = context->keyId;
++ if(transform->operation == xmlSecTransformOperationEncrypt) {
++ keyReq->keyUsage = xmlSecKeyUsageEncrypt;
++ keyReq->keyType = xmlSecKeyDataTypePublic;
++ } else {
++ keyReq->keyUsage = xmlSecKeyUsageDecrypt;
++ keyReq->keyType = xmlSecKeyDataTypePrivate;
++ }
++
++ return(0);
++}
++
++static int
++xmlSecNssKeyTransportSetKey(xmlSecTransformPtr transform, xmlSecKeyPtr key) {
++ xmlSecNssKeyTransportCtxPtr context = NULL ;
++ xmlSecKeyDataPtr keyData = NULL ;
++ SECKEYPublicKey* pubkey = NULL ;
++ SECKEYPrivateKey* prikey = NULL ;
++
++ xmlSecAssert2(xmlSecNssKeyTransportCheckId(transform), -1);
++ xmlSecAssert2(xmlSecTransformCheckSize(transform, xmlSecNssKeyTransportSize), -1);
++ xmlSecAssert2((transform->operation == xmlSecTransformOperationEncrypt) || (transform->operation == xmlSecTransformOperationDecrypt), -1);
++ xmlSecAssert2(key != NULL, -1);
++
++ context = xmlSecNssKeyTransportGetCtx( transform ) ;
++ if( context == NULL || context->keyId == NULL || context->pubkey != NULL ) {
++ xmlSecError( XMLSEC_ERRORS_HERE ,
++ xmlSecErrorsSafeString( xmlSecTransformGetName( transform ) ) ,
++ "xmlSecNssKeyTransportGetCtx" ,
++ XMLSEC_ERRORS_R_CRYPTO_FAILED ,
++ XMLSEC_ERRORS_NO_MESSAGE ) ;
++ return(-1);
++ }
++ xmlSecAssert2( xmlSecKeyCheckId( key, context->keyId ), -1 ) ;
++
++ keyData = xmlSecKeyGetValue( key ) ;
++ if( keyData == NULL ) {
++ xmlSecError( XMLSEC_ERRORS_HERE ,
++ xmlSecErrorsSafeString( xmlSecKeyGetName( key ) ) ,
++ "xmlSecKeyGetValue" ,
++ XMLSEC_ERRORS_R_CRYPTO_FAILED ,
++ XMLSEC_ERRORS_NO_MESSAGE ) ;
++ return(-1);
++ }
++
++ if(transform->operation == xmlSecTransformOperationEncrypt) {
++ if( ( pubkey = xmlSecNssPKIKeyDataGetPubKey( keyData ) ) == NULL ) {
++ xmlSecError( XMLSEC_ERRORS_HERE ,
++ xmlSecErrorsSafeString( xmlSecKeyDataGetName( keyData ) ) ,
++ "xmlSecNssPKIKeyDataGetPubKey" ,
++ XMLSEC_ERRORS_R_CRYPTO_FAILED ,
++ XMLSEC_ERRORS_NO_MESSAGE ) ;
++ return(-1);
++ }
++
++ context->pubkey = pubkey ;
++ } else {
++ if( ( prikey = xmlSecNssPKIKeyDataGetPrivKey( keyData ) ) == NULL ) {
++ xmlSecError( XMLSEC_ERRORS_HERE ,
++ xmlSecErrorsSafeString( xmlSecKeyDataGetName( keyData ) ) ,
++ "xmlSecNssPKIKeyDataGetPrivKey" ,
++ XMLSEC_ERRORS_R_CRYPTO_FAILED ,
++ XMLSEC_ERRORS_NO_MESSAGE ) ;
++ return(-1);
++ }
++
++ context->prikey = prikey ;
++ }
++
++ return(0) ;
++}
++
++/**
++ * key wrap transform
++ */
++static int
++xmlSecNssKeyTransportCtxInit(
++ xmlSecNssKeyTransportCtxPtr ctx ,
++ xmlSecBufferPtr in ,
++ xmlSecBufferPtr out ,
++ int encrypt ,
++ xmlSecTransformCtxPtr transformCtx
++) {
++ xmlSecSize blockSize ;
++
++ xmlSecAssert2( ctx != NULL , -1 ) ;
++ xmlSecAssert2( ctx->cipher != CKM_INVALID_MECHANISM , -1 ) ;
++ xmlSecAssert2( ( ctx->pubkey != NULL && encrypt ) || ( ctx->prikey != NULL && !encrypt ), -1 ) ;
++ xmlSecAssert2( ctx->keyId != NULL , -1 ) ;
++ xmlSecAssert2( in != NULL , -1 ) ;
++ xmlSecAssert2( out != NULL , -1 ) ;
++ xmlSecAssert2( transformCtx != NULL , -1 ) ;
++
++ if( ctx->material != NULL ) {
++ xmlSecBufferDestroy( ctx->material ) ;
++ ctx->material = NULL ;
++ }
++
++ if( ctx->pubkey != NULL ) {
++ blockSize = SECKEY_PublicKeyStrength( ctx->pubkey ) ;
++ } else if( ctx->prikey != NULL ) {
++ blockSize = PK11_SignatureLen( ctx->prikey ) ;
++ } else {
++ blockSize = -1 ;
++ }
++
++ if( blockSize < 0 ) {
++ xmlSecError( XMLSEC_ERRORS_HERE ,
++ NULL ,
++ NULL ,
++ XMLSEC_ERRORS_R_CRYPTO_FAILED ,
++ XMLSEC_ERRORS_NO_MESSAGE ) ;
++ return(-1);
++ }
++
++ ctx->material = xmlSecBufferCreate( blockSize ) ;
++ if( ctx->material == NULL ) {
++ xmlSecError( XMLSEC_ERRORS_HERE ,
++ NULL ,
++ "xmlSecBufferCreate" ,
++ XMLSEC_ERRORS_R_CRYPTO_FAILED ,
++ XMLSEC_ERRORS_NO_MESSAGE ) ;
++ return(-1);
++ }
++
++ /* read raw key material into context */
++ if( xmlSecBufferSetData( ctx->material, xmlSecBufferGetData(in), xmlSecBufferGetSize(in) ) < 0 ) {
++ xmlSecError( XMLSEC_ERRORS_HERE ,
++ NULL ,
++ "xmlSecBufferSetData" ,
++ XMLSEC_ERRORS_R_CRYPTO_FAILED ,
++ XMLSEC_ERRORS_NO_MESSAGE ) ;
++ return(-1);
++ }
++
++ if( xmlSecBufferRemoveHead( in , xmlSecBufferGetSize(in) ) < 0 ) {
++ xmlSecError( XMLSEC_ERRORS_HERE ,
++ NULL ,
++ "xmlSecBufferRemoveHead" ,
++ XMLSEC_ERRORS_R_CRYPTO_FAILED ,
++ XMLSEC_ERRORS_NO_MESSAGE ) ;
++ return(-1);
++ }
++
++ return(0);
++}
++
++/**
++ * key wrap transform update
++ */
++static int
++xmlSecNssKeyTransportCtxUpdate(
++ xmlSecNssKeyTransportCtxPtr ctx ,
++ xmlSecBufferPtr in ,
++ xmlSecBufferPtr out ,
++ int encrypt ,
++ xmlSecTransformCtxPtr transformCtx
++) {
++ xmlSecAssert2( ctx != NULL , -1 ) ;
++ xmlSecAssert2( ctx->cipher != CKM_INVALID_MECHANISM , -1 ) ;
++ xmlSecAssert2( ( ctx->pubkey != NULL && encrypt ) || ( ctx->prikey != NULL && !encrypt ), -1 ) ;
++ xmlSecAssert2( ctx->keyId != NULL , -1 ) ;
++ xmlSecAssert2( ctx->material != NULL , -1 ) ;
++ xmlSecAssert2( in != NULL , -1 ) ;
++ xmlSecAssert2( out != NULL , -1 ) ;
++ xmlSecAssert2( transformCtx != NULL , -1 ) ;
++
++ /* read raw key material and append into context */
++ if( xmlSecBufferAppend( ctx->material, xmlSecBufferGetData(in), xmlSecBufferGetSize(in) ) < 0 ) {
++ xmlSecError( XMLSEC_ERRORS_HERE ,
++ NULL ,
++ "xmlSecBufferAppend" ,
++ XMLSEC_ERRORS_R_CRYPTO_FAILED ,
++ XMLSEC_ERRORS_NO_MESSAGE ) ;
++ return(-1);
++ }
++
++ if( xmlSecBufferRemoveHead( in , xmlSecBufferGetSize(in) ) < 0 ) {
++ xmlSecError( XMLSEC_ERRORS_HERE ,
++ NULL ,
++ "xmlSecBufferRemoveHead" ,
++ XMLSEC_ERRORS_R_CRYPTO_FAILED ,
++ XMLSEC_ERRORS_NO_MESSAGE ) ;
++ return(-1);
++ }
++
++ return(0);
++}
++
++/**
++ * Block cipher transform final
++ */
++static int
++xmlSecNssKeyTransportCtxFinal(
++ xmlSecNssKeyTransportCtxPtr ctx ,
++ xmlSecBufferPtr in ,
++ xmlSecBufferPtr out ,
++ int encrypt ,
++ xmlSecTransformCtxPtr transformCtx
++) {
++ SECKEYPublicKey* targetKey ;
++ PK11SymKey* symKey ;
++ PK11SlotInfo* slot ;
++ SECItem oriskv ;
++ xmlSecSize blockSize ;
++ xmlSecBufferPtr result ;
++
++ xmlSecAssert2( ctx != NULL , -1 ) ;
++ xmlSecAssert2( ctx->cipher != CKM_INVALID_MECHANISM , -1 ) ;
++ xmlSecAssert2( ( ctx->pubkey != NULL && encrypt ) || ( ctx->prikey != NULL && !encrypt ), -1 ) ;
++ xmlSecAssert2( ctx->keyId != NULL , -1 ) ;
++ xmlSecAssert2( ctx->material != NULL , -1 ) ;
++ xmlSecAssert2( in != NULL , -1 ) ;
++ xmlSecAssert2( out != NULL , -1 ) ;
++ xmlSecAssert2( transformCtx != NULL , -1 ) ;
++
++ /* read raw key material and append into context */
++ if( xmlSecBufferAppend( ctx->material, xmlSecBufferGetData(in), xmlSecBufferGetSize(in) ) < 0 ) {
++ xmlSecError( XMLSEC_ERRORS_HERE ,
++ NULL ,
++ "xmlSecBufferAppend" ,
++ XMLSEC_ERRORS_R_CRYPTO_FAILED ,
++ XMLSEC_ERRORS_NO_MESSAGE ) ;
++ return(-1);
++ }
++
++ if( xmlSecBufferRemoveHead( in , xmlSecBufferGetSize(in) ) < 0 ) {
++ xmlSecError( XMLSEC_ERRORS_HERE ,
++ NULL ,
++ "xmlSecBufferRemoveHead" ,
++ XMLSEC_ERRORS_R_CRYPTO_FAILED ,
++ XMLSEC_ERRORS_NO_MESSAGE ) ;
++ return(-1);
++ }
++
++ /* Now we get all of the key materail */
++ /* from now on we will wrap or unwrap the key */
++ if( ctx->pubkey != NULL ) {
++ blockSize = SECKEY_PublicKeyStrength( ctx->pubkey ) ;
++ } else if( ctx->prikey != NULL ) {
++ blockSize = PK11_SignatureLen( ctx->prikey ) ;
++ } else {
++ blockSize = -1 ;
++ }
++
++ if( blockSize < 0 ) {
++ xmlSecError( XMLSEC_ERRORS_HERE ,
++ NULL ,
++ "PK11_GetBlockSize" ,
++ XMLSEC_ERRORS_R_CRYPTO_FAILED ,
++ XMLSEC_ERRORS_NO_MESSAGE ) ;
++ return(-1);
++ }
++
++ result = xmlSecBufferCreate( blockSize * 2 ) ;
++ if( result == NULL ) {
++ xmlSecError( XMLSEC_ERRORS_HERE ,
++ NULL ,
++ "xmlSecBufferCreate" ,
++ XMLSEC_ERRORS_R_CRYPTO_FAILED ,
++ XMLSEC_ERRORS_NO_MESSAGE ) ;
++ return(-1);
++ }
++
++ oriskv.type = siBuffer ;
++ oriskv.data = xmlSecBufferGetData( ctx->material ) ;
++ oriskv.len = xmlSecBufferGetSize( ctx->material ) ;
++
++ if( encrypt != 0 ) {
++ CK_OBJECT_HANDLE id ;
++ SECItem wrpskv ;
++
++ /* Create template symmetric key from material */
++ if( ( slot = ctx->pubkey->pkcs11Slot ) == NULL ) {
++ slot = xmlSecNssSlotGet( ctx->cipher ) ;
++ if( slot == NULL ) {
++ xmlSecError( XMLSEC_ERRORS_HERE ,
++ NULL ,
++ "xmlSecNssSlotGet" ,
++ XMLSEC_ERRORS_R_CRYPTO_FAILED ,
++ XMLSEC_ERRORS_NO_MESSAGE ) ;
++ xmlSecBufferDestroy(result);
++ return(-1);
++ }
++
++ id = PK11_ImportPublicKey( slot, ctx->pubkey, PR_FALSE ) ;
++ if( id == CK_INVALID_HANDLE ) {
++ xmlSecError( XMLSEC_ERRORS_HERE ,
++ NULL ,
++ "PK11_ImportPublicKey" ,
++ XMLSEC_ERRORS_R_CRYPTO_FAILED ,
++ XMLSEC_ERRORS_NO_MESSAGE ) ;
++ xmlSecBufferDestroy(result);
++ PK11_FreeSlot( slot ) ;
++ return(-1);
++ }
++ }
++
++ /* pay attention to mechanism */
++ symKey = PK11_ImportSymKey( slot, ctx->cipher, PK11_OriginUnwrap, CKA_WRAP, &oriskv, NULL ) ;
++ if( symKey == NULL ) {
++ xmlSecError( XMLSEC_ERRORS_HERE ,
++ NULL ,
++ "PK11_ImportSymKey" ,
++ XMLSEC_ERRORS_R_CRYPTO_FAILED ,
++ XMLSEC_ERRORS_NO_MESSAGE ) ;
++ xmlSecBufferDestroy(result);
++ PK11_FreeSlot( slot ) ;
++ return(-1);
++ }
++
++ wrpskv.type = siBuffer ;
++ wrpskv.data = xmlSecBufferGetData( result ) ;
++ wrpskv.len = xmlSecBufferGetMaxSize( result ) ;
++
++ if( PK11_PubWrapSymKey( ctx->cipher, ctx->pubkey, symKey, &wrpskv ) != SECSuccess ) {
++ xmlSecError( XMLSEC_ERRORS_HERE ,
++ NULL ,
++ "PK11_PubWrapSymKey" ,
++ XMLSEC_ERRORS_R_CRYPTO_FAILED ,
++ XMLSEC_ERRORS_NO_MESSAGE ) ;
++ PK11_FreeSymKey( symKey ) ;
++ xmlSecBufferDestroy(result);
++ PK11_FreeSlot( slot ) ;
++ return(-1);
++ }
++
++ if( xmlSecBufferSetSize( result , wrpskv.len ) < 0 ) {
++ xmlSecError( XMLSEC_ERRORS_HERE ,
++ NULL ,
++ "xmlSecBufferSetSize" ,
++ XMLSEC_ERRORS_R_CRYPTO_FAILED ,
++ XMLSEC_ERRORS_NO_MESSAGE ) ;
++ PK11_FreeSymKey( symKey ) ;
++ xmlSecBufferDestroy(result);
++ PK11_FreeSlot( slot ) ;
++ return(-1);
++ }
++ PK11_FreeSymKey( symKey ) ;
++ PK11_FreeSlot( slot ) ;
++ } else {
++ SECItem* keyItem ;
++ CK_OBJECT_HANDLE id1 ;
++
++ /* pay attention to mechanism */
++ if( ( symKey = PK11_PubUnwrapSymKey( ctx->prikey, &oriskv, ctx->cipher, CKA_UNWRAP, 0 ) ) == NULL ) {
++ xmlSecError( XMLSEC_ERRORS_HERE ,
++ NULL ,
++ "PK11_PubUnwrapSymKey" ,
++ XMLSEC_ERRORS_R_CRYPTO_FAILED ,
++ XMLSEC_ERRORS_NO_MESSAGE ) ;
++ xmlSecBufferDestroy(result);
++ return(-1);
++ }
++
++ /* Extract raw data from symmetric key */
++ if( PK11_ExtractKeyValue( symKey ) != SECSuccess ) {
++ xmlSecError( XMLSEC_ERRORS_HERE ,
++ NULL ,
++ "PK11_ExtractKeyValue" ,
++ XMLSEC_ERRORS_R_CRYPTO_FAILED ,
++ XMLSEC_ERRORS_NO_MESSAGE ) ;
++ PK11_FreeSymKey( symKey ) ;
++ xmlSecBufferDestroy(result);
++ return(-1);
++ }
++
++ if( ( keyItem = PK11_GetKeyData( symKey ) ) == NULL ) {
++ xmlSecError( XMLSEC_ERRORS_HERE ,
++ NULL ,
++ "PK11_GetKeyData" ,
++ XMLSEC_ERRORS_R_CRYPTO_FAILED ,
++ XMLSEC_ERRORS_NO_MESSAGE ) ;
++ PK11_FreeSymKey( symKey ) ;
++ xmlSecBufferDestroy(result);
++ return(-1);
++ }
++
++ if( xmlSecBufferSetData( result, keyItem->data, keyItem->len ) < 0 ) {
++ xmlSecError( XMLSEC_ERRORS_HERE ,
++ NULL ,
++ "PK11_PubUnwrapSymKey" ,
++ XMLSEC_ERRORS_R_CRYPTO_FAILED ,
++ XMLSEC_ERRORS_NO_MESSAGE ) ;
++ PK11_FreeSymKey( symKey ) ;
++ xmlSecBufferDestroy(result);
++ return(-1);
++ }
++ PK11_FreeSymKey( symKey ) ;
++ }
++
++ /* Write output */
++ if( xmlSecBufferAppend( out, xmlSecBufferGetData(result), xmlSecBufferGetSize(result) ) < 0 ) {
++ xmlSecError( XMLSEC_ERRORS_HERE ,
++ NULL ,
++ "xmlSecBufferAppend" ,
++ XMLSEC_ERRORS_R_CRYPTO_FAILED ,
++ XMLSEC_ERRORS_NO_MESSAGE ) ;
++ xmlSecBufferDestroy(result);
++ return(-1);
++ }
++ xmlSecBufferDestroy(result);
++
++ return(0);
++}
++
++static int
++xmlSecNssKeyTransportExecute(xmlSecTransformPtr transform, int last, xmlSecTransformCtxPtr transformCtx) {
++ xmlSecNssKeyTransportCtxPtr context = NULL ;
++ xmlSecBufferPtr inBuf, outBuf ;
++ int operation ;
++ int rtv ;
++
++ xmlSecAssert2( xmlSecNssKeyTransportCheckId( transform ), -1 ) ;
++ xmlSecAssert2( xmlSecTransformCheckSize( transform, xmlSecNssKeyTransportSize ), -1 ) ;
++ xmlSecAssert2( ( transform->operation == xmlSecTransformOperationEncrypt ) || ( transform->operation == xmlSecTransformOperationDecrypt ), -1 ) ;
++ xmlSecAssert2( transformCtx != NULL , -1 ) ;
++
++ context = xmlSecNssKeyTransportGetCtx( transform ) ;
++ if( context == NULL ) {
++ xmlSecError( XMLSEC_ERRORS_HERE ,
++ xmlSecErrorsSafeString( xmlSecTransformGetName( transform ) ) ,
++ "xmlSecNssKeyTransportGetCtx" ,
++ XMLSEC_ERRORS_R_CRYPTO_FAILED ,
++ XMLSEC_ERRORS_NO_MESSAGE ) ;
++ return(-1);
++ }
++
++ inBuf = &( transform->inBuf ) ;
++ outBuf = &( transform->outBuf ) ;
++
++ if( transform->status == xmlSecTransformStatusNone ) {
++ transform->status = xmlSecTransformStatusWorking ;
++ }
++
++ operation = ( transform->operation == xmlSecTransformOperationEncrypt ) ? 1 : 0 ;
++ if( transform->status == xmlSecTransformStatusWorking ) {
++ if( context->material == NULL ) {
++ rtv = xmlSecNssKeyTransportCtxInit( context, inBuf , outBuf , operation , transformCtx ) ;
++ if( rtv < 0 ) {
++ xmlSecError( XMLSEC_ERRORS_HERE ,
++ xmlSecErrorsSafeString( xmlSecTransformGetName( transform ) ) ,
++ "xmlSecNssKeyTransportCtxInit" ,
++ XMLSEC_ERRORS_R_INVALID_STATUS ,
++ XMLSEC_ERRORS_NO_MESSAGE ) ;
++ return(-1);
++ }
++ }
++
++ if( context->material == NULL && last != 0 ) {
++ xmlSecError( XMLSEC_ERRORS_HERE ,
++ xmlSecErrorsSafeString( xmlSecTransformGetName( transform ) ) ,
++ NULL ,
++ XMLSEC_ERRORS_R_INVALID_STATUS ,
++ "No enough data to intialize transform" ) ;
++ return(-1);
++ }
++
++ if( context->material != NULL ) {
++ rtv = xmlSecNssKeyTransportCtxUpdate( context, inBuf , outBuf , operation , transformCtx ) ;
++ if( rtv < 0 ) {
++ xmlSecError( XMLSEC_ERRORS_HERE ,
++ xmlSecErrorsSafeString( xmlSecTransformGetName( transform ) ) ,
++ "xmlSecNssKeyTransportCtxUpdate" ,
++ XMLSEC_ERRORS_R_INVALID_STATUS ,
++ XMLSEC_ERRORS_NO_MESSAGE ) ;
++ return(-1);
++ }
++ }
++
++ if( last ) {
++ rtv = xmlSecNssKeyTransportCtxFinal( context, inBuf , outBuf , operation , transformCtx ) ;
++ if( rtv < 0 ) {
++ xmlSecError( XMLSEC_ERRORS_HERE ,
++ xmlSecErrorsSafeString( xmlSecTransformGetName( transform ) ) ,
++ "xmlSecNssKeyTransportCtxFinal" ,
++ XMLSEC_ERRORS_R_INVALID_STATUS ,
++ XMLSEC_ERRORS_NO_MESSAGE ) ;
++ return(-1);
++ }
++ transform->status = xmlSecTransformStatusFinished ;
++ }
++ } else if( transform->status == xmlSecTransformStatusFinished ) {
++ if( xmlSecBufferGetSize( inBuf ) != 0 ) {
++ xmlSecError( XMLSEC_ERRORS_HERE ,
++ xmlSecErrorsSafeString( xmlSecTransformGetName( transform ) ) ,
++ NULL ,
++ XMLSEC_ERRORS_R_INVALID_STATUS ,
++ "status=%d", transform->status ) ;
++ return(-1);
++ }
++ } else {
++ xmlSecError( XMLSEC_ERRORS_HERE ,
++ xmlSecErrorsSafeString( xmlSecTransformGetName( transform ) ) ,
++ NULL ,
++ XMLSEC_ERRORS_R_INVALID_STATUS ,
++ "status=%d", transform->status ) ;
++ return(-1);
++ }
++
++ return(0);
++}
++
++
++#ifndef XMLSEC_NO_RSA
++
++#ifdef __MINGW32__ // for runtime-pseudo-reloc
++static struct _xmlSecTransformKlass xmlSecNssRsaPkcs1Klass = {
++#else
++static xmlSecTransformKlass xmlSecNssRsaPkcs1Klass = {
++#endif
++ /* klass/object sizes */
++ sizeof(xmlSecTransformKlass), /* xmlSecSize klassSize */
++ xmlSecNssKeyTransportSize, /* xmlSecSize objSize */
++
++ xmlSecNameRsaPkcs1, /* const xmlChar* name; */
++ xmlSecHrefRsaPkcs1, /* const xmlChar* href; */
++ xmlSecTransformUsageEncryptionMethod, /* xmlSecAlgorithmUsage usage; */
++
++ xmlSecNssKeyTransportInitialize, /* xmlSecTransformInitializeMethod initialize; */
++ xmlSecNssKeyTransportFinalize, /* xmlSecTransformFinalizeMethod finalize; */
++ NULL, /* xmlSecTransformNodeReadMethod readNode; */
++ NULL, /* xmlSecTransformNodeWriteMethod writeNode; */
++ xmlSecNssKeyTransportSetKeyReq, /* xmlSecTransformSetKeyMethod setKeyReq; */
++ xmlSecNssKeyTransportSetKey, /* xmlSecTransformSetKeyMethod setKey; */
++ NULL, /* xmlSecTransformValidateMethod validate; */
++ xmlSecTransformDefaultGetDataType, /* xmlSecTransformGetDataTypeMethod getDataType; */
++ xmlSecTransformDefaultPushBin, /* xmlSecTransformPushBinMethod pushBin; */
++ xmlSecTransformDefaultPopBin, /* xmlSecTransformPopBinMethod popBin; */
++ NULL, /* xmlSecTransformPushXmlMethod pushXml; */
++ NULL, /* xmlSecTransformPopXmlMethod popXml; */
++ xmlSecNssKeyTransportExecute, /* xmlSecTransformExecuteMethod execute; */
++
++ NULL, /* void* reserved0; */
++ NULL, /* void* reserved1; */
++};
++
++#ifdef __MINGW32__ // for runtime-pseudo-reloc
++static struct _xmlSecTransformKlass xmlSecNssRsaOaepKlass = {
++#else
++static xmlSecTransformKlass xmlSecNssRsaOaepKlass = {
++#endif
++ /* klass/object sizes */
++ sizeof(xmlSecTransformKlass), /* xmlSecSize klassSize */
++ xmlSecNssKeyTransportSize, /* xmlSecSize objSize */
++
++ xmlSecNameRsaOaep, /* const xmlChar* name; */
++ xmlSecHrefRsaOaep, /* const xmlChar* href; */
++ xmlSecTransformUsageEncryptionMethod, /* xmlSecAlgorithmUsage usage; */
++
++ xmlSecNssKeyTransportInitialize, /* xmlSecTransformInitializeMethod initialize; */
++ xmlSecNssKeyTransportFinalize, /* xmlSecTransformFinalizeMethod finalize; */
++ NULL, /* xmlSecTransformNodeReadMethod readNode; */
++ NULL, /* xmlSecTransformNodeWriteMethod writeNode; */
++ xmlSecNssKeyTransportSetKeyReq, /* xmlSecTransformSetKeyMethod setKeyReq; */
++ xmlSecNssKeyTransportSetKey, /* xmlSecTransformSetKeyMethod setKey; */
++ NULL, /* xmlSecTransformValidateMethod validate; */
++ xmlSecTransformDefaultGetDataType, /* xmlSecTransformGetDataTypeMethod getDataType; */
++ xmlSecTransformDefaultPushBin, /* xmlSecTransformPushBinMethod pushBin; */
++ xmlSecTransformDefaultPopBin, /* xmlSecTransformPopBinMethod popBin; */
++ NULL, /* xmlSecTransformPushXmlMethod pushXml; */
++ NULL, /* xmlSecTransformPopXmlMethod popXml; */
++ xmlSecNssKeyTransportExecute, /* xmlSecTransformExecuteMethod execute; */
++
++ NULL, /* void* reserved0; */
++ NULL, /* void* reserved1; */
++};
++
++/**
++ * xmlSecNssTransformRsaPkcs1GetKlass:
++ *
++ * The RSA-PKCS1 key transport transform klass.
++ *
++ * Returns RSA-PKCS1 key transport transform klass.
++ */
++xmlSecTransformId
++xmlSecNssTransformRsaPkcs1GetKlass(void) {
++ return(&xmlSecNssRsaPkcs1Klass);
++}
++
++/**
++ * xmlSecNssTransformRsaOaepGetKlass:
++ *
++ * The RSA-PKCS1 key transport transform klass.
++ *
++ * Returns RSA-PKCS1 key transport transform klass.
++ */
++xmlSecTransformId
++xmlSecNssTransformRsaOaepGetKlass(void) {
++ return(&xmlSecNssRsaOaepKlass);
++}
++
++#endif /* XMLSEC_NO_RSA */
++
+--- misc/xmlsec1-1.2.6/src/nss/keywrapers.c 2008-06-29 23:44:40.000000000 +0200
++++ misc/build/xmlsec1-1.2.6/src/nss/keywrapers.c 2008-06-29 23:44:19.000000000 +0200
+@@ -1 +1,1213 @@
+-dummy
++/**
++ *
++ * XMLSec library
++ *
++ * AES Algorithm support
++ *
++ * This is free software; see Copyright file in the source
++ * distribution for preciese wording.
++ *
++ * Copyright .................................
++ */
++#include "globals.h"
++
++#include <stdlib.h>
++#include <stdio.h>
++#include <string.h>
++
++#include <nss.h>
++#include <pk11func.h>
++#include <hasht.h>
++
++#include <xmlsec/xmlsec.h>
++#include <xmlsec/xmltree.h>
++#include <xmlsec/keys.h>
++#include <xmlsec/transforms.h>
++#include <xmlsec/errors.h>
++
++#include <xmlsec/nss/crypto.h>
++#include <xmlsec/nss/ciphers.h>
++
++#define XMLSEC_NSS_AES128_KEY_SIZE 16
++#define XMLSEC_NSS_AES192_KEY_SIZE 24
++#define XMLSEC_NSS_AES256_KEY_SIZE 32
++#define XMLSEC_NSS_DES3_KEY_SIZE 24
++#define XMLSEC_NSS_DES3_KEY_LENGTH 24
++#define XMLSEC_NSS_DES3_IV_LENGTH 8
++#define XMLSEC_NSS_DES3_BLOCK_LENGTH 8
++
++static xmlSecByte xmlSecNssKWDes3Iv[XMLSEC_NSS_DES3_IV_LENGTH] = {
++ 0x4a, 0xdd, 0xa2, 0x2c, 0x79, 0xe8, 0x21, 0x05
++};
++
++/*********************************************************************
++ *
++ * key wrap transforms
++ *
++ ********************************************************************/
++typedef struct _xmlSecNssKeyWrapCtx xmlSecNssKeyWrapCtx ;
++typedef struct _xmlSecNssKeyWrapCtx* xmlSecNssKeyWrapCtxPtr ;
++
++#define xmlSecNssKeyWrapSize \
++ ( sizeof( xmlSecTransform ) + sizeof( xmlSecNssKeyWrapCtx ) )
++
++#define xmlSecNssKeyWrapGetCtx( transform ) \
++ ( ( xmlSecNssKeyWrapCtxPtr )( ( ( xmlSecByte* )( transform ) ) + sizeof( xmlSecTransform ) ) )
++
++struct _xmlSecNssKeyWrapCtx {
++ CK_MECHANISM_TYPE cipher ;
++ PK11SymKey* symkey ;
++ xmlSecKeyDataId keyId ;
++ xmlSecBufferPtr material ; /* to be encrypted/decrypted key material */
++} ;
++
++static int xmlSecNssKeyWrapInitialize(xmlSecTransformPtr transform);
++static void xmlSecNssKeyWrapFinalize(xmlSecTransformPtr transform);
++static int xmlSecNssKeyWrapSetKeyReq(xmlSecTransformPtr transform,
++ xmlSecKeyReqPtr keyReq);
++static int xmlSecNssKeyWrapSetKey(xmlSecTransformPtr transform,
++ xmlSecKeyPtr key);
++static int xmlSecNssKeyWrapExecute(xmlSecTransformPtr transform,
++ int last,
++ xmlSecTransformCtxPtr transformCtx);
++static xmlSecSize xmlSecNssKeyWrapGetKeySize(xmlSecTransformPtr transform);
++
++static int
++xmlSecNssKeyWrapCheckId(
++ xmlSecTransformPtr transform
++) {
++ #ifndef XMLSEC_NO_DES
++ if( xmlSecTransformCheckId( transform, xmlSecNssTransformKWDes3Id ) ) {
++ return(1);
++ }
++ #endif /* XMLSEC_NO_DES */
++
++ #ifndef XMLSEC_NO_AES
++ if( xmlSecTransformCheckId( transform, xmlSecNssTransformKWAes128Id ) ||
++ xmlSecTransformCheckId( transform, xmlSecNssTransformKWAes192Id ) ||
++ xmlSecTransformCheckId( transform, xmlSecNssTransformKWAes256Id ) ) {
++
++ return(1);
++ }
++ #endif /* XMLSEC_NO_AES */
++
++ return(0);
++}
++
++static xmlSecSize
++xmlSecNssKeyWrapGetKeySize(xmlSecTransformPtr transform) {
++#ifndef XMLSEC_NO_DES
++ if( xmlSecTransformCheckId( transform, xmlSecNssTransformKWDes3Id ) ) {
++ return(XMLSEC_NSS_DES3_KEY_SIZE);
++ } else
++#endif /* XMLSEC_NO_DES */
++
++#ifndef XMLSEC_NO_AES
++ if(xmlSecTransformCheckId(transform, xmlSecNssTransformKWAes128Id)) {
++ return(XMLSEC_NSS_AES128_KEY_SIZE);
++ } else if(xmlSecTransformCheckId(transform, xmlSecNssTransformKWAes192Id)) {
++ return(XMLSEC_NSS_AES192_KEY_SIZE);
++ } else if(xmlSecTransformCheckId(transform, xmlSecNssTransformKWAes256Id)) {
++ return(XMLSEC_NSS_AES256_KEY_SIZE);
++ } else if(xmlSecTransformCheckId(transform, xmlSecNssTransformKWAes256Id)) {
++ return(XMLSEC_NSS_AES256_KEY_SIZE);
++ } else
++#endif /* XMLSEC_NO_AES */
++
++ if(1)
++ return(0);
++}
++
++
++static int
++xmlSecNssKeyWrapInitialize(xmlSecTransformPtr transform) {
++ xmlSecNssKeyWrapCtxPtr context ;
++ int ret;
++
++ xmlSecAssert2(xmlSecNssKeyWrapCheckId(transform), -1);
++ xmlSecAssert2(xmlSecTransformCheckSize(transform, xmlSecNssKeyWrapSize), -1);
++
++ context = xmlSecNssKeyWrapGetCtx( transform ) ;
++ xmlSecAssert2( context != NULL , -1 ) ;
++
++ #ifndef XMLSEC_NO_DES
++ if( transform->id == xmlSecNssTransformKWDes3Id ) {
++ context->cipher = CKM_DES3_CBC ;
++ context->keyId = xmlSecNssKeyDataDesId ;
++ } else
++ #endif /* XMLSEC_NO_DES */
++
++ #ifndef XMLSEC_NO_AES
++ if( transform->id == xmlSecNssTransformKWAes128Id ) {
++ /* context->cipher = CKM_NETSCAPE_AES_KEY_WRAP ;*/
++ context->cipher = CKM_AES_CBC ;
++ context->keyId = xmlSecNssKeyDataAesId ;
++ } else
++ if( transform->id == xmlSecNssTransformKWAes192Id ) {
++ /* context->cipher = CKM_NETSCAPE_AES_KEY_WRAP ;*/
++ context->cipher = CKM_AES_CBC ;
++ context->keyId = xmlSecNssKeyDataAesId ;
++ } else
++ if( transform->id == xmlSecNssTransformKWAes256Id ) {
++ /* context->cipher = CKM_NETSCAPE_AES_KEY_WRAP ;*/
++ context->cipher = CKM_AES_CBC ;
++ context->keyId = xmlSecNssKeyDataAesId ;
++ } else
++ #endif /* XMLSEC_NO_AES */
++
++
++ if( 1 ) {
++ xmlSecError( XMLSEC_ERRORS_HERE ,
++ xmlSecErrorsSafeString(xmlSecTransformGetName(transform)),
++ NULL ,
++ XMLSEC_ERRORS_R_CRYPTO_FAILED ,
++ XMLSEC_ERRORS_NO_MESSAGE ) ;
++ return(-1);
++ }
++
++ context->symkey = NULL ;
++ context->material = NULL ;
++
++ return(0);
++}
++
++static void
++xmlSecNssKeyWrapFinalize(xmlSecTransformPtr transform) {
++ xmlSecNssKeyWrapCtxPtr context ;
++
++ xmlSecAssert(xmlSecNssKeyWrapCheckId(transform));
++ xmlSecAssert(xmlSecTransformCheckSize(transform, xmlSecNssKeyWrapSize));
++
++ context = xmlSecNssKeyWrapGetCtx( transform ) ;
++ xmlSecAssert( context != NULL ) ;
++
++ if( context->symkey != NULL ) {
++ PK11_FreeSymKey( context->symkey ) ;
++ context->symkey = NULL ;
++ }
++
++ if( context->material != NULL ) {
++ xmlSecBufferDestroy(context->material);
++ context->material = NULL ;
++ }
++}
++
++static int
++xmlSecNssKeyWrapSetKeyReq(xmlSecTransformPtr transform, xmlSecKeyReqPtr keyReq) {
++ xmlSecNssKeyWrapCtxPtr context ;
++ xmlSecSize cipherSize = 0 ;
++
++
++ xmlSecAssert2(xmlSecNssKeyWrapCheckId(transform), -1);
++ xmlSecAssert2(xmlSecTransformCheckSize(transform, xmlSecNssKeyWrapSize), -1);
++ xmlSecAssert2((transform->operation == xmlSecTransformOperationEncrypt) || (transform->operation == xmlSecTransformOperationDecrypt), -1);
++ xmlSecAssert2(keyReq != NULL, -1);
++
++ context = xmlSecNssKeyWrapGetCtx( transform ) ;
++ xmlSecAssert2( context != NULL , -1 ) ;
++
++ keyReq->keyId = context->keyId;
++ keyReq->keyType = xmlSecKeyDataTypeSymmetric;
++ if(transform->operation == xmlSecTransformOperationEncrypt) {
++ keyReq->keyUsage = xmlSecKeyUsageEncrypt;
++ } else {
++ keyReq->keyUsage = xmlSecKeyUsageDecrypt;
++ }
++
++ keyReq->keyBitsSize = xmlSecNssKeyWrapGetKeySize( transform ) ;
++
++ return(0);
++}
++
++static int
++xmlSecNssKeyWrapSetKey(xmlSecTransformPtr transform, xmlSecKeyPtr key) {
++ xmlSecNssKeyWrapCtxPtr context = NULL ;
++ xmlSecKeyDataPtr keyData = NULL ;
++ PK11SymKey* symkey = NULL ;
++
++ xmlSecAssert2(xmlSecNssKeyWrapCheckId(transform), -1);
++ xmlSecAssert2(xmlSecTransformCheckSize(transform, xmlSecNssKeyWrapSize), -1);
++ xmlSecAssert2((transform->operation == xmlSecTransformOperationEncrypt) || (transform->operation == xmlSecTransformOperationDecrypt), -1);
++ xmlSecAssert2(key != NULL, -1);
++
++ context = xmlSecNssKeyWrapGetCtx( transform ) ;
++ if( context == NULL || context->keyId == NULL || context->symkey != NULL ) {
++ xmlSecError( XMLSEC_ERRORS_HERE ,
++ xmlSecErrorsSafeString( xmlSecTransformGetName( transform ) ) ,
++ "xmlSecNssKeyWrapGetCtx" ,
++ XMLSEC_ERRORS_R_CRYPTO_FAILED ,
++ XMLSEC_ERRORS_NO_MESSAGE ) ;
++ return(-1);
++ }
++ xmlSecAssert2( xmlSecKeyCheckId( key, context->keyId ), -1 ) ;
++
++ keyData = xmlSecKeyGetValue( key ) ;
++ if( keyData == NULL ) {
++ xmlSecError( XMLSEC_ERRORS_HERE ,
++ xmlSecErrorsSafeString( xmlSecKeyGetName( key ) ) ,
++ "xmlSecKeyGetValue" ,
++ XMLSEC_ERRORS_R_CRYPTO_FAILED ,
++ XMLSEC_ERRORS_NO_MESSAGE ) ;
++ return(-1);
++ }
++
++ if( ( symkey = xmlSecNssSymKeyDataGetKey( keyData ) ) == NULL ) {
++ xmlSecError( XMLSEC_ERRORS_HERE ,
++ xmlSecErrorsSafeString( xmlSecKeyDataGetName( keyData ) ) ,
++ "xmlSecNssSymKeyDataGetKey" ,
++ XMLSEC_ERRORS_R_CRYPTO_FAILED ,
++ XMLSEC_ERRORS_NO_MESSAGE ) ;
++ return(-1);
++ }
++
++ context->symkey = symkey ;
++
++ return(0) ;
++}
++
++/**
++ * key wrap transform
++ */
++static int
++xmlSecNssKeyWrapCtxInit(
++ xmlSecNssKeyWrapCtxPtr ctx ,
++ xmlSecBufferPtr in ,
++ xmlSecBufferPtr out ,
++ int encrypt ,
++ xmlSecTransformCtxPtr transformCtx
++) {
++ xmlSecSize blockSize ;
++
++ xmlSecAssert2( ctx != NULL , -1 ) ;
++ xmlSecAssert2( ctx->cipher != CKM_INVALID_MECHANISM , -1 ) ;
++ xmlSecAssert2( ctx->symkey != NULL , -1 ) ;
++ xmlSecAssert2( ctx->keyId != NULL , -1 ) ;
++ xmlSecAssert2( in != NULL , -1 ) ;
++ xmlSecAssert2( out != NULL , -1 ) ;
++ xmlSecAssert2( transformCtx != NULL , -1 ) ;
++
++ if( ctx->material != NULL ) {
++ xmlSecBufferDestroy( ctx->material ) ;
++ ctx->material = NULL ;
++ }
++
++ if( ( blockSize = PK11_GetBlockSize( ctx->cipher , NULL ) ) < 0 ) {
++ xmlSecError( XMLSEC_ERRORS_HERE ,
++ NULL ,
++ "PK11_GetBlockSize" ,
++ XMLSEC_ERRORS_R_CRYPTO_FAILED ,
++ XMLSEC_ERRORS_NO_MESSAGE ) ;
++ return(-1);
++ }
++
++ ctx->material = xmlSecBufferCreate( blockSize ) ;
++ if( ctx->material == NULL ) {
++ xmlSecError( XMLSEC_ERRORS_HERE ,
++ NULL ,
++ "xmlSecBufferCreate" ,
++ XMLSEC_ERRORS_R_CRYPTO_FAILED ,
++ XMLSEC_ERRORS_NO_MESSAGE ) ;
++ return(-1);
++ }
++
++ /* read raw key material into context */
++ if( xmlSecBufferSetData( ctx->material, xmlSecBufferGetData(in), xmlSecBufferGetSize(in) ) < 0 ) {
++ xmlSecError( XMLSEC_ERRORS_HERE ,
++ NULL ,
++ "xmlSecBufferSetData" ,
++ XMLSEC_ERRORS_R_CRYPTO_FAILED ,
++ XMLSEC_ERRORS_NO_MESSAGE ) ;
++ return(-1);
++ }
++
++ if( xmlSecBufferRemoveHead( in , xmlSecBufferGetSize(in) ) < 0 ) {
++ xmlSecError( XMLSEC_ERRORS_HERE ,
++ NULL ,
++ "xmlSecBufferRemoveHead" ,
++ XMLSEC_ERRORS_R_CRYPTO_FAILED ,
++ XMLSEC_ERRORS_NO_MESSAGE ) ;
++ return(-1);
++ }
++
++ return(0);
++}
++
++/**
++ * key wrap transform update
++ */
++static int
++xmlSecNssKeyWrapCtxUpdate(
++ xmlSecNssKeyWrapCtxPtr ctx ,
++ xmlSecBufferPtr in ,
++ xmlSecBufferPtr out ,
++ int encrypt ,
++ xmlSecTransformCtxPtr transformCtx
++) {
++ xmlSecAssert2( ctx != NULL , -1 ) ;
++ xmlSecAssert2( ctx->cipher != CKM_INVALID_MECHANISM , -1 ) ;
++ xmlSecAssert2( ctx->symkey != NULL , -1 ) ;
++ xmlSecAssert2( ctx->keyId != NULL , -1 ) ;
++ xmlSecAssert2( ctx->material != NULL , -1 ) ;
++ xmlSecAssert2( in != NULL , -1 ) ;
++ xmlSecAssert2( out != NULL , -1 ) ;
++ xmlSecAssert2( transformCtx != NULL , -1 ) ;
++
++ /* read raw key material and append into context */
++ if( xmlSecBufferAppend( ctx->material, xmlSecBufferGetData(in), xmlSecBufferGetSize(in) ) < 0 ) {
++ xmlSecError( XMLSEC_ERRORS_HERE ,
++ NULL ,
++ "xmlSecBufferAppend" ,
++ XMLSEC_ERRORS_R_CRYPTO_FAILED ,
++ XMLSEC_ERRORS_NO_MESSAGE ) ;
++ return(-1);
++ }
++
++ if( xmlSecBufferRemoveHead( in , xmlSecBufferGetSize(in) ) < 0 ) {
++ xmlSecError( XMLSEC_ERRORS_HERE ,
++ NULL ,
++ "xmlSecBufferRemoveHead" ,
++ XMLSEC_ERRORS_R_CRYPTO_FAILED ,
++ XMLSEC_ERRORS_NO_MESSAGE ) ;
++ return(-1);
++ }
++
++ return(0);
++}
++
++static int
++xmlSecNssKWDes3BufferReverse(xmlSecByte *buf, xmlSecSize size) {
++ xmlSecSize s;
++ xmlSecSize i;
++ xmlSecByte c;
++
++ xmlSecAssert2(buf != NULL, -1);
++
++ s = size / 2;
++ --size;
++ for(i = 0; i < s; ++i) {
++ c = buf[i];
++ buf[i] = buf[size - i];
++ buf[size - i] = c;
++ }
++ return(0);
++}
++
++static xmlSecByte *
++xmlSecNssComputeSHA1(const xmlSecByte *in, xmlSecSize inSize,
++ xmlSecByte *out, xmlSecSize outSize)
++{
++ PK11Context *context = NULL;
++ SECStatus s;
++ xmlSecByte *digest = NULL;
++ unsigned int len;
++
++ xmlSecAssert2(in != NULL, NULL);
++ xmlSecAssert2(out != NULL, NULL);
++ xmlSecAssert2(outSize >= SHA1_LENGTH, NULL);
++
++ /* Create a context for hashing (digesting) */
++ context = PK11_CreateDigestContext(SEC_OID_SHA1);
++ if (context == NULL) {
++ xmlSecError(XMLSEC_ERRORS_HERE,
++ NULL,
++ "PK11_CreateDigestContext",
++ XMLSEC_ERRORS_R_CRYPTO_FAILED,
++ "error code = %d", PORT_GetError());
++ goto done;
++ }
++
++ s = PK11_DigestBegin(context);
++ if (s != SECSuccess) {
++ xmlSecError(XMLSEC_ERRORS_HERE,
++ NULL,
++ "PK11_DigestBegin",
++ XMLSEC_ERRORS_R_CRYPTO_FAILED,
++ "error code = %d", PORT_GetError());
++ goto done;
++ }
++
++ s = PK11_DigestOp(context, in, inSize);
++ if (s != SECSuccess) {
++ xmlSecError(XMLSEC_ERRORS_HERE,
++ NULL,
++ "PK11_DigestOp",
++ XMLSEC_ERRORS_R_CRYPTO_FAILED,
++ "error code = %d", PORT_GetError());
++ goto done;
++ }
++
++ s = PK11_DigestFinal(context, out, &len, outSize);
++ if (s != SECSuccess) {
++ xmlSecError(XMLSEC_ERRORS_HERE,
++ NULL,
++ "PK11_DigestFinal",
++ XMLSEC_ERRORS_R_CRYPTO_FAILED,
++ "error code = %d", PORT_GetError());
++ goto done;
++ }
++ xmlSecAssert2(len == SHA1_LENGTH, NULL);
++
++ digest = out;
++
++done:
++ if (context != NULL) {
++ PK11_DestroyContext(context, PR_TRUE);
++ }
++ return (digest);
++}
++
++static int
++xmlSecNssKWDes3Encrypt(
++ PK11SymKey* symKey ,
++ CK_MECHANISM_TYPE cipherMech ,
++ const xmlSecByte* iv ,
++ xmlSecSize ivSize ,
++ const xmlSecByte* in ,
++ xmlSecSize inSize ,
++ xmlSecByte* out ,
++ xmlSecSize outSize ,
++ int enc
++) {
++ PK11Context* EncContext = NULL;
++ SECItem ivItem ;
++ SECItem* secParam = NULL ;
++ int tmp1_outlen;
++ unsigned int tmp2_outlen;
++ int result_len = -1;
++ SECStatus rv;
++
++ xmlSecAssert2( cipherMech != CKM_INVALID_MECHANISM , -1 ) ;
++ xmlSecAssert2( symKey != NULL , -1 ) ;
++ xmlSecAssert2(iv != NULL, -1);
++ xmlSecAssert2(ivSize == XMLSEC_NSS_DES3_IV_LENGTH, -1);
++ xmlSecAssert2(in != NULL, -1);
++ xmlSecAssert2(inSize > 0, -1);
++ xmlSecAssert2(out != NULL, -1);
++ xmlSecAssert2(outSize >= inSize, -1);
++
++ /* Prepare IV */
++ ivItem.data = ( unsigned char* )iv ;
++ ivItem.len = ivSize ;
++
++ secParam = PK11_ParamFromIV(cipherMech, &ivItem);
++ if (secParam == NULL) {
++ xmlSecError(XMLSEC_ERRORS_HERE,
++ NULL,
++ "PK11_ParamFromIV",
++ XMLSEC_ERRORS_R_CRYPTO_FAILED,
++ "Error code = %d", PORT_GetError());
++ goto done;
++ }
++
++ EncContext = PK11_CreateContextBySymKey(cipherMech,
++ enc ? CKA_ENCRYPT : CKA_DECRYPT,
++ symKey, secParam);
++ if (EncContext == NULL) {
++ xmlSecError(XMLSEC_ERRORS_HERE,
++ NULL,
++ "PK11_CreateContextBySymKey",
++ XMLSEC_ERRORS_R_CRYPTO_FAILED,
++ "Error code = %d", PORT_GetError());
++ goto done;
++ }
++
++ tmp1_outlen = tmp2_outlen = 0;
++ rv = PK11_CipherOp(EncContext, out, &tmp1_outlen, outSize,
++ (unsigned char *)in, inSize);
++ if (rv != SECSuccess) {
++ xmlSecError(XMLSEC_ERRORS_HERE,
++ NULL,
++ "PK11_CipherOp",
++ XMLSEC_ERRORS_R_CRYPTO_FAILED,
++ "Error code = %d", PORT_GetError());
++ goto done;
++ }
++
++ rv = PK11_DigestFinal(EncContext, out+tmp1_outlen,
++ &tmp2_outlen, outSize-tmp1_outlen);
++ if (rv != SECSuccess) {
++ xmlSecError(XMLSEC_ERRORS_HERE,
++ NULL,
++ "PK11_DigestFinal",
++ XMLSEC_ERRORS_R_CRYPTO_FAILED,
++ "Error code = %d", PORT_GetError());
++ goto done;
++ }
++
++ result_len = tmp1_outlen + tmp2_outlen;
++
++done:
++ if (secParam) {
++ SECITEM_FreeItem(secParam, PR_TRUE);
++ }
++ if (EncContext) {
++ PK11_DestroyContext(EncContext, PR_TRUE);
++ }
++
++ return(result_len);
++}
++
++static int
++xmlSecNssKeyWrapDesOp(
++ xmlSecNssKeyWrapCtxPtr ctx ,
++ int encrypt ,
++ xmlSecBufferPtr result
++) {
++ xmlSecByte sha1[SHA1_LENGTH];
++ xmlSecByte iv[XMLSEC_NSS_DES3_IV_LENGTH];
++ xmlSecByte* in;
++ xmlSecSize inSize;
++ xmlSecByte* out;
++ xmlSecSize outSize;
++ xmlSecSize s;
++ int ret;
++ SECStatus status;
++
++ xmlSecAssert2( ctx != NULL , -1 ) ;
++ xmlSecAssert2( ctx->cipher != CKM_INVALID_MECHANISM , -1 ) ;
++ xmlSecAssert2( ctx->symkey != NULL , -1 ) ;
++ xmlSecAssert2( ctx->keyId != NULL , -1 ) ;
++ xmlSecAssert2( ctx->material != NULL , -1 ) ;
++ xmlSecAssert2( result != NULL , -1 ) ;
++
++ in = xmlSecBufferGetData(ctx->material);
++ inSize = xmlSecBufferGetSize(ctx->material) ;
++ out = xmlSecBufferGetData(result);
++ outSize = xmlSecBufferGetMaxSize(result) ;
++ if( encrypt ) {
++ /* step 2: calculate sha1 and CMS */
++ if(xmlSecNssComputeSHA1(in, inSize, sha1, SHA1_LENGTH) == NULL) {
++ xmlSecError(XMLSEC_ERRORS_HERE,
++ NULL,
++ "xmlSecNssComputeSHA1",
++ XMLSEC_ERRORS_R_CRYPTO_FAILED,
++ XMLSEC_ERRORS_NO_MESSAGE);
++ return(-1);
++ }
++
++ /* step 3: construct WKCKS */
++ memcpy(out, in, inSize);
++ memcpy(out + inSize, sha1, XMLSEC_NSS_DES3_BLOCK_LENGTH);
++
++ /* step 4: generate random iv */
++ status = PK11_GenerateRandom(iv, XMLSEC_NSS_DES3_IV_LENGTH);
++ if(status != SECSuccess) {
++ xmlSecError(XMLSEC_ERRORS_HERE,
++ NULL,
++ "PK11_GenerateRandom",
++ XMLSEC_ERRORS_R_CRYPTO_FAILED,
++ "error code = %d", PORT_GetError());
++ return(-1);
++ }
++
++ /* step 5: first encryption, result is TEMP1 */
++ ret = xmlSecNssKWDes3Encrypt( ctx->symkey, ctx->cipher,
++ iv, XMLSEC_NSS_DES3_IV_LENGTH,
++ out, inSize + XMLSEC_NSS_DES3_IV_LENGTH,
++ out, outSize, 1);
++ if(ret < 0) {
++ xmlSecError(XMLSEC_ERRORS_HERE,
++ NULL,
++ "xmlSecNssKWDes3Encrypt",
++ XMLSEC_ERRORS_R_XMLSEC_FAILED,
++ XMLSEC_ERRORS_NO_MESSAGE);
++ return(-1);
++ }
++
++ /* step 6: construct TEMP2=IV || TEMP1 */
++ memmove(out + XMLSEC_NSS_DES3_IV_LENGTH, out,
++ inSize + XMLSEC_NSS_DES3_IV_LENGTH);
++ memcpy(out, iv, XMLSEC_NSS_DES3_IV_LENGTH);
++ s = ret + XMLSEC_NSS_DES3_IV_LENGTH;
++
++ /* step 7: reverse octets order, result is TEMP3 */
++ ret = xmlSecNssKWDes3BufferReverse(out, s);
++ if(ret < 0) {
++ xmlSecError(XMLSEC_ERRORS_HERE,
++ NULL,
++ "xmlSecNssKWDes3BufferReverse",
++ XMLSEC_ERRORS_R_XMLSEC_FAILED,
++ XMLSEC_ERRORS_NO_MESSAGE);
++ return(-1);
++ }
++
++ /* step 8: second encryption with static IV */
++ ret = xmlSecNssKWDes3Encrypt( ctx->symkey, ctx->cipher,
++ xmlSecNssKWDes3Iv, XMLSEC_NSS_DES3_IV_LENGTH,
++ out, s,
++ out, outSize, 1);
++ if(ret < 0) {
++ xmlSecError(XMLSEC_ERRORS_HERE,
++ NULL,
++ "xmlSecNssKWDes3Encrypt",
++ XMLSEC_ERRORS_R_XMLSEC_FAILED,
++ XMLSEC_ERRORS_NO_MESSAGE);
++ return(-1);
++ }
++ s = ret;
++
++ if( xmlSecBufferSetSize( result , s ) < 0 ) {
++ xmlSecError(XMLSEC_ERRORS_HERE,
++ NULL,
++ "xmlSecBufferSetSize",
++ XMLSEC_ERRORS_R_XMLSEC_FAILED,
++ XMLSEC_ERRORS_NO_MESSAGE);
++ return(-1);
++ }
++ } else {
++ /* step 2: first decryption with static IV, result is TEMP3 */
++ ret = xmlSecNssKWDes3Encrypt( ctx->symkey, ctx->cipher,
++ xmlSecNssKWDes3Iv, XMLSEC_NSS_DES3_IV_LENGTH,
++ in, inSize,
++ out, outSize, 0);
++ if((ret < 0) || (ret < XMLSEC_NSS_DES3_IV_LENGTH)) {
++ xmlSecError(XMLSEC_ERRORS_HERE,
++ NULL,
++ "xmlSecNssKWDes3Encrypt",
++ XMLSEC_ERRORS_R_XMLSEC_FAILED,
++ XMLSEC_ERRORS_NO_MESSAGE);
++ return(-1);
++ }
++ s = ret;
++
++ /* step 3: reverse octets order in TEMP3, result is TEMP2 */
++ ret = xmlSecNssKWDes3BufferReverse(out, s);
++ if(ret < 0) {
++ xmlSecError(XMLSEC_ERRORS_HERE,
++ NULL,
++ "xmlSecNssKWDes3BufferReverse",
++ XMLSEC_ERRORS_R_XMLSEC_FAILED,
++ XMLSEC_ERRORS_NO_MESSAGE);
++ return(-1);
++ }
++
++ /* steps 4 and 5: get IV and decrypt second time, result is WKCKS */
++ ret = xmlSecNssKWDes3Encrypt( ctx->symkey, ctx->cipher,
++ out, XMLSEC_NSS_DES3_IV_LENGTH,
++ out+XMLSEC_NSS_DES3_IV_LENGTH, s-XMLSEC_NSS_DES3_IV_LENGTH,
++ out, outSize, 0);
++ if((ret < 0) || (ret < XMLSEC_NSS_DES3_BLOCK_LENGTH)) {
++ xmlSecError(XMLSEC_ERRORS_HERE,
++ NULL,
++ "xmlSecNssKWDes3Encrypt",
++ XMLSEC_ERRORS_R_XMLSEC_FAILED,
++ XMLSEC_ERRORS_NO_MESSAGE);
++ return(-1);
++ }
++ s = ret - XMLSEC_NSS_DES3_IV_LENGTH;
++
++ /* steps 6 and 7: calculate SHA1 and validate it */
++ if(xmlSecNssComputeSHA1(out, s, sha1, SHA1_LENGTH) == NULL) {
++ xmlSecError(XMLSEC_ERRORS_HERE,
++ NULL,
++ "xmlSecNssComputeSHA1",
++ XMLSEC_ERRORS_R_CRYPTO_FAILED,
++ XMLSEC_ERRORS_NO_MESSAGE);
++ return(-1);
++ }
++
++ if(memcmp(sha1, out + s, XMLSEC_NSS_DES3_BLOCK_LENGTH) != 0) {
++ xmlSecError(XMLSEC_ERRORS_HERE,
++ NULL,
++ NULL,
++ XMLSEC_ERRORS_R_INVALID_DATA,
++ "SHA1 does not match");
++ return(-1);
++ }
++
++ if( xmlSecBufferSetSize( result , s ) < 0 ) {
++ xmlSecError(XMLSEC_ERRORS_HERE,
++ NULL,
++ "xmlSecBufferSetSize",
++ XMLSEC_ERRORS_R_XMLSEC_FAILED,
++ XMLSEC_ERRORS_NO_MESSAGE);
++ return(-1);
++ }
++ }
++
++ return(0);
++}
++
++static int
++xmlSecNssKeyWrapAesOp(
++ xmlSecNssKeyWrapCtxPtr ctx ,
++ int encrypt ,
++ xmlSecBufferPtr result
++) {
++ PK11Context* cipherCtx = NULL;
++ SECItem ivItem ;
++ SECItem* secParam = NULL ;
++ xmlSecSize inSize ;
++ xmlSecSize inBlocks ;
++ int blockSize ;
++ int midSize ;
++ int finSize ;
++ xmlSecByte* out ;
++ xmlSecSize outSize;
++
++ xmlSecAssert2( ctx != NULL , -1 ) ;
++ xmlSecAssert2( ctx->cipher != CKM_INVALID_MECHANISM , -1 ) ;
++ xmlSecAssert2( ctx->symkey != NULL , -1 ) ;
++ xmlSecAssert2( ctx->keyId != NULL , -1 ) ;
++ xmlSecAssert2( ctx->material != NULL , -1 ) ;
++ xmlSecAssert2( result != NULL , -1 ) ;
++
++ /* Do not set any IV */
++ memset(&ivItem, 0, sizeof(ivItem));
++
++ /* Get block size */
++ if( ( blockSize = PK11_GetBlockSize( ctx->cipher , NULL ) ) < 0 ) {
++ xmlSecError( XMLSEC_ERRORS_HERE ,
++ NULL ,
++ "PK11_GetBlockSize" ,
++ XMLSEC_ERRORS_R_CRYPTO_FAILED ,
++ XMLSEC_ERRORS_NO_MESSAGE ) ;
++ return(-1);
++ }
++
++ inSize = xmlSecBufferGetSize( ctx->material ) ;
++ if( xmlSecBufferSetMaxSize( result , inSize + blockSize ) < 0 ) {
++ xmlSecError( XMLSEC_ERRORS_HERE ,
++ NULL ,
++ "xmlSecBufferSetMaxSize" ,
++ XMLSEC_ERRORS_R_CRYPTO_FAILED ,
++ XMLSEC_ERRORS_NO_MESSAGE ) ;
++ return(-1);
++ }
++
++ /* Get Param for context initialization */
++ if( ( secParam = PK11_ParamFromIV( ctx->cipher , &ivItem ) ) == NULL ) {
++ xmlSecError( XMLSEC_ERRORS_HERE ,
++ NULL ,
++ "PK11_ParamFromIV" ,
++ XMLSEC_ERRORS_R_CRYPTO_FAILED ,
++ XMLSEC_ERRORS_NO_MESSAGE ) ;
++ return(-1);
++ }
++
++ cipherCtx = PK11_CreateContextBySymKey( ctx->cipher , encrypt ? CKA_ENCRYPT : CKA_DECRYPT , ctx->symkey , secParam ) ;
++ if( cipherCtx == NULL ) {
++ xmlSecError( XMLSEC_ERRORS_HERE ,
++ NULL ,
++ "PK11_CreateContextBySymKey" ,
++ XMLSEC_ERRORS_R_CRYPTO_FAILED ,
++ XMLSEC_ERRORS_NO_MESSAGE ) ;
++ SECITEM_FreeItem( secParam , PR_TRUE ) ;
++ return(-1);
++ }
++
++ out = xmlSecBufferGetData(result) ;
++ outSize = xmlSecBufferGetMaxSize(result) ;
++ if( PK11_CipherOp( cipherCtx , out, &midSize , outSize , xmlSecBufferGetData( ctx->material ) , inSize ) != SECSuccess ) {
++ xmlSecError( XMLSEC_ERRORS_HERE ,
++ NULL ,
++ "PK11_CipherOp" ,
++ XMLSEC_ERRORS_R_CRYPTO_FAILED ,
++ XMLSEC_ERRORS_NO_MESSAGE ) ;
++ return(-1);
++ }
++
++ if( PK11_DigestFinal( cipherCtx , out + midSize , &finSize , outSize - midSize ) != SECSuccess ) {
++ xmlSecError( XMLSEC_ERRORS_HERE ,
++ NULL ,
++ "PK11_DigestFinal" ,
++ XMLSEC_ERRORS_R_CRYPTO_FAILED ,
++ XMLSEC_ERRORS_NO_MESSAGE ) ;
++ return(-1);
++ }
++
++ if( xmlSecBufferSetSize( result , midSize + finSize ) < 0 ) {
++ xmlSecError( XMLSEC_ERRORS_HERE ,
++ NULL ,
++ "xmlSecBufferSetSize" ,
++ XMLSEC_ERRORS_R_CRYPTO_FAILED ,
++ XMLSEC_ERRORS_NO_MESSAGE ) ;
++ return(-1);
++ }
++
++ return 0 ;
++}
++
++/**
++ * Block cipher transform final
++ */
++static int
++xmlSecNssKeyWrapCtxFinal(
++ xmlSecNssKeyWrapCtxPtr ctx ,
++ xmlSecBufferPtr in ,
++ xmlSecBufferPtr out ,
++ int encrypt ,
++ xmlSecTransformCtxPtr transformCtx
++) {
++ PK11SymKey* targetKey ;
++ xmlSecSize blockSize ;
++ xmlSecBufferPtr result ;
++
++ xmlSecAssert2( ctx != NULL , -1 ) ;
++ xmlSecAssert2( ctx->cipher != CKM_INVALID_MECHANISM , -1 ) ;
++ xmlSecAssert2( ctx->symkey != NULL , -1 ) ;
++ xmlSecAssert2( ctx->keyId != NULL , -1 ) ;
++ xmlSecAssert2( ctx->material != NULL , -1 ) ;
++ xmlSecAssert2( in != NULL , -1 ) ;
++ xmlSecAssert2( out != NULL , -1 ) ;
++ xmlSecAssert2( transformCtx != NULL , -1 ) ;
++
++ /* read raw key material and append into context */
++ if( xmlSecBufferAppend( ctx->material, xmlSecBufferGetData(in), xmlSecBufferGetSize(in) ) < 0 ) {
++ xmlSecError( XMLSEC_ERRORS_HERE ,
++ NULL ,
++ "xmlSecBufferAppend" ,
++ XMLSEC_ERRORS_R_CRYPTO_FAILED ,
++ XMLSEC_ERRORS_NO_MESSAGE ) ;
++ return(-1);
++ }
++
++ if( xmlSecBufferRemoveHead( in , xmlSecBufferGetSize(in) ) < 0 ) {
++ xmlSecError( XMLSEC_ERRORS_HERE ,
++ NULL ,
++ "xmlSecBufferRemoveHead" ,
++ XMLSEC_ERRORS_R_CRYPTO_FAILED ,
++ XMLSEC_ERRORS_NO_MESSAGE ) ;
++ return(-1);
++ }
++
++ /* Now we get all of the key materail */
++ /* from now on we will wrap or unwrap the key */
++ if( ( blockSize = PK11_GetBlockSize( ctx->cipher , NULL ) ) < 0 ) {
++ xmlSecError( XMLSEC_ERRORS_HERE ,
++ NULL ,
++ "PK11_GetBlockSize" ,
++ XMLSEC_ERRORS_R_CRYPTO_FAILED ,
++ XMLSEC_ERRORS_NO_MESSAGE ) ;
++ return(-1);
++ }
++
++ result = xmlSecBufferCreate( blockSize ) ;
++ if( result == NULL ) {
++ xmlSecError( XMLSEC_ERRORS_HERE ,
++ NULL ,
++ "xmlSecBufferCreate" ,
++ XMLSEC_ERRORS_R_CRYPTO_FAILED ,
++ XMLSEC_ERRORS_NO_MESSAGE ) ;
++ return(-1);
++ }
++
++ switch( ctx->cipher ) {
++ case CKM_DES3_CBC :
++ if( xmlSecNssKeyWrapDesOp(ctx, encrypt, result) < 0 ) {
++ xmlSecError( XMLSEC_ERRORS_HERE ,
++ NULL ,
++ "xmlSecNssKeyWrapDesOp" ,
++ XMLSEC_ERRORS_R_CRYPTO_FAILED ,
++ XMLSEC_ERRORS_NO_MESSAGE ) ;
++ xmlSecBufferDestroy(result);
++ return(-1);
++ }
++ break ;
++ /* case CKM_NETSCAPE_AES_KEY_WRAP :*/
++ case CKM_AES_CBC :
++ if( xmlSecNssKeyWrapAesOp(ctx, encrypt, result) < 0 ) {
++ xmlSecError( XMLSEC_ERRORS_HERE ,
++ NULL ,
++ "xmlSecNssKeyWrapAesOp" ,
++ XMLSEC_ERRORS_R_CRYPTO_FAILED ,
++ XMLSEC_ERRORS_NO_MESSAGE ) ;
++ xmlSecBufferDestroy(result);
++ return(-1);
++ }
++ break ;
++ }
++
++ /* Write output */
++ if( xmlSecBufferAppend( out, xmlSecBufferGetData(result), xmlSecBufferGetSize(result) ) < 0 ) {
++ xmlSecError( XMLSEC_ERRORS_HERE ,
++ NULL ,
++ "xmlSecBufferAppend" ,
++ XMLSEC_ERRORS_R_CRYPTO_FAILED ,
++ XMLSEC_ERRORS_NO_MESSAGE ) ;
++ xmlSecBufferDestroy(result);
++ return(-1);
++ }
++ xmlSecBufferDestroy(result);
++
++ return(0);
++}
++
++static int
++xmlSecNssKeyWrapExecute(xmlSecTransformPtr transform, int last, xmlSecTransformCtxPtr transformCtx) {
++ xmlSecNssKeyWrapCtxPtr context = NULL ;
++ xmlSecBufferPtr inBuf, outBuf ;
++ int operation ;
++ int rtv ;
++
++ xmlSecAssert2( xmlSecNssKeyWrapCheckId( transform ), -1 ) ;
++ xmlSecAssert2( xmlSecTransformCheckSize( transform, xmlSecNssKeyWrapSize ), -1 ) ;
++ xmlSecAssert2( ( transform->operation == xmlSecTransformOperationEncrypt ) || ( transform->operation == xmlSecTransformOperationDecrypt ), -1 ) ;
++ xmlSecAssert2( transformCtx != NULL , -1 ) ;
++
++ context = xmlSecNssKeyWrapGetCtx( transform ) ;
++ if( context == NULL ) {
++ xmlSecError( XMLSEC_ERRORS_HERE ,
++ xmlSecErrorsSafeString( xmlSecTransformGetName( transform ) ) ,
++ "xmlSecNssKeyWrapGetCtx" ,
++ XMLSEC_ERRORS_R_CRYPTO_FAILED ,
++ XMLSEC_ERRORS_NO_MESSAGE ) ;
++ return(-1);
++ }
++
++ inBuf = &( transform->inBuf ) ;
++ outBuf = &( transform->outBuf ) ;
++
++ if( transform->status == xmlSecTransformStatusNone ) {
++ transform->status = xmlSecTransformStatusWorking ;
++ }
++
++ operation = ( transform->operation == xmlSecTransformOperationEncrypt ) ? 1 : 0 ;
++ if( transform->status == xmlSecTransformStatusWorking ) {
++ if( context->material == NULL ) {
++ rtv = xmlSecNssKeyWrapCtxInit( context, inBuf , outBuf , operation , transformCtx ) ;
++ if( rtv < 0 ) {
++ xmlSecError( XMLSEC_ERRORS_HERE ,
++ xmlSecErrorsSafeString( xmlSecTransformGetName( transform ) ) ,
++ "xmlSecNssKeyWrapCtxInit" ,
++ XMLSEC_ERRORS_R_INVALID_STATUS ,
++ XMLSEC_ERRORS_NO_MESSAGE ) ;
++ return(-1);
++ }
++ }
++
++ if( context->material == NULL && last != 0 ) {
++ xmlSecError( XMLSEC_ERRORS_HERE ,
++ xmlSecErrorsSafeString( xmlSecTransformGetName( transform ) ) ,
++ NULL ,
++ XMLSEC_ERRORS_R_INVALID_STATUS ,
++ "No enough data to intialize transform" ) ;
++ return(-1);
++ }
++
++ if( context->material != NULL ) {
++ rtv = xmlSecNssKeyWrapCtxUpdate( context, inBuf , outBuf , operation , transformCtx ) ;
++ if( rtv < 0 ) {
++ xmlSecError( XMLSEC_ERRORS_HERE ,
++ xmlSecErrorsSafeString( xmlSecTransformGetName( transform ) ) ,
++ "xmlSecNssKeyWrapCtxUpdate" ,
++ XMLSEC_ERRORS_R_INVALID_STATUS ,
++ XMLSEC_ERRORS_NO_MESSAGE ) ;
++ return(-1);
++ }
++ }
++
++ if( last ) {
++ rtv = xmlSecNssKeyWrapCtxFinal( context, inBuf , outBuf , operation , transformCtx ) ;
++ if( rtv < 0 ) {
++ xmlSecError( XMLSEC_ERRORS_HERE ,
++ xmlSecErrorsSafeString( xmlSecTransformGetName( transform ) ) ,
++ "xmlSecNssKeyWrapCtxFinal" ,
++ XMLSEC_ERRORS_R_INVALID_STATUS ,
++ XMLSEC_ERRORS_NO_MESSAGE ) ;
++ return(-1);
++ }
++ transform->status = xmlSecTransformStatusFinished ;
++ }
++ } else if( transform->status == xmlSecTransformStatusFinished ) {
++ if( xmlSecBufferGetSize( inBuf ) != 0 ) {
++ xmlSecError( XMLSEC_ERRORS_HERE ,
++ xmlSecErrorsSafeString( xmlSecTransformGetName( transform ) ) ,
++ NULL ,
++ XMLSEC_ERRORS_R_INVALID_STATUS ,
++ "status=%d", transform->status ) ;
++ return(-1);
++ }
++ } else {
++ xmlSecError( XMLSEC_ERRORS_HERE ,
++ xmlSecErrorsSafeString( xmlSecTransformGetName( transform ) ) ,
++ NULL ,
++ XMLSEC_ERRORS_R_INVALID_STATUS ,
++ "status=%d", transform->status ) ;
++ return(-1);
++ }
++
++ return(0);
++}
++
++#ifndef XMLSEC_NO_AES
++
++
++#ifdef __MINGW32__ // for runtime-pseudo-reloc
++static struct _xmlSecTransformKlass xmlSecNssKWAes128Klass = {
++#else
++static xmlSecTransformKlass xmlSecNssKWAes128Klass = {
++#endif
++ /* klass/object sizes */
++ sizeof(xmlSecTransformKlass), /* xmlSecSize klassSize */
++ xmlSecNssKeyWrapSize, /* xmlSecSize objSize */
++
++ xmlSecNameKWAes128, /* const xmlChar* name; */
++ xmlSecHrefKWAes128, /* const xmlChar* href; */
++ xmlSecTransformUsageEncryptionMethod, /* xmlSecAlgorithmUsage usage; */
++
++ xmlSecNssKeyWrapInitialize, /* xmlSecTransformInitializeMethod initialize; */
++ xmlSecNssKeyWrapFinalize, /* xmlSecTransformFinalizeMethod finalize; */
++ NULL, /* xmlSecTransformNodeReadMethod readNode; */
++ NULL, /* xmlSecTransformNodeWriteMethod writeNode; */
++ xmlSecNssKeyWrapSetKeyReq, /* xmlSecTransformSetKeyMethod setKeyReq; */
++ xmlSecNssKeyWrapSetKey, /* xmlSecTransformSetKeyMethod setKey; */
++ NULL, /* xmlSecTransformValidateMethod validate; */
++ xmlSecTransformDefaultGetDataType, /* xmlSecTransformGetDataTypeMethod getDataType; */
++ xmlSecTransformDefaultPushBin, /* xmlSecTransformPushBinMethod pushBin; */
++ xmlSecTransformDefaultPopBin, /* xmlSecTransformPopBinMethod popBin; */
++ NULL, /* xmlSecTransformPushXmlMethod pushXml; */
++ NULL, /* xmlSecTransformPopXmlMethod popXml; */
++ xmlSecNssKeyWrapExecute, /* xmlSecTransformExecuteMethod execute; */
++
++ NULL, /* void* reserved0; */
++ NULL, /* void* reserved1; */
++};
++
++#ifdef __MINGW32__ // for runtime-pseudo-reloc
++static struct _xmlSecTransformKlass xmlSecNssKWAes192Klass = {
++#else
++static xmlSecTransformKlass xmlSecNssKWAes192Klass = {
++#endif
++ /* klass/object sizes */
++ sizeof(xmlSecTransformKlass), /* xmlSecSize klassSize */
++ xmlSecNssKeyWrapSize, /* xmlSecSize objSize */
++
++ xmlSecNameKWAes192, /* const xmlChar* name; */
++ xmlSecHrefKWAes192, /* const xmlChar* href; */
++ xmlSecTransformUsageEncryptionMethod, /* xmlSecAlgorithmUsage usage; */
++
++ xmlSecNssKeyWrapInitialize, /* xmlSecTransformInitializeMethod initialize; */
++ xmlSecNssKeyWrapFinalize, /* xmlSecTransformFinalizeMethod finalize; */
++ NULL, /* xmlSecTransformNodeReadMethod readNode; */
++ NULL, /* xmlSecTransformNodeWriteMethod writeNode; */
++ xmlSecNssKeyWrapSetKeyReq, /* xmlSecTransformSetKeyMethod setKeyReq; */
++ xmlSecNssKeyWrapSetKey, /* xmlSecTransformSetKeyMethod setKey; */
++ NULL, /* xmlSecTransformValidateMethod validate; */
++ xmlSecTransformDefaultGetDataType, /* xmlSecTransformGetDataTypeMethod getDataType; */
++ xmlSecTransformDefaultPushBin, /* xmlSecTransformPushBinMethod pushBin; */
++ xmlSecTransformDefaultPopBin, /* xmlSecTransformPopBinMethod popBin; */
++ NULL, /* xmlSecTransformPushXmlMethod pushXml; */
++ NULL, /* xmlSecTransformPopXmlMethod popXml; */
++ xmlSecNssKeyWrapExecute, /* xmlSecTransformExecuteMethod execute; */
++
++ NULL, /* void* reserved0; */
++ NULL, /* void* reserved1; */
++};
++
++#ifdef __MINGW32__ // for runtime-pseudo-reloc
++static struct _xmlSecTransformKlass xmlSecNssKWAes256Klass = {
++#else
++static xmlSecTransformKlass xmlSecNssKWAes256Klass = {
++#endif
++ /* klass/object sizes */
++ sizeof(xmlSecTransformKlass), /* xmlSecSize klassSize */
++ xmlSecNssKeyWrapSize, /* xmlSecSize objSize */
++
++ xmlSecNameKWAes256, /* const xmlChar* name; */
++ xmlSecHrefKWAes256, /* const xmlChar* href; */
++ xmlSecTransformUsageEncryptionMethod, /* xmlSecAlgorithmUsage usage; */
++
++ xmlSecNssKeyWrapInitialize, /* xmlSecTransformInitializeMethod initialize; */
++ xmlSecNssKeyWrapFinalize, /* xmlSecTransformFinalizeMethod finalize; */
++ NULL, /* xmlSecTransformNodeReadMethod readNode; */
++ NULL, /* xmlSecTransformNodeWriteMethod writeNode; */
++ xmlSecNssKeyWrapSetKeyReq, /* xmlSecTransformSetKeyMethod setKeyReq; */
++ xmlSecNssKeyWrapSetKey, /* xmlSecTransformSetKeyMethod setKey; */
++ NULL, /* xmlSecTransformValidateMethod validate; */
++ xmlSecTransformDefaultGetDataType, /* xmlSecTransformGetDataTypeMethod getDataType; */
++ xmlSecTransformDefaultPushBin, /* xmlSecTransformPushBinMethod pushBin; */
++ xmlSecTransformDefaultPopBin, /* xmlSecTransformPopBinMethod popBin; */
++ NULL, /* xmlSecTransformPushXmlMethod pushXml; */
++ NULL, /* xmlSecTransformPopXmlMethod popXml; */
++ xmlSecNssKeyWrapExecute, /* xmlSecTransformExecuteMethod execute; */
++
++ NULL, /* void* reserved0; */
++ NULL, /* void* reserved1; */
++};
++
++/**
++ * xmlSecNssTransformKWAes128GetKlass:
++ *
++ * The AES-128 key wrapper transform klass.
++ *
++ * Returns AES-128 key wrapper transform klass.
++ */
++xmlSecTransformId
++xmlSecNssTransformKWAes128GetKlass(void) {
++ return(&xmlSecNssKWAes128Klass);
++}
++
++/**
++ * xmlSecNssTransformKWAes192GetKlass:
++ *
++ * The AES-192 key wrapper transform klass.
++ *
++ * Returns AES-192 key wrapper transform klass.
++ */
++xmlSecTransformId
++xmlSecNssTransformKWAes192GetKlass(void) {
++ return(&xmlSecNssKWAes192Klass);
++}
++
++/**
++ *
++ * The AES-256 key wrapper transform klass.
++ *
++ * Returns AES-256 key wrapper transform klass.
++ */
++xmlSecTransformId
++xmlSecNssTransformKWAes256GetKlass(void) {
++ return(&xmlSecNssKWAes256Klass);
++}
++
++#endif /* XMLSEC_NO_AES */
++
++
++#ifndef XMLSEC_NO_DES
++
++#ifdef __MINGW32__ // for runtime-pseudo-reloc
++static struct _xmlSecTransformKlass xmlSecNssKWDes3Klass = {
++#else
++static xmlSecTransformKlass xmlSecNssKWDes3Klass = {
++#endif
++ /* klass/object sizes */
++ sizeof(xmlSecTransformKlass), /* xmlSecSize klassSize */
++ xmlSecNssKeyWrapSize, /* xmlSecSize objSize */
++
++ xmlSecNameKWDes3, /* const xmlChar* name; */
++ xmlSecHrefKWDes3, /* const xmlChar* href; */
++ xmlSecTransformUsageEncryptionMethod, /* xmlSecAlgorithmUsage usage; */
++
++ xmlSecNssKeyWrapInitialize, /* xmlSecTransformInitializeMethod initialize; */
++ xmlSecNssKeyWrapFinalize, /* xmlSecTransformFinalizeMethod finalize; */
++ NULL, /* xmlSecTransformNodeReadMethod readNode; */
++ NULL, /* xmlSecTransformNodeWriteMethod writeNode; */
++ xmlSecNssKeyWrapSetKeyReq, /* xmlSecTransformSetKeyMethod setKeyReq; */
++ xmlSecNssKeyWrapSetKey, /* xmlSecTransformSetKeyMethod setKey; */
++ NULL, /* xmlSecTransformValidateMethod validate; */
++ xmlSecTransformDefaultGetDataType, /* xmlSecTransformGetDataTypeMethod getDataType; */
++ xmlSecTransformDefaultPushBin, /* xmlSecTransformPushBinMethod pushBin; */
++ xmlSecTransformDefaultPopBin, /* xmlSecTransformPopBinMethod popBin; */
++ NULL, /* xmlSecTransformPushXmlMethod pushXml; */
++ NULL, /* xmlSecTransformPopXmlMethod popXml; */
++ xmlSecNssKeyWrapExecute, /* xmlSecTransformExecuteMethod execute; */
++
++ NULL, /* void* reserved0; */
++ NULL, /* void* reserved1; */
++};
++
++/**
++ * xmlSecNssTransformKWDes3GetKlass:
++ *
++ * The Triple DES key wrapper transform klass.
++ *
++ * Returns Triple DES key wrapper transform klass.
++ */
++xmlSecTransformId
++xmlSecNssTransformKWDes3GetKlass(void) {
++ return(&xmlSecNssKWDes3Klass);
++}
++
++#endif /* XMLSEC_NO_DES */
++
+--- misc/xmlsec1-1.2.6/src/nss/pkikeys.c 2004-03-17 06:06:45.000000000 +0100
++++ misc/build/xmlsec1-1.2.6/src/nss/pkikeys.c 2008-06-29 23:44:19.000000000 +0200
+@@ -5,6 +5,7 @@
+ * distribution for preciese wording.
+ *
+ * Copyright (c) 2003 America Online, Inc. All rights reserved.
++ * Copyright ...........................
+ */
+ #include "globals.h"
+
+@@ -24,6 +25,7 @@
+ #include <xmlsec/nss/crypto.h>
+ #include <xmlsec/nss/bignum.h>
+ #include <xmlsec/nss/pkikeys.h>
++#include <xmlsec/nss/tokens.h>
+
+ /**************************************************************************
+ *
+@@ -98,14 +100,13 @@
+ {
+ xmlSecAssert(ctx != NULL);
+ if (ctx->privkey != NULL) {
+- SECKEY_DestroyPrivateKey(ctx->privkey);
+- ctx->privkey = NULL;
++ SECKEY_DestroyPrivateKey(ctx->privkey);
++ ctx->privkey = NULL;
+ }
+
+- if (ctx->pubkey)
+- {
+- SECKEY_DestroyPublicKey(ctx->pubkey);
+- ctx->pubkey = NULL;
++ if (ctx->pubkey) {
++ SECKEY_DestroyPublicKey(ctx->pubkey);
++ ctx->pubkey = NULL;
+ }
+
+ }
+@@ -115,29 +116,32 @@
+ xmlSecNssPKIKeyDataCtxPtr ctxSrc)
+ {
+ xmlSecNSSPKIKeyDataCtxFree(ctxDst);
++ ctxDst->privkey = NULL ;
++ ctxDst->pubkey = NULL ;
+ if (ctxSrc->privkey != NULL) {
+- ctxDst->privkey = SECKEY_CopyPrivateKey(ctxSrc->privkey);
+- if(ctxDst->privkey == NULL) {
+- xmlSecError(XMLSEC_ERRORS_HERE,
+- NULL,
+- "SECKEY_CopyPrivateKey",
+- XMLSEC_ERRORS_R_CRYPTO_FAILED,
+- XMLSEC_ERRORS_NO_MESSAGE);
+- return(-1);
+- }
++ ctxDst->privkey = SECKEY_CopyPrivateKey(ctxSrc->privkey);
++ if(ctxDst->privkey == NULL) {
++ xmlSecError(XMLSEC_ERRORS_HERE,
++ NULL,
++ "SECKEY_CopyPrivateKey",
++ XMLSEC_ERRORS_R_CRYPTO_FAILED,
++ "error code=%d", PORT_GetError());
++ return(-1);
++ }
+ }
+
+ if (ctxSrc->pubkey != NULL) {
+- ctxDst->pubkey = SECKEY_CopyPublicKey(ctxSrc->pubkey);
+- if(ctxDst->pubkey == NULL) {
+- xmlSecError(XMLSEC_ERRORS_HERE,
+- NULL,
+- "SECKEY_CopyPublicKey",
+- XMLSEC_ERRORS_R_CRYPTO_FAILED,
+- XMLSEC_ERRORS_NO_MESSAGE);
+- return(-1);
+- }
++ ctxDst->pubkey = SECKEY_CopyPublicKey(ctxSrc->pubkey);
++ if(ctxDst->pubkey == NULL) {
++ xmlSecError(XMLSEC_ERRORS_HERE,
++ NULL,
++ "SECKEY_CopyPublicKey",
++ XMLSEC_ERRORS_R_CRYPTO_FAILED,
++ "error code=%d", PORT_GetError());
++ return(-1);
++ }
+ }
++
+ return (0);
+ }
+
+@@ -147,20 +151,41 @@
+ SECKEYPublicKey *pubkey)
+ {
+ xmlSecNssPKIKeyDataCtxPtr ctx;
++ KeyType pubType = nullKey ;
++ KeyType priType = nullKey ;
+
+ xmlSecAssert2(xmlSecKeyDataIsValid(data), -1);
+ xmlSecAssert2(xmlSecKeyDataCheckSize(data, xmlSecNssPKIKeyDataSize), -1);
+
++ if( privkey != NULL ) {
++ priType = SECKEY_GetPrivateKeyType( privkey ) ;
++ }
++
++ if( pubkey != NULL ) {
++ pubType = SECKEY_GetPublicKeyType( pubkey ) ;
++ }
++
++ if( priType != nullKey && pubType != nullKey ) {
++ if( pubType != priType ) {
++ xmlSecError( XMLSEC_ERRORS_HERE ,
++ NULL ,
++ NULL ,
++ XMLSEC_ERRORS_R_CRYPTO_FAILED ,
++ "different type of private and public key" ) ;
++ return -1 ;
++ }
++ }
++
+ ctx = xmlSecNssPKIKeyDataGetCtx(data);
+ xmlSecAssert2(ctx != NULL, -1);
+
+ if (ctx->privkey) {
+- SECKEY_DestroyPrivateKey(ctx->privkey);
++ SECKEY_DestroyPrivateKey(ctx->privkey);
+ }
+ ctx->privkey = privkey;
+
+ if (ctx->pubkey) {
+- SECKEY_DestroyPublicKey(ctx->pubkey);
++ SECKEY_DestroyPublicKey(ctx->pubkey);
+ }
+ ctx->pubkey = pubkey;
+
+@@ -183,61 +208,75 @@
+ {
+ xmlSecKeyDataPtr data = NULL;
+ int ret;
+- KeyType kt;
+-
+- if (pubkey != NULL) {
+- kt = SECKEY_GetPublicKeyType(pubkey);
+- } else {
+- kt = SECKEY_GetPrivateKeyType(privkey);
+- pubkey = SECKEY_ConvertToPublicKey(privkey);
+- }
++ KeyType pubType = nullKey ;
++ KeyType priType = nullKey ;
+
+- switch(kt) {
++ if( privkey != NULL ) {
++ priType = SECKEY_GetPrivateKeyType( privkey ) ;
++ }
++
++ if( pubkey != NULL ) {
++ pubType = SECKEY_GetPublicKeyType( pubkey ) ;
++ }
++
++ if( priType != nullKey && pubType != nullKey ) {
++ if( pubType != priType ) {
++ xmlSecError( XMLSEC_ERRORS_HERE ,
++ NULL ,
++ NULL ,
++ XMLSEC_ERRORS_R_CRYPTO_FAILED ,
++ "different type of private and public key" ) ;
++ return( NULL ) ;
++ }
++ }
++
++ pubType = priType != nullKey ? priType : pubType ;
++ switch(pubType) {
+ #ifndef XMLSEC_NO_RSA
+ case rsaKey:
+- data = xmlSecKeyDataCreate(xmlSecNssKeyDataRsaId);
+- if(data == NULL) {
+- xmlSecError(XMLSEC_ERRORS_HERE,
+- NULL,
+- "xmlSecKeyDataCreate",
+- XMLSEC_ERRORS_R_XMLSEC_FAILED,
+- "xmlSecNssKeyDataRsaId");
+- return(NULL);
+- }
+- break;
++ data = xmlSecKeyDataCreate(xmlSecNssKeyDataRsaId);
++ if(data == NULL) {
++ xmlSecError(XMLSEC_ERRORS_HERE,
++ NULL,
++ "xmlSecKeyDataCreate",
++ XMLSEC_ERRORS_R_XMLSEC_FAILED,
++ "xmlSecNssKeyDataRsaId");
++ return(NULL);
++ }
++ break;
+ #endif /* XMLSEC_NO_RSA */
+ #ifndef XMLSEC_NO_DSA
+ case dsaKey:
+- data = xmlSecKeyDataCreate(xmlSecNssKeyDataDsaId);
+- if(data == NULL) {
+- xmlSecError(XMLSEC_ERRORS_HERE,
+- NULL,
+- "xmlSecKeyDataCreate",
+- XMLSEC_ERRORS_R_XMLSEC_FAILED,
+- "xmlSecNssKeyDataDsaId");
+- return(NULL);
+- }
+- break;
++ data = xmlSecKeyDataCreate(xmlSecNssKeyDataDsaId);
++ if(data == NULL) {
++ xmlSecError(XMLSEC_ERRORS_HERE,
++ NULL,
++ "xmlSecKeyDataCreate",
++ XMLSEC_ERRORS_R_XMLSEC_FAILED,
++ "xmlSecNssKeyDataDsaId");
++ return(NULL);
++ }
++ break;
+ #endif /* XMLSEC_NO_DSA */
+ default:
+- xmlSecError(XMLSEC_ERRORS_HERE,
++ xmlSecError(XMLSEC_ERRORS_HERE,
+ NULL,
+ NULL,
+ XMLSEC_ERRORS_R_INVALID_TYPE,
+- "PKI key type %d not supported", kt);
+- return(NULL);
++ "PKI key type %d not supported", pubType);
++ return(NULL);
+ }
+
+ xmlSecAssert2(data != NULL, NULL);
+ ret = xmlSecNssPKIKeyDataAdoptKey(data, privkey, pubkey);
+ if(ret < 0) {
+- xmlSecError(XMLSEC_ERRORS_HERE,
++ xmlSecError(XMLSEC_ERRORS_HERE,
+ NULL,
+ "xmlSecNssPKIKeyDataAdoptKey",
+ XMLSEC_ERRORS_R_XMLSEC_FAILED,
+ XMLSEC_ERRORS_NO_MESSAGE);
+- xmlSecKeyDataDestroy(data);
+- return(NULL);
++ xmlSecKeyDataDestroy(data);
++ return(NULL);
+ }
+ return(data);
+ }
+@@ -263,7 +302,7 @@
+ xmlSecAssert2(ctx != NULL, NULL);
+ xmlSecAssert2(ctx->pubkey != NULL, NULL);
+
+- ret = SECKEY_CopyPublicKey(ctx->pubkey);
++ ret = SECKEY_CopyPublicKey(ctx->pubkey);
+ return(ret);
+ }
+
+@@ -312,9 +351,9 @@
+ xmlSecAssert2(ctx != NULL, nullKey);
+
+ if (ctx->pubkey != NULL) {
+- kt = SECKEY_GetPublicKeyType(ctx->pubkey);
++ kt = SECKEY_GetPublicKeyType(ctx->pubkey);
+ } else {
+- kt = SECKEY_GetPrivateKeyType(ctx->privkey);
++ kt = SECKEY_GetPrivateKeyType(ctx->privkey);
+ }
+ return(kt);
+ }
+@@ -453,7 +492,11 @@
+ static void xmlSecNssKeyDataDsaDebugXmlDump (xmlSecKeyDataPtr data,
+ FILE* output);
+
++#ifdef __MINGW32__ // for runtime-pseudo-reloc
++static struct _xmlSecKeyDataKlass xmlSecNssKeyDataDsaKlass = {
++#else
+ static xmlSecKeyDataKlass xmlSecNssKeyDataDsaKlass = {
++#endif
+ sizeof(xmlSecKeyDataKlass),
+ xmlSecNssPKIKeyDataSize,
+
+@@ -553,13 +596,13 @@
+ goto done;
+ }
+
+- slot = PK11_GetBestSlot(CKM_DSA, NULL);
++ slot = xmlSecNssSlotGet(CKM_DSA);
+ if(slot == NULL) {
+ xmlSecError(XMLSEC_ERRORS_HERE,
+ xmlSecErrorsSafeString(xmlSecKeyDataKlassGetName(id)),
+- "PK11_GetBestSlot",
++ "xmlSecNssSlotGet",
+ XMLSEC_ERRORS_R_CRYPTO_FAILED,
+- XMLSEC_ERRORS_NO_MESSAGE);
++ "error code=%d", PORT_GetError());
+ ret = -1;
+ goto done;
+ }
+@@ -570,7 +613,7 @@
+ xmlSecErrorsSafeString(xmlSecKeyDataKlassGetName(id)),
+ "PORT_NewArena",
+ XMLSEC_ERRORS_R_CRYPTO_FAILED,
+- XMLSEC_ERRORS_NO_MESSAGE);
++ "error code=%d", PORT_GetError());
+ ret = -1;
+ goto done;
+ }
+@@ -582,7 +625,7 @@
+ xmlSecErrorsSafeString(xmlSecKeyDataKlassGetName(id)),
+ "PORT_ArenaZAlloc",
+ XMLSEC_ERRORS_R_CRYPTO_FAILED,
+- XMLSEC_ERRORS_NO_MESSAGE);
++ "error code=%d", PORT_GetError());
+ PORT_FreeArena(arena, PR_FALSE);
+ ret = -1;
+ goto done;
+@@ -750,21 +793,21 @@
+ goto done;
+ }
+ data = NULL;
+-
+ ret = 0;
+
+ done:
+ if (slot != NULL) {
+- PK11_FreeSlot(slot);
++ PK11_FreeSlot(slot);
+ }
+- if (ret != 0) {
+- if (pubkey != NULL) {
+- SECKEY_DestroyPublicKey(pubkey);
+- }
+- if (data != NULL) {
+- xmlSecKeyDataDestroy(data);
+- }
++
++ if (pubkey != NULL) {
++ SECKEY_DestroyPublicKey(pubkey);
++ }
++
++ if (data != NULL) {
++ xmlSecKeyDataDestroy(data);
+ }
++
+ return(ret);
+ }
+
+@@ -783,7 +826,7 @@
+
+ ctx = xmlSecNssPKIKeyDataGetCtx(xmlSecKeyGetValue(key));
+ xmlSecAssert2(ctx != NULL, -1);
+- xmlSecAssert2(SECKEY_GetPublicKeyType(ctx->pubkey) == dsaKey, -1);
++/* xmlSecAssert2(SECKEY_GetPublicKeyType(ctx->pubkey) == dsaKey, -1);*/
+
+ if(((xmlSecKeyDataTypePublic | xmlSecKeyDataTypePrivate) & keyInfoCtx->keyReq.keyType) == 0) {
+ /* we can have only private key or public key */
+@@ -905,7 +948,8 @@
+ xmlSecErrorsSafeString(xmlSecKeyDataGetName(data)),
+ "PK11_PQG_ParamGen",
+ XMLSEC_ERRORS_R_CRYPTO_FAILED,
+- "size=%d", sizeBits);
++ "size=%d, error code=%d", sizeBits, PORT_GetError());
++ ret = -1;
+ goto done;
+ }
+
+@@ -915,11 +959,12 @@
+ xmlSecErrorsSafeString(xmlSecKeyDataGetName(data)),
+ "PK11_PQG_VerifyParams",
+ XMLSEC_ERRORS_R_CRYPTO_FAILED,
+- "size=%d", sizeBits);
++ "size=%d, error code=%d", sizeBits, PORT_GetError());
++ ret = -1;
+ goto done;
+ }
+
+- slot = PK11_GetBestSlot(CKM_DSA_KEY_PAIR_GEN, NULL);
++ slot = xmlSecNssSlotGet(CKM_DSA_KEY_PAIR_GEN);
+ PK11_Authenticate(slot, PR_TRUE, NULL /* default pwd callback */);
+ privkey = PK11_GenerateKeyPair(slot, CKM_DSA_KEY_PAIR_GEN, pqgParams,
+ &pubkey, PR_FALSE, PR_TRUE, NULL);
+@@ -929,8 +974,9 @@
+ xmlSecErrorsSafeString(xmlSecKeyDataGetName(data)),
+ "PK11_GenerateKeyPair",
+ XMLSEC_ERRORS_R_CRYPTO_FAILED,
+- XMLSEC_ERRORS_NO_MESSAGE);
++ "error code=%d", PORT_GetError());
- return(xmlSecKeyDataTypeUnknown);
---- 1024,1034 ----
- xmlSecAssert2(xmlSecKeyDataCheckId(data, xmlSecNssKeyDataDsaId), xmlSecKeyDataTypeUnknown);
- ctx = xmlSecNssPKIKeyDataGetCtx(data);
- xmlSecAssert2(ctx != NULL, -1);
-! /* xmlSecAssert2(SECKEY_GetPublicKeyType(ctx->pubkey) == dsaKey, -1);*/
- if (ctx->privkey != NULL) {
-! return(xmlSecKeyDataTypePrivate | xmlSecKeyDataTypePublic);
-! } else if( ctx->pubkey != NULL ) {
-! return(xmlSecKeyDataTypePublic);
- }
++ ret = -1;
+ goto done;
+ }
+
+@@ -943,29 +989,32 @@
+ XMLSEC_ERRORS_NO_MESSAGE);
+ goto done;
+ }
+-
++ privkey = NULL ;
++ pubkey = NULL ;
+ ret = 0;
+
+ done:
+ if (slot != NULL) {
+- PK11_FreeSlot(slot);
++ PK11_FreeSlot(slot);
+ }
++
+ if (pqgParams != NULL) {
+- PK11_PQG_DestroyParams(pqgParams);
++ PK11_PQG_DestroyParams(pqgParams);
+ }
++
+ if (pqgVerify != NULL) {
+- PK11_PQG_DestroyVerify(pqgVerify);
+- }
+- if (ret == 0) {
+- return (0);
++ PK11_PQG_DestroyVerify(pqgVerify);
+ }
++
+ if (pubkey != NULL) {
+- SECKEY_DestroyPublicKey(pubkey);
++ SECKEY_DestroyPublicKey(pubkey);
+ }
++
+ if (privkey != NULL) {
+- SECKEY_DestroyPrivateKey(privkey);
++ SECKEY_DestroyPrivateKey(privkey);
+ }
+- return(-1);
++
++ return(ret);
+ }
+
+ static xmlSecKeyDataType
+@@ -975,11 +1024,11 @@
+ xmlSecAssert2(xmlSecKeyDataCheckId(data, xmlSecNssKeyDataDsaId), xmlSecKeyDataTypeUnknown);
+ ctx = xmlSecNssPKIKeyDataGetCtx(data);
+ xmlSecAssert2(ctx != NULL, -1);
+- xmlSecAssert2(SECKEY_GetPublicKeyType(ctx->pubkey) == dsaKey, -1);
++/* xmlSecAssert2(SECKEY_GetPublicKeyType(ctx->pubkey) == dsaKey, -1);*/
+ if (ctx->privkey != NULL) {
+- return(xmlSecKeyDataTypePrivate | xmlSecKeyDataTypePublic);
+- } else {
+- return(xmlSecKeyDataTypePublic);
++ return(xmlSecKeyDataTypePrivate | xmlSecKeyDataTypePublic);
++ } else if( ctx->pubkey != NULL ) {
++ return(xmlSecKeyDataTypePublic);
+ }
+
+ return(xmlSecKeyDataTypeUnknown);
+@@ -992,7 +1041,7 @@
+ xmlSecAssert2(xmlSecKeyDataCheckId(data, xmlSecNssKeyDataDsaId), 0);
+ ctx = xmlSecNssPKIKeyDataGetCtx(data);
+ xmlSecAssert2(ctx != NULL, -1);
+- xmlSecAssert2(SECKEY_GetPublicKeyType(ctx->pubkey) == dsaKey, -1);
++/* xmlSecAssert2(SECKEY_GetPublicKeyType(ctx->pubkey) == dsaKey, -1);*/
+
+ return(8 * SECKEY_PublicKeyStrength(ctx->pubkey));
+ }
+@@ -1084,7 +1133,11 @@
+ static void xmlSecNssKeyDataRsaDebugXmlDump (xmlSecKeyDataPtr data,
+ FILE* output);
+
++#ifdef __MINGW32__ // for runtime-pseudo-reloc
++static struct _xmlSecKeyDataKlass xmlSecNssKeyDataRsaKlass = {
++#else
+ static xmlSecKeyDataKlass xmlSecNssKeyDataRsaKlass = {
++#endif
+ sizeof(xmlSecKeyDataKlass),
+ xmlSecNssPKIKeyDataSize,
+
+@@ -1181,13 +1234,13 @@
+ goto done;
+ }
+
+- slot = PK11_GetBestSlot(CKM_RSA_PKCS, NULL);
++ slot = xmlSecNssSlotGet(CKM_RSA_PKCS);
+ if(slot == NULL) {
+ xmlSecError(XMLSEC_ERRORS_HERE,
+ xmlSecErrorsSafeString(xmlSecKeyDataKlassGetName(id)),
+- "PK11_GetBestSlot",
++ "xmlSecNssSlotGet",
+ XMLSEC_ERRORS_R_CRYPTO_FAILED,
+- XMLSEC_ERRORS_NO_MESSAGE);
++ "error code=%d", PORT_GetError());
+ ret = -1;
+ goto done;
+ }
+@@ -1198,7 +1251,7 @@
+ xmlSecErrorsSafeString(xmlSecKeyDataKlassGetName(id)),
+ "PORT_NewArena",
+ XMLSEC_ERRORS_R_CRYPTO_FAILED,
+- XMLSEC_ERRORS_NO_MESSAGE);
++ "error code=%d", PORT_GetError());
+ ret = -1;
+ goto done;
+ }
+@@ -1210,7 +1263,7 @@
+ xmlSecErrorsSafeString(xmlSecKeyDataKlassGetName(id)),
+ "PORT_ArenaZAlloc",
+ XMLSEC_ERRORS_R_CRYPTO_FAILED,
+- XMLSEC_ERRORS_NO_MESSAGE);
++ "error code=%d", PORT_GetError());
+ PORT_FreeArena(arena, PR_FALSE);
+ ret = -1;
+ goto done;
+@@ -1349,7 +1402,7 @@
+
+ ctx = xmlSecNssPKIKeyDataGetCtx(xmlSecKeyGetValue(key));
+ xmlSecAssert2(ctx != NULL, -1);
+- xmlSecAssert2(SECKEY_GetPublicKeyType(ctx->pubkey) == rsaKey, -1);
++/* xmlSecAssert2(SECKEY_GetPublicKeyType(ctx->pubkey) == rsaKey, -1);*/
+
+
+ if(((xmlSecKeyDataTypePublic | xmlSecKeyDataTypePrivate) & keyInfoCtx->keyReq.keyType) == 0) {
+@@ -1420,7 +1473,7 @@
+ params.keySizeInBits = sizeBits;
+ params.pe = 65537;
+
+- slot = PK11_GetBestSlot(CKM_RSA_PKCS_KEY_PAIR_GEN, NULL);
++ slot = xmlSecNssSlotGet(CKM_RSA_PKCS_KEY_PAIR_GEN);
+ PK11_Authenticate(slot, PR_TRUE, NULL /* default pwd callback */);
+ privkey = PK11_GenerateKeyPair(slot, CKM_RSA_PKCS_KEY_PAIR_GEN, &params,
+ &pubkey, PR_FALSE, PR_TRUE, NULL);
+@@ -1430,7 +1483,7 @@
+ xmlSecErrorsSafeString(xmlSecKeyDataGetName(data)),
+ "PK11_GenerateKeyPair",
+ XMLSEC_ERRORS_R_CRYPTO_FAILED,
+- XMLSEC_ERRORS_NO_MESSAGE);
++ "error code=%d", PORT_GetError());
- return(xmlSecKeyDataTypeUnknown);
-***************
-*** 992,998 ****
- xmlSecAssert2(xmlSecKeyDataCheckId(data, xmlSecNssKeyDataDsaId), 0);
- ctx = xmlSecNssPKIKeyDataGetCtx(data);
- xmlSecAssert2(ctx != NULL, -1);
-! xmlSecAssert2(SECKEY_GetPublicKeyType(ctx->pubkey) == dsaKey, -1);
-
- return(8 * SECKEY_PublicKeyStrength(ctx->pubkey));
- }
---- 1041,1047 ----
- xmlSecAssert2(xmlSecKeyDataCheckId(data, xmlSecNssKeyDataDsaId), 0);
- ctx = xmlSecNssPKIKeyDataGetCtx(data);
- xmlSecAssert2(ctx != NULL, -1);
-! /* xmlSecAssert2(SECKEY_GetPublicKeyType(ctx->pubkey) == dsaKey, -1);*/
-
- return(8 * SECKEY_PublicKeyStrength(ctx->pubkey));
- }
-***************
-*** 1084,1090 ****
---- 1133,1143 ----
- static void xmlSecNssKeyDataRsaDebugXmlDump (xmlSecKeyDataPtr data,
- FILE* output);
-
-+ #ifdef __MINGW32__ // for runtime-pseudo-reloc
-+ static struct _xmlSecKeyDataKlass xmlSecNssKeyDataRsaKlass = {
-+ #else
- static xmlSecKeyDataKlass xmlSecNssKeyDataRsaKlass = {
-+ #endif
- sizeof(xmlSecKeyDataKlass),
- xmlSecNssPKIKeyDataSize,
-
-***************
-*** 1181,1193 ****
- goto done;
- }
-
-! slot = PK11_GetBestSlot(CKM_RSA_PKCS, NULL);
- if(slot == NULL) {
- xmlSecError(XMLSEC_ERRORS_HERE,
- xmlSecErrorsSafeString(xmlSecKeyDataKlassGetName(id)),
-! "PK11_GetBestSlot",
- XMLSEC_ERRORS_R_CRYPTO_FAILED,
-! XMLSEC_ERRORS_NO_MESSAGE);
- ret = -1;
- goto done;
- }
---- 1234,1246 ----
- goto done;
- }
-
-! slot = xmlSecNssSlotGet(CKM_RSA_PKCS);
- if(slot == NULL) {
- xmlSecError(XMLSEC_ERRORS_HERE,
- xmlSecErrorsSafeString(xmlSecKeyDataKlassGetName(id)),
-! "xmlSecNssSlotGet",
- XMLSEC_ERRORS_R_CRYPTO_FAILED,
-! "error code=%d", PORT_GetError());
- ret = -1;
- goto done;
- }
-***************
-*** 1198,1204 ****
- xmlSecErrorsSafeString(xmlSecKeyDataKlassGetName(id)),
- "PORT_NewArena",
- XMLSEC_ERRORS_R_CRYPTO_FAILED,
-! XMLSEC_ERRORS_NO_MESSAGE);
- ret = -1;
- goto done;
- }
---- 1251,1257 ----
- xmlSecErrorsSafeString(xmlSecKeyDataKlassGetName(id)),
- "PORT_NewArena",
- XMLSEC_ERRORS_R_CRYPTO_FAILED,
-! "error code=%d", PORT_GetError());
- ret = -1;
- goto done;
- }
-***************
-*** 1210,1216 ****
- xmlSecErrorsSafeString(xmlSecKeyDataKlassGetName(id)),
- "PORT_ArenaZAlloc",
- XMLSEC_ERRORS_R_CRYPTO_FAILED,
-! XMLSEC_ERRORS_NO_MESSAGE);
- PORT_FreeArena(arena, PR_FALSE);
- ret = -1;
- goto done;
---- 1263,1269 ----
- xmlSecErrorsSafeString(xmlSecKeyDataKlassGetName(id)),
- "PORT_ArenaZAlloc",
- XMLSEC_ERRORS_R_CRYPTO_FAILED,
-! "error code=%d", PORT_GetError());
- PORT_FreeArena(arena, PR_FALSE);
- ret = -1;
- goto done;
-***************
-*** 1349,1355 ****
-
- ctx = xmlSecNssPKIKeyDataGetCtx(xmlSecKeyGetValue(key));
- xmlSecAssert2(ctx != NULL, -1);
-! xmlSecAssert2(SECKEY_GetPublicKeyType(ctx->pubkey) == rsaKey, -1);
-
-
- if(((xmlSecKeyDataTypePublic | xmlSecKeyDataTypePrivate) & keyInfoCtx->keyReq.keyType) == 0) {
---- 1402,1408 ----
-
- ctx = xmlSecNssPKIKeyDataGetCtx(xmlSecKeyGetValue(key));
- xmlSecAssert2(ctx != NULL, -1);
-! /* xmlSecAssert2(SECKEY_GetPublicKeyType(ctx->pubkey) == rsaKey, -1);*/
-
-
- if(((xmlSecKeyDataTypePublic | xmlSecKeyDataTypePrivate) & keyInfoCtx->keyReq.keyType) == 0) {
-***************
-*** 1420,1426 ****
- params.keySizeInBits = sizeBits;
- params.pe = 65537;
-
-! slot = PK11_GetBestSlot(CKM_RSA_PKCS_KEY_PAIR_GEN, NULL);
- PK11_Authenticate(slot, PR_TRUE, NULL /* default pwd callback */);
- privkey = PK11_GenerateKeyPair(slot, CKM_RSA_PKCS_KEY_PAIR_GEN, &params,
- &pubkey, PR_FALSE, PR_TRUE, NULL);
---- 1473,1479 ----
- params.keySizeInBits = sizeBits;
- params.pe = 65537;
-
-! slot = xmlSecNssSlotGet(CKM_RSA_PKCS_KEY_PAIR_GEN);
- PK11_Authenticate(slot, PR_TRUE, NULL /* default pwd callback */);
- privkey = PK11_GenerateKeyPair(slot, CKM_RSA_PKCS_KEY_PAIR_GEN, &params,
- &pubkey, PR_FALSE, PR_TRUE, NULL);
-***************
-*** 1430,1436 ****
- xmlSecErrorsSafeString(xmlSecKeyDataGetName(data)),
- "PK11_GenerateKeyPair",
- XMLSEC_ERRORS_R_CRYPTO_FAILED,
-! XMLSEC_ERRORS_NO_MESSAGE);
-
- goto done;
- }
---- 1483,1489 ----
- xmlSecErrorsSafeString(xmlSecKeyDataGetName(data)),
- "PK11_GenerateKeyPair",
- XMLSEC_ERRORS_R_CRYPTO_FAILED,
-! "error code=%d", PORT_GetError());
-
- goto done;
- }
-***************
-*** 1472,1478 ****
-
- ctx = xmlSecNssPKIKeyDataGetCtx(data);
- xmlSecAssert2(ctx != NULL, -1);
-! xmlSecAssert2(SECKEY_GetPublicKeyType(ctx->pubkey) == rsaKey, -1);
- if (ctx->privkey != NULL) {
- return(xmlSecKeyDataTypePrivate | xmlSecKeyDataTypePublic);
- } else {
---- 1525,1531 ----
-
- ctx = xmlSecNssPKIKeyDataGetCtx(data);
- xmlSecAssert2(ctx != NULL, -1);
-! /* xmlSecAssert2(SECKEY_GetPublicKeyType(ctx->pubkey) == rsaKey, -1);*/
- if (ctx->privkey != NULL) {
- return(xmlSecKeyDataTypePrivate | xmlSecKeyDataTypePublic);
- } else {
-***************
-*** 1490,1496 ****
-
- ctx = xmlSecNssPKIKeyDataGetCtx(data);
- xmlSecAssert2(ctx != NULL, -1);
-! xmlSecAssert2(SECKEY_GetPublicKeyType(ctx->pubkey) == rsaKey, -1);
-
- return(8 * SECKEY_PublicKeyStrength(ctx->pubkey));
- }
---- 1543,1549 ----
-
- ctx = xmlSecNssPKIKeyDataGetCtx(data);
- xmlSecAssert2(ctx != NULL, -1);
-! /* xmlSecAssert2(SECKEY_GetPublicKeyType(ctx->pubkey) == rsaKey, -1);*/
-
- return(8 * SECKEY_PublicKeyStrength(ctx->pubkey));
- }
-*** misc/xmlsec1-1.2.6/src/nss/signatures.c Fri Sep 26 02:58:15 2003
---- misc/build/xmlsec1-1.2.6/src/nss/signatures.c Fri May 11 14:47:20 2007
-***************
-*** 199,205 ****
- xmlSecErrorsSafeString(xmlSecTransformGetName(transform)),
- "SGN_NewContext",
- XMLSEC_ERRORS_R_CRYPTO_FAILED,
-! XMLSEC_ERRORS_NO_MESSAGE);
- return(-1);
- }
- } else {
---- 199,205 ----
- xmlSecErrorsSafeString(xmlSecTransformGetName(transform)),
- "SGN_NewContext",
- XMLSEC_ERRORS_R_CRYPTO_FAILED,
-! "error code=%d", PORT_GetError());
- return(-1);
- }
- } else {
-***************
-*** 222,228 ****
- xmlSecErrorsSafeString(xmlSecTransformGetName(transform)),
- "VFY_CreateContext",
- XMLSEC_ERRORS_R_CRYPTO_FAILED,
-! XMLSEC_ERRORS_NO_MESSAGE);
- return(-1);
- }
- }
---- 222,228 ----
- xmlSecErrorsSafeString(xmlSecTransformGetName(transform)),
- "VFY_CreateContext",
- XMLSEC_ERRORS_R_CRYPTO_FAILED,
-! "error code=%d", PORT_GetError());
- return(-1);
- }
- }
-***************
-*** 282,288 ****
- xmlSecErrorsSafeString(xmlSecTransformGetName(transform)),
- "VFY_Update, VFY_End",
- XMLSEC_ERRORS_R_CRYPTO_FAILED,
-! XMLSEC_ERRORS_NO_MESSAGE);
-
- if (PORT_GetError() == SEC_ERROR_PKCS7_BAD_SIGNATURE) {
- xmlSecError(XMLSEC_ERRORS_HERE,
---- 282,288 ----
- xmlSecErrorsSafeString(xmlSecTransformGetName(transform)),
- "VFY_Update, VFY_End",
- XMLSEC_ERRORS_R_CRYPTO_FAILED,
-! "error code=%d", PORT_GetError());
-
- if (PORT_GetError() == SEC_ERROR_PKCS7_BAD_SIGNATURE) {
- xmlSecError(XMLSEC_ERRORS_HERE,
-***************
-*** 341,347 ****
- xmlSecErrorsSafeString(xmlSecTransformGetName(transform)),
- "SGN_Begin",
- XMLSEC_ERRORS_R_CRYPTO_FAILED,
-! XMLSEC_ERRORS_NO_MESSAGE);
- return(-1);
- }
- } else {
---- 341,347 ----
- xmlSecErrorsSafeString(xmlSecTransformGetName(transform)),
- "SGN_Begin",
- XMLSEC_ERRORS_R_CRYPTO_FAILED,
-! "error code=%d", PORT_GetError());
- return(-1);
- }
- } else {
-***************
-*** 351,357 ****
- xmlSecErrorsSafeString(xmlSecTransformGetName(transform)),
- "VFY_Begin",
- XMLSEC_ERRORS_R_CRYPTO_FAILED,
-! XMLSEC_ERRORS_NO_MESSAGE);
- return(-1);
- }
- }
---- 351,357 ----
- xmlSecErrorsSafeString(xmlSecTransformGetName(transform)),
- "VFY_Begin",
- XMLSEC_ERRORS_R_CRYPTO_FAILED,
-! "error code=%d", PORT_GetError());
- return(-1);
- }
- }
-***************
-*** 368,374 ****
- xmlSecErrorsSafeString(xmlSecTransformGetName(transform)),
- "SGN_Update",
- XMLSEC_ERRORS_R_CRYPTO_FAILED,
-! XMLSEC_ERRORS_NO_MESSAGE);
- return(-1);
- }
- } else {
---- 368,374 ----
- xmlSecErrorsSafeString(xmlSecTransformGetName(transform)),
- "SGN_Update",
- XMLSEC_ERRORS_R_CRYPTO_FAILED,
-! "error code=%d", PORT_GetError());
- return(-1);
- }
- } else {
-***************
-*** 378,384 ****
- xmlSecErrorsSafeString(xmlSecTransformGetName(transform)),
- "VFY_Update",
- XMLSEC_ERRORS_R_CRYPTO_FAILED,
-! XMLSEC_ERRORS_NO_MESSAGE);
- return(-1);
- }
- }
---- 378,384 ----
- xmlSecErrorsSafeString(xmlSecTransformGetName(transform)),
- "VFY_Update",
- XMLSEC_ERRORS_R_CRYPTO_FAILED,
-! "error code=%d", PORT_GetError());
- return(-1);
- }
- }
-***************
-*** 404,410 ****
- xmlSecErrorsSafeString(xmlSecTransformGetName(transform)),
- "SGN_End",
- XMLSEC_ERRORS_R_CRYPTO_FAILED,
-! XMLSEC_ERRORS_NO_MESSAGE);
- return(-1);
- }
-
---- 404,410 ----
- xmlSecErrorsSafeString(xmlSecTransformGetName(transform)),
- "SGN_End",
- XMLSEC_ERRORS_R_CRYPTO_FAILED,
-! "error code=%d", PORT_GetError());
- return(-1);
- }
-
-***************
-*** 459,465 ****
---- 459,469 ----
- *
- ***************************************************************************/
-
-+ #ifdef __MINGW32__ // for runtime-pseudo-reloc
-+ static struct _xmlSecTransformKlass xmlSecNssDsaSha1Klass = {
-+ #else
- static xmlSecTransformKlass xmlSecNssDsaSha1Klass = {
-+ #endif
- /* klass/object sizes */
- sizeof(xmlSecTransformKlass), /* xmlSecSize klassSize */
- xmlSecNssSignatureSize, /* xmlSecSize objSize */
-***************
-*** 506,512 ****
---- 510,520 ----
- * RSA-SHA1 signature transform
- *
- ***************************************************************************/
-+ #ifdef __MINGW32__ // for runtime-pseudo-reloc
-+ static struct _xmlSecTransformKlass xmlSecNssRsaSha1Klass = {
-+ #else
- static xmlSecTransformKlass xmlSecNssRsaSha1Klass = {
-+ #endif
- /* klass/object sizes */
- sizeof(xmlSecTransformKlass), /* xmlSecSize klassSize */
- xmlSecNssSignatureSize, /* xmlSecSize objSize */
-*** misc/xmlsec1-1.2.6/src/nss/symkeys.c Mon Jul 21 05:12:52 2003
---- misc/build/xmlsec1-1.2.6/src/nss/symkeys.c Fri May 11 14:47:20 2007
-***************
-*** 15,192 ****
- #include <stdio.h>
- #include <string.h>
-
- #include <xmlsec/xmlsec.h>
- #include <xmlsec/xmltree.h>
- #include <xmlsec/keys.h>
- #include <xmlsec/keyinfo.h>
- #include <xmlsec/transforms.h>
- #include <xmlsec/errors.h>
-
- #include <xmlsec/nss/crypto.h>
-
- /*****************************************************************************
- *
-! * Symmetic (binary) keys - just a wrapper for xmlSecKeyDataBinary
- *
- ****************************************************************************/
-! static int xmlSecNssSymKeyDataInitialize (xmlSecKeyDataPtr data);
-! static int xmlSecNssSymKeyDataDuplicate (xmlSecKeyDataPtr dst,
-! xmlSecKeyDataPtr src);
-! static void xmlSecNssSymKeyDataFinalize (xmlSecKeyDataPtr data);
-! static int xmlSecNssSymKeyDataXmlRead (xmlSecKeyDataId id,
-! xmlSecKeyPtr key,
-! xmlNodePtr node,
-! xmlSecKeyInfoCtxPtr keyInfoCtx);
-! static int xmlSecNssSymKeyDataXmlWrite (xmlSecKeyDataId id,
-! xmlSecKeyPtr key,
-! xmlNodePtr node,
-! xmlSecKeyInfoCtxPtr keyInfoCtx);
-! static int xmlSecNssSymKeyDataBinRead (xmlSecKeyDataId id,
-! xmlSecKeyPtr key,
-! const xmlSecByte* buf,
-! xmlSecSize bufSize,
-! xmlSecKeyInfoCtxPtr keyInfoCtx);
-! static int xmlSecNssSymKeyDataBinWrite (xmlSecKeyDataId id,
-! xmlSecKeyPtr key,
-! xmlSecByte** buf,
-! xmlSecSize* bufSize,
-! xmlSecKeyInfoCtxPtr keyInfoCtx);
-! static int xmlSecNssSymKeyDataGenerate (xmlSecKeyDataPtr data,
-! xmlSecSize sizeBits,
-! xmlSecKeyDataType type);
-!
-! static xmlSecKeyDataType xmlSecNssSymKeyDataGetType (xmlSecKeyDataPtr data);
-! static xmlSecSize xmlSecNssSymKeyDataGetSize (xmlSecKeyDataPtr data);
-! static void xmlSecNssSymKeyDataDebugDump (xmlSecKeyDataPtr data,
-! FILE* output);
-! static void xmlSecNssSymKeyDataDebugXmlDump (xmlSecKeyDataPtr data,
-! FILE* output);
-! static int xmlSecNssSymKeyDataKlassCheck (xmlSecKeyDataKlass* klass);
-
- #define xmlSecNssSymKeyDataCheckId(data) \
- (xmlSecKeyDataIsValid((data)) && \
- xmlSecNssSymKeyDataKlassCheck((data)->id))
-
- static int
- xmlSecNssSymKeyDataInitialize(xmlSecKeyDataPtr data) {
- xmlSecAssert2(xmlSecNssSymKeyDataCheckId(data), -1);
-!
-! return(xmlSecKeyDataBinaryValueInitialize(data));
- }
-
- static int
- xmlSecNssSymKeyDataDuplicate(xmlSecKeyDataPtr dst, xmlSecKeyDataPtr src) {
- xmlSecAssert2(xmlSecNssSymKeyDataCheckId(dst), -1);
- xmlSecAssert2(xmlSecNssSymKeyDataCheckId(src), -1);
- xmlSecAssert2(dst->id == src->id, -1);
-!
-! return(xmlSecKeyDataBinaryValueDuplicate(dst, src));
- }
-
- static void
- xmlSecNssSymKeyDataFinalize(xmlSecKeyDataPtr data) {
- xmlSecAssert(xmlSecNssSymKeyDataCheckId(data));
-!
-! xmlSecKeyDataBinaryValueFinalize(data);
- }
-
- static int
- xmlSecNssSymKeyDataXmlRead(xmlSecKeyDataId id, xmlSecKeyPtr key,
-! xmlNodePtr node, xmlSecKeyInfoCtxPtr keyInfoCtx) {
-! xmlSecAssert2(xmlSecNssSymKeyDataKlassCheck(id), -1);
-
-! return(xmlSecKeyDataBinaryValueXmlRead(id, key, node, keyInfoCtx));
- }
-
- static int
- xmlSecNssSymKeyDataXmlWrite(xmlSecKeyDataId id, xmlSecKeyPtr key,
-! xmlNodePtr node, xmlSecKeyInfoCtxPtr keyInfoCtx) {
- xmlSecAssert2(xmlSecNssSymKeyDataKlassCheck(id), -1);
-
-! return(xmlSecKeyDataBinaryValueXmlWrite(id, key, node, keyInfoCtx));
- }
-
- static int
- xmlSecNssSymKeyDataBinRead(xmlSecKeyDataId id, xmlSecKeyPtr key,
-! const xmlSecByte* buf, xmlSecSize bufSize,
-! xmlSecKeyInfoCtxPtr keyInfoCtx) {
-! xmlSecAssert2(xmlSecNssSymKeyDataKlassCheck(id), -1);
-
-! return(xmlSecKeyDataBinaryValueBinRead(id, key, buf, bufSize, keyInfoCtx));
- }
-
- static int
- xmlSecNssSymKeyDataBinWrite(xmlSecKeyDataId id, xmlSecKeyPtr key,
-! xmlSecByte** buf, xmlSecSize* bufSize,
-! xmlSecKeyInfoCtxPtr keyInfoCtx) {
- xmlSecAssert2(xmlSecNssSymKeyDataKlassCheck(id), -1);
-
-! return(xmlSecKeyDataBinaryValueBinWrite(id, key, buf, bufSize, keyInfoCtx));
- }
-
- static int
- xmlSecNssSymKeyDataGenerate(xmlSecKeyDataPtr data, xmlSecSize sizeBits, xmlSecKeyDataType type ATTRIBUTE_UNUSED) {
-! xmlSecBufferPtr buffer;
-!
- xmlSecAssert2(xmlSecNssSymKeyDataCheckId(data), -1);
- xmlSecAssert2(sizeBits > 0, -1);
-
-! buffer = xmlSecKeyDataBinaryValueGetBuffer(data);
-! xmlSecAssert2(buffer != NULL, -1);
-!
-! return(xmlSecNssGenerateRandom(buffer, (sizeBits + 7) / 8));
- }
-
- static xmlSecKeyDataType
- xmlSecNssSymKeyDataGetType(xmlSecKeyDataPtr data) {
-! xmlSecBufferPtr buffer;
-
- xmlSecAssert2(xmlSecNssSymKeyDataCheckId(data), xmlSecKeyDataTypeUnknown);
-
-! buffer = xmlSecKeyDataBinaryValueGetBuffer(data);
-! xmlSecAssert2(buffer != NULL, xmlSecKeyDataTypeUnknown);
-
-! return((xmlSecBufferGetSize(buffer) > 0) ? xmlSecKeyDataTypeSymmetric : xmlSecKeyDataTypeUnknown);
- }
-
- static xmlSecSize
- xmlSecNssSymKeyDataGetSize(xmlSecKeyDataPtr data) {
- xmlSecAssert2(xmlSecNssSymKeyDataCheckId(data), 0);
-!
-! return(xmlSecKeyDataBinaryValueGetSize(data));
- }
-
- static void
- xmlSecNssSymKeyDataDebugDump(xmlSecKeyDataPtr data, FILE* output) {
- xmlSecAssert(xmlSecNssSymKeyDataCheckId(data));
-
-! xmlSecKeyDataBinaryValueDebugDump(data, output);
- }
-
- static void
- xmlSecNssSymKeyDataDebugXmlDump(xmlSecKeyDataPtr data, FILE* output) {
- xmlSecAssert(xmlSecNssSymKeyDataCheckId(data));
-
-! xmlSecKeyDataBinaryValueDebugXmlDump(data, output);
- }
-
- static int
- xmlSecNssSymKeyDataKlassCheck(xmlSecKeyDataKlass* klass) {
- #ifndef XMLSEC_NO_DES
- if(klass == xmlSecNssKeyDataDesId) {
-! return(1);
- }
- #endif /* XMLSEC_NO_DES */
-
- #ifndef XMLSEC_NO_AES
- if(klass == xmlSecNssKeyDataAesId) {
-! return(1);
- }
- #endif /* XMLSEC_NO_AES */
-
- #ifndef XMLSEC_NO_HMAC
- if(klass == xmlSecNssKeyDataHmacId) {
-! return(1);
- }
- #endif /* XMLSEC_NO_HMAC */
-
---- 15,851 ----
- #include <stdio.h>
- #include <string.h>
-
-+ #include <pk11func.h>
-+ #include <nss.h>
-+
- #include <xmlsec/xmlsec.h>
- #include <xmlsec/xmltree.h>
-+ #include <xmlsec/base64.h>
- #include <xmlsec/keys.h>
- #include <xmlsec/keyinfo.h>
- #include <xmlsec/transforms.h>
- #include <xmlsec/errors.h>
-
- #include <xmlsec/nss/crypto.h>
-+ #include <xmlsec/nss/ciphers.h>
-+ #include <xmlsec/nss/tokens.h>
-
- /*****************************************************************************
- *
-! * Symmetic (binary) keys - a wrapper over slot information and PK11SymKey
- *
- ****************************************************************************/
-! typedef struct _xmlSecNssSymKeyDataCtx xmlSecNssSymKeyDataCtx ;
-! typedef struct _xmlSecNssSymKeyDataCtx* xmlSecNssSymKeyDataCtxPtr ;
-!
-! struct _xmlSecNssSymKeyDataCtx {
-! CK_MECHANISM_TYPE cipher ; /* the symmetic key mechanism */
-! PK11SlotInfo* slot ; /* the key resident slot */
-! PK11SymKey* symkey ; /* the symmetic key */
-! } ;
-!
-! #define xmlSecNssSymKeyDataSize \
-! ( sizeof( xmlSecKeyData ) + sizeof( xmlSecNssSymKeyDataCtx ) )
-!
-! #define xmlSecNssSymKeyDataGetCtx( data ) \
-! ( ( xmlSecNssSymKeyDataCtxPtr )( ( ( xmlSecByte* )( data ) ) + sizeof( xmlSecKeyData ) ) )
-!
-!
-! static int xmlSecNssSymKeyDataInitialize (xmlSecKeyDataPtr data);
-! static int xmlSecNssSymKeyDataDuplicate (xmlSecKeyDataPtr dst,
-! xmlSecKeyDataPtr src);
-! static void xmlSecNssSymKeyDataFinalize (xmlSecKeyDataPtr data);
-! static int xmlSecNssSymKeyDataXmlRead (xmlSecKeyDataId id,
-! xmlSecKeyPtr key,
-! xmlNodePtr node,
-! xmlSecKeyInfoCtxPtr keyInfoCtx);
-! static int xmlSecNssSymKeyDataXmlWrite (xmlSecKeyDataId id,
-! xmlSecKeyPtr key,
-! xmlNodePtr node,
-! xmlSecKeyInfoCtxPtr keyInfoCtx);
-! static int xmlSecNssSymKeyDataBinRead (xmlSecKeyDataId id,
-! xmlSecKeyPtr key,
-! const xmlSecByte* buf,
-! xmlSecSize bufSize,
-! xmlSecKeyInfoCtxPtr keyInfoCtx);
-! static int xmlSecNssSymKeyDataBinWrite (xmlSecKeyDataId id,
-! xmlSecKeyPtr key,
-! xmlSecByte** buf,
-! xmlSecSize* bufSize,
-! xmlSecKeyInfoCtxPtr keyInfoCtx);
-! static int xmlSecNssSymKeyDataGenerate (xmlSecKeyDataPtr data,
-! xmlSecSize sizeBits,
-! xmlSecKeyDataType type);
-!
-! static xmlSecKeyDataType xmlSecNssSymKeyDataGetType (xmlSecKeyDataPtr data);
-! static xmlSecSize xmlSecNssSymKeyDataGetSize (xmlSecKeyDataPtr data);
-! static void xmlSecNssSymKeyDataDebugDump (xmlSecKeyDataPtr data,
-! FILE* output);
-! static void xmlSecNssSymKeyDataDebugXmlDump (xmlSecKeyDataPtr data,
-! FILE* output);
-! static int xmlSecNssSymKeyDataKlassCheck (xmlSecKeyDataKlass* klass);
-
- #define xmlSecNssSymKeyDataCheckId(data) \
- (xmlSecKeyDataIsValid((data)) && \
- xmlSecNssSymKeyDataKlassCheck((data)->id))
-
-+ /**
-+ * xmlSecNssSymKeyDataAdoptKey:
-+ * @data: the pointer to symmetric key data.
-+ * @symkey: the symmetric key
-+ *
-+ * Set the value of symmetric key data.
-+ *
-+ * Returns 0 on success or a negative value if an error occurs.
-+ */
-+ int
-+ xmlSecNssSymKeyDataAdoptKey(
-+ xmlSecKeyDataPtr data ,
-+ PK11SymKey* symkey
-+ ) {
-+ xmlSecNssSymKeyDataCtxPtr context = NULL ;
-+
-+ xmlSecAssert2( xmlSecNssSymKeyDataCheckId( data ), -1 ) ;
-+ xmlSecAssert2( xmlSecKeyDataCheckSize( data, xmlSecNssSymKeyDataSize ), -1 ) ;
-+ xmlSecAssert2( symkey != NULL, -1 ) ;
-+
-+ context = xmlSecNssSymKeyDataGetCtx( data ) ;
-+ xmlSecAssert2(context != NULL, -1);
-+
-+ context->cipher = PK11_GetMechanism( symkey ) ;
-+
-+ if( context->slot != NULL ) {
-+ PK11_FreeSlot( context->slot ) ;
-+ context->slot = NULL ;
-+ }
-+ context->slot = PK11_GetSlotFromKey( symkey ) ;
-+
-+ if( context->symkey != NULL ) {
-+ PK11_FreeSymKey( context->symkey ) ;
-+ context->symkey = NULL ;
-+ }
-+ context->symkey = PK11_ReferenceSymKey( symkey ) ;
-+
-+ return 0 ;
-+ }
-+
-+ xmlSecKeyDataPtr xmlSecNssSymKeyDataKeyAdopt(
-+ PK11SymKey* symKey
-+ ) {
-+ xmlSecKeyDataPtr data = NULL ;
-+ CK_MECHANISM_TYPE mechanism = CKM_INVALID_MECHANISM ;
-+
-+ xmlSecAssert2( symKey != NULL , NULL ) ;
-+
-+ mechanism = PK11_GetMechanism( symKey ) ;
-+ switch( mechanism ) {
-+ case CKM_DES3_KEY_GEN :
-+ case CKM_DES3_CBC :
-+ case CKM_DES3_MAC :
-+ data = xmlSecKeyDataCreate( xmlSecNssKeyDataDesId ) ;
-+ if( data == NULL ) {
-+ xmlSecError( XMLSEC_ERRORS_HERE ,
-+ NULL ,
-+ "xmlSecKeyDataCreate" ,
-+ XMLSEC_ERRORS_R_CRYPTO_FAILED ,
-+ "xmlSecNssKeyDataDesId" ) ;
-+ return NULL ;
-+ }
-+ break ;
-+ case CKM_AES_KEY_GEN :
-+ case CKM_AES_CBC :
-+ case CKM_AES_MAC :
-+ data = xmlSecKeyDataCreate( xmlSecNssKeyDataAesId ) ;
-+ if( data == NULL ) {
-+ xmlSecError( XMLSEC_ERRORS_HERE ,
-+ NULL ,
-+ "xmlSecKeyDataCreate" ,
-+ XMLSEC_ERRORS_R_CRYPTO_FAILED ,
-+ "xmlSecNssKeyDataDesId" ) ;
-+ return NULL ;
-+ }
-+ break ;
-+ default :
-+ xmlSecError( XMLSEC_ERRORS_HERE ,
-+ NULL ,
-+ NULL ,
-+ XMLSEC_ERRORS_R_CRYPTO_FAILED ,
-+ "Unsupported mechanism" ) ;
-+ return NULL ;
-+ }
-+
-+ if( xmlSecNssSymKeyDataAdoptKey( data , symKey ) < 0 ) {
-+ xmlSecError( XMLSEC_ERRORS_HERE ,
-+ NULL ,
-+ "xmlSecNssSymKeyDataAdoptKey" ,
-+ XMLSEC_ERRORS_R_CRYPTO_FAILED ,
-+ XMLSEC_ERRORS_NO_MESSAGE ) ;
-+
-+ xmlSecKeyDataDestroy( data ) ;
-+ return NULL ;
-+ }
-+
-+ return data ;
-+ }
-+
-+
-+ PK11SymKey*
-+ xmlSecNssSymKeyDataGetKey(
-+ xmlSecKeyDataPtr data
-+ ) {
-+ xmlSecNssSymKeyDataCtxPtr ctx;
-+ PK11SymKey* symkey ;
-+
-+ xmlSecAssert2(xmlSecNssSymKeyDataCheckId(data), NULL);
-+ xmlSecAssert2(xmlSecKeyDataCheckSize(data, xmlSecNssSymKeyDataSize), NULL);
-+
-+ ctx = xmlSecNssSymKeyDataGetCtx(data);
-+ xmlSecAssert2(ctx != NULL, NULL);
-+
-+ if( ctx->symkey != NULL ) {
-+ symkey = PK11_ReferenceSymKey( ctx->symkey ) ;
-+ } else {
-+ symkey = NULL ;
-+ }
-+
-+ return(symkey);
-+ }
-+
- static int
- xmlSecNssSymKeyDataInitialize(xmlSecKeyDataPtr data) {
-+ xmlSecNssSymKeyDataCtxPtr ctx;
-+
- xmlSecAssert2(xmlSecNssSymKeyDataCheckId(data), -1);
-! xmlSecAssert2(xmlSecKeyDataCheckSize(data, xmlSecNssSymKeyDataSize), -1);
-!
-! ctx = xmlSecNssSymKeyDataGetCtx(data);
-! xmlSecAssert2(ctx != NULL, -1);
-!
-! memset( ctx, 0, sizeof(xmlSecNssSymKeyDataCtx));
-!
-! /* Set the block cipher mechanism */
-! #ifndef XMLSEC_NO_DES
-! if(xmlSecKeyDataCheckId(data, xmlSecNssKeyDataDesId)) {
-! ctx->cipher = CKM_DES3_KEY_GEN;
-! } else
-! #endif /* XMLSEC_NO_DES */
-!
-! #ifndef XMLSEC_NO_AES
-! if(xmlSecKeyDataCheckId(data, xmlSecNssKeyDataDesId)) {
-! ctx->cipher = CKM_AES_KEY_GEN;
-! } else
-! #endif /* XMLSEC_NO_AES */
-!
-! if(1) {
-! xmlSecError( XMLSEC_ERRORS_HERE ,
-! xmlSecErrorsSafeString(xmlSecKeyDataGetName(data)),
-! NULL ,
-! XMLSEC_ERRORS_R_XMLSEC_FAILED ,
-! "Unsupported block cipher" ) ;
-! return(-1) ;
-! }
-!
-! return(0);
- }
-
- static int
- xmlSecNssSymKeyDataDuplicate(xmlSecKeyDataPtr dst, xmlSecKeyDataPtr src) {
-+ xmlSecNssSymKeyDataCtxPtr ctxDst;
-+ xmlSecNssSymKeyDataCtxPtr ctxSrc;
-+
- xmlSecAssert2(xmlSecNssSymKeyDataCheckId(dst), -1);
-+ xmlSecAssert2(xmlSecKeyDataCheckSize(dst, xmlSecNssSymKeyDataSize), -1);
- xmlSecAssert2(xmlSecNssSymKeyDataCheckId(src), -1);
-+ xmlSecAssert2(xmlSecKeyDataCheckSize(src, xmlSecNssSymKeyDataSize), -1);
- xmlSecAssert2(dst->id == src->id, -1);
-!
-! ctxDst = xmlSecNssSymKeyDataGetCtx(dst);
-! xmlSecAssert2(ctxDst != NULL, -1);
-!
-! ctxSrc = xmlSecNssSymKeyDataGetCtx(src);
-! xmlSecAssert2(ctxSrc != NULL, -1);
-!
-! ctxDst->cipher = ctxSrc->cipher ;
-!
-! if( ctxSrc->slot != NULL ) {
-! if( ctxDst->slot != NULL && ctxDst->slot != ctxSrc->slot ) {
-! PK11_FreeSlot( ctxDst->slot ) ;
-! ctxDst->slot = NULL ;
-! }
-!
-! if( ctxDst->slot == NULL && ctxSrc->slot != NULL )
-! ctxDst->slot = PK11_ReferenceSlot( ctxSrc->slot ) ;
-! } else {
-! if( ctxDst->slot != NULL ) {
-! PK11_FreeSlot( ctxDst->slot ) ;
-! ctxDst->slot = NULL ;
-! }
-! }
-!
-! if( ctxSrc->symkey != NULL ) {
-! if( ctxDst->symkey != NULL && ctxDst->symkey != ctxSrc->symkey ) {
-! PK11_FreeSymKey( ctxDst->symkey ) ;
-! ctxDst->symkey = NULL ;
-! }
-!
-! if( ctxDst->symkey == NULL && ctxSrc->symkey != NULL )
-! ctxDst->symkey = PK11_ReferenceSymKey( ctxSrc->symkey ) ;
-! } else {
-! if( ctxDst->symkey != NULL ) {
-! PK11_FreeSymKey( ctxDst->symkey ) ;
-! ctxDst->symkey = NULL ;
-! }
-! }
-!
-! return(0);
- }
-
- static void
- xmlSecNssSymKeyDataFinalize(xmlSecKeyDataPtr data) {
-+ xmlSecNssSymKeyDataCtxPtr ctx;
-+
- xmlSecAssert(xmlSecNssSymKeyDataCheckId(data));
-! xmlSecAssert(xmlSecKeyDataCheckSize(data, xmlSecNssSymKeyDataSize));
-!
-! ctx = xmlSecNssSymKeyDataGetCtx(data);
-! xmlSecAssert(ctx != NULL);
-!
-! if( ctx->slot != NULL ) {
-! PK11_FreeSlot( ctx->slot ) ;
-! ctx->slot = NULL ;
-! }
-!
-! if( ctx->symkey != NULL ) {
-! PK11_FreeSymKey( ctx->symkey ) ;
-! ctx->symkey = NULL ;
-! }
-!
-! ctx->cipher = CKM_INVALID_MECHANISM ;
- }
-
- static int
- xmlSecNssSymKeyDataXmlRead(xmlSecKeyDataId id, xmlSecKeyPtr key,
-! xmlNodePtr node, xmlSecKeyInfoCtxPtr keyInfoCtx) {
-! PK11SymKey* symKey ;
-! PK11SlotInfo* slot ;
-! xmlSecBufferPtr keyBuf;
-! xmlSecSize len;
-! xmlSecKeyDataPtr data;
-! xmlSecNssSymKeyDataCtxPtr ctx;
-! SECItem keyItem ;
-! int ret;
-!
-! xmlSecAssert2(id != xmlSecKeyDataIdUnknown, -1);
-! xmlSecAssert2(key != NULL, -1);
-! xmlSecAssert2(node != NULL, -1);
-! xmlSecAssert2(keyInfoCtx != NULL, -1);
-!
-! /* Create a new KeyData from a id */
-! data = xmlSecKeyDataCreate(id);
-! if(data == NULL ) {
-! xmlSecError(XMLSEC_ERRORS_HERE,
-! xmlSecErrorsSafeString(xmlSecKeyDataKlassGetName(id)),
-! "xmlSecKeyDataCreate",
-! XMLSEC_ERRORS_R_XMLSEC_FAILED,
-! XMLSEC_ERRORS_NO_MESSAGE);
-! return(-1);
-! }
-!
-! ctx = xmlSecNssSymKeyDataGetCtx(data);
-! xmlSecAssert2(ctx != NULL, -1);
-!
-! /* Create a buffer for raw symmetric key value */
-! if( ( keyBuf = xmlSecBufferCreate( 128 ) ) == NULL ) {
-! xmlSecError( XMLSEC_ERRORS_HERE ,
-! xmlSecErrorsSafeString(xmlSecKeyDataKlassGetName(id)),
-! "xmlSecBufferCreate" ,
-! XMLSEC_ERRORS_R_XMLSEC_FAILED ,
-! XMLSEC_ERRORS_NO_MESSAGE ) ;
-! xmlSecKeyDataDestroy( data ) ;
-! return(-1) ;
-! }
-!
-! /* Read the raw key value */
-! if( xmlSecBufferBase64NodeContentRead( keyBuf , node ) < 0 ) {
-! xmlSecError( XMLSEC_ERRORS_HERE ,
-! xmlSecErrorsSafeString(xmlSecKeyDataKlassGetName(id)),
-! xmlSecErrorsSafeString(xmlSecNodeGetName(node)),
-! XMLSEC_ERRORS_R_XMLSEC_FAILED ,
-! XMLSEC_ERRORS_NO_MESSAGE ) ;
-!
-! xmlSecBufferDestroy( keyBuf ) ;
-! xmlSecKeyDataDestroy( data ) ;
-! return(-1) ;
-! }
-!
-! /* Get slot */
-! slot = xmlSecNssSlotGet(ctx->cipher);
-! if( slot == NULL ) {
-! xmlSecError( XMLSEC_ERRORS_HERE ,
-! xmlSecErrorsSafeString(xmlSecKeyDataKlassGetName(id)),
-! "xmlSecNssSlotGet" ,
-! XMLSEC_ERRORS_R_XMLSEC_FAILED ,
-! XMLSEC_ERRORS_NO_MESSAGE ) ;
-!
-! xmlSecBufferDestroy( keyBuf ) ;
-! xmlSecKeyDataDestroy( data ) ;
-! return(-1) ;
-! }
-!
-! /* Wrap the raw key value SECItem */
-! keyItem.type = siBuffer ;
-! keyItem.data = xmlSecBufferGetData( keyBuf ) ;
-! keyItem.len = xmlSecBufferGetSize( keyBuf ) ;
-!
-! /* Import the raw key into slot temporalily and get the key handler*/
-! symKey = PK11_ImportSymKey(slot, ctx->cipher, PK11_OriginGenerated, CKA_VALUE, &keyItem, NULL ) ;
-! if( symKey == NULL ) {
-! xmlSecError( XMLSEC_ERRORS_HERE ,
-! xmlSecErrorsSafeString(xmlSecKeyDataKlassGetName(id)),
-! "PK11_ImportSymKey" ,
-! XMLSEC_ERRORS_R_XMLSEC_FAILED ,
-! XMLSEC_ERRORS_NO_MESSAGE ) ;
-!
-! PK11_FreeSlot( slot ) ;
-! xmlSecBufferDestroy( keyBuf ) ;
-! xmlSecKeyDataDestroy( data ) ;
-! return(-1) ;
-! }
-! PK11_FreeSlot( slot ) ;
-!
-! /* raw key material has been copied into symKey, it isn't used any more */
-! xmlSecBufferDestroy( keyBuf ) ;
-
-! /* Adopt the symmetric key into key data */
-! ret = xmlSecNssSymKeyDataAdoptKey(data, symKey);
-! if(ret < 0) {
-! xmlSecError(XMLSEC_ERRORS_HERE,
-! xmlSecErrorsSafeString(xmlSecKeyDataKlassGetName(id)),
-! "xmlSecKeyDataBinaryValueSetBuffer",
-! XMLSEC_ERRORS_R_XMLSEC_FAILED,
-! XMLSEC_ERRORS_NO_MESSAGE);
-! PK11_FreeSymKey( symKey ) ;
-! xmlSecKeyDataDestroy( data ) ;
-! return(-1);
-! }
-! /* symKey has been duplicated into data, it isn't used any more */
-! PK11_FreeSymKey( symKey ) ;
-!
-! /* Check value */
-! if(xmlSecKeyReqMatchKeyValue(&(keyInfoCtx->keyReq), data) != 1) {
-! xmlSecError(XMLSEC_ERRORS_HERE,
-! xmlSecErrorsSafeString(xmlSecKeyDataKlassGetName(id)),
-! "xmlSecKeyReqMatchKeyValue",
-! XMLSEC_ERRORS_R_XMLSEC_FAILED,
-! XMLSEC_ERRORS_NO_MESSAGE);
-! xmlSecKeyDataDestroy( data ) ;
-! return(0);
-! }
-!
-! ret = xmlSecKeySetValue(key, data);
-! if(ret < 0) {
-! xmlSecError(XMLSEC_ERRORS_HERE,
-! xmlSecErrorsSafeString(xmlSecKeyDataKlassGetName(id)),
-! "xmlSecKeySetValue",
-! XMLSEC_ERRORS_R_XMLSEC_FAILED,
-! XMLSEC_ERRORS_NO_MESSAGE);
-! xmlSecKeyDataDestroy( data ) ;
-! return(-1);
-! }
-!
-! return(0);
- }
-
- static int
- xmlSecNssSymKeyDataXmlWrite(xmlSecKeyDataId id, xmlSecKeyPtr key,
-! xmlNodePtr node, xmlSecKeyInfoCtxPtr keyInfoCtx) {
-! PK11SymKey* symKey ;
-!
- xmlSecAssert2(xmlSecNssSymKeyDataKlassCheck(id), -1);
-+ xmlSecAssert2(key != NULL, -1);
-+ xmlSecAssert2(node != NULL, -1);
-+ xmlSecAssert2(keyInfoCtx != NULL, -1);
-+
-+ /* Get symmetric key from "key" */
-+ symKey = xmlSecNssSymKeyDataGetKey(xmlSecKeyGetValue(key));
-+ if( symKey != NULL ) {
-+ SECItem* keyItem ;
-+ xmlSecBufferPtr keyBuf ;
-+
-+ /* Extract raw key data from symmetric key */
-+ if( PK11_ExtractKeyValue( symKey ) != SECSuccess ) {
-+ xmlSecError(XMLSEC_ERRORS_HERE,
-+ xmlSecErrorsSafeString(xmlSecKeyDataKlassGetName(id)),
-+ "PK11_ExtractKeyValue",
-+ XMLSEC_ERRORS_R_XMLSEC_FAILED,
-+ XMLSEC_ERRORS_NO_MESSAGE);
-+ PK11_FreeSymKey( symKey ) ;
-+ return(-1);
-+ }
-+
-+ /* Get raw key data from "symKey" */
-+ keyItem = PK11_GetKeyData( symKey ) ;
-+ if(keyItem == NULL) {
-+ xmlSecError(XMLSEC_ERRORS_HERE,
-+ xmlSecErrorsSafeString(xmlSecKeyDataKlassGetName(id)),
-+ "PK11_GetKeyData",
-+ XMLSEC_ERRORS_R_XMLSEC_FAILED,
-+ XMLSEC_ERRORS_NO_MESSAGE);
-+ PK11_FreeSymKey( symKey ) ;
-+ return(-1);
-+ }
-+
-+ /* Create key data buffer with raw kwy material */
-+ keyBuf = xmlSecBufferCreate(keyItem->len) ;
-+ if(keyBuf == NULL) {
-+ xmlSecError(XMLSEC_ERRORS_HERE,
-+ xmlSecErrorsSafeString(xmlSecKeyDataKlassGetName(id)),
-+ "xmlSecBufferCreate",
-+ XMLSEC_ERRORS_R_XMLSEC_FAILED,
-+ XMLSEC_ERRORS_NO_MESSAGE);
-+ PK11_FreeSymKey( symKey ) ;
-+ return(-1);
-+ }
-+
-+ xmlSecBufferSetData( keyBuf , keyItem->data , keyItem->len ) ;
-+
-+ /* Write raw key material into current xml node */
-+ if( xmlSecBufferBase64NodeContentWrite( keyBuf, node, XMLSEC_BASE64_LINESIZE ) < 0 ) {
-+ xmlSecError(XMLSEC_ERRORS_HERE,
-+ xmlSecErrorsSafeString(xmlSecKeyDataKlassGetName(id)),
-+ "xmlSecBufferBase64NodeContentWrite",
-+ XMLSEC_ERRORS_R_XMLSEC_FAILED,
-+ XMLSEC_ERRORS_NO_MESSAGE);
-+ xmlSecBufferDestroy(keyBuf);
-+ PK11_FreeSymKey( symKey ) ;
-+ return(-1);
-+ }
-+ xmlSecBufferDestroy(keyBuf);
-+ PK11_FreeSymKey( symKey ) ;
-+ }
-
-! return 0 ;
- }
-
- static int
- xmlSecNssSymKeyDataBinRead(xmlSecKeyDataId id, xmlSecKeyPtr key,
-! const xmlSecByte* buf, xmlSecSize bufSize,
-! xmlSecKeyInfoCtxPtr keyInfoCtx) {
-! PK11SymKey* symKey ;
-! PK11SlotInfo* slot ;
-! xmlSecKeyDataPtr data;
-! xmlSecNssSymKeyDataCtxPtr ctx;
-! SECItem keyItem ;
-! int ret;
-
-! xmlSecAssert2(id != xmlSecKeyDataIdUnknown, -1);
-! xmlSecAssert2(key != NULL, -1);
-! xmlSecAssert2(buf != NULL, -1);
-! xmlSecAssert2(bufSize != 0, -1);
-! xmlSecAssert2(keyInfoCtx != NULL, -1);
-!
-! /* Create a new KeyData from a id */
-! data = xmlSecKeyDataCreate(id);
-! if(data == NULL ) {
-! xmlSecError(XMLSEC_ERRORS_HERE,
-! xmlSecErrorsSafeString(xmlSecKeyDataKlassGetName(id)),
-! "xmlSecKeyDataCreate",
-! XMLSEC_ERRORS_R_XMLSEC_FAILED,
-! XMLSEC_ERRORS_NO_MESSAGE);
-! return(-1);
-! }
-!
-! ctx = xmlSecNssSymKeyDataGetCtx(data);
-! xmlSecAssert2(ctx != NULL, -1);
-!
-! /* Get slot */
-! slot = xmlSecNssSlotGet(ctx->cipher);
-! if( slot == NULL ) {
-! xmlSecError( XMLSEC_ERRORS_HERE ,
-! xmlSecErrorsSafeString(xmlSecKeyDataKlassGetName(id)),
-! "xmlSecNssSlotGet" ,
-! XMLSEC_ERRORS_R_XMLSEC_FAILED ,
-! XMLSEC_ERRORS_NO_MESSAGE ) ;
-! xmlSecKeyDataDestroy( data ) ;
-! return(-1) ;
-! }
-!
-! /* Wrap the raw key value SECItem */
-! keyItem.type = siBuffer ;
-! keyItem.data = buf ;
-! keyItem.len = bufSize ;
-!
-! /* Import the raw key into slot temporalily and get the key handler*/
-! symKey = PK11_ImportSymKey(slot, ctx->cipher, PK11_OriginGenerated, CKA_VALUE, &keyItem, NULL ) ;
-! if( symKey == NULL ) {
-! xmlSecError( XMLSEC_ERRORS_HERE ,
-! xmlSecErrorsSafeString(xmlSecKeyDataKlassGetName(id)),
-! "PK11_ImportSymKey" ,
-! XMLSEC_ERRORS_R_XMLSEC_FAILED ,
-! XMLSEC_ERRORS_NO_MESSAGE ) ;
-! PK11_FreeSlot( slot ) ;
-! xmlSecKeyDataDestroy( data ) ;
-! return(-1) ;
-! }
-!
-! /* Adopt the symmetric key into key data */
-! ret = xmlSecNssSymKeyDataAdoptKey(data, symKey);
-! if(ret < 0) {
-! xmlSecError(XMLSEC_ERRORS_HERE,
-! xmlSecErrorsSafeString(xmlSecKeyDataKlassGetName(id)),
-! "xmlSecKeyDataBinaryValueSetBuffer",
-! XMLSEC_ERRORS_R_XMLSEC_FAILED,
-! XMLSEC_ERRORS_NO_MESSAGE ) ;
-! PK11_FreeSymKey( symKey ) ;
-! PK11_FreeSlot( slot ) ;
-! xmlSecKeyDataDestroy( data ) ;
-! return(-1);
-! }
-! /* symKey has been duplicated into data, it isn't used any more */
-! PK11_FreeSymKey( symKey ) ;
-! PK11_FreeSlot( slot ) ;
-!
-! /* Check value */
-! if(xmlSecKeyReqMatchKeyValue(&(keyInfoCtx->keyReq), data) != 1) {
-! xmlSecError(XMLSEC_ERRORS_HERE,
-! xmlSecErrorsSafeString(xmlSecKeyDataKlassGetName(id)),
-! "xmlSecKeyReqMatchKeyValue",
-! XMLSEC_ERRORS_R_XMLSEC_FAILED,
-! XMLSEC_ERRORS_NO_MESSAGE);
-! xmlSecKeyDataDestroy( data ) ;
-! return(0);
-! }
-!
-! ret = xmlSecKeySetValue(key, data);
-! if(ret < 0) {
-! xmlSecError(XMLSEC_ERRORS_HERE,
-! xmlSecErrorsSafeString(xmlSecKeyDataKlassGetName(id)),
-! "xmlSecKeySetValue",
-! XMLSEC_ERRORS_R_XMLSEC_FAILED,
-! XMLSEC_ERRORS_NO_MESSAGE);
-! xmlSecKeyDataDestroy( data ) ;
-! return(-1);
-! }
-!
-! return(0);
- }
-
- static int
- xmlSecNssSymKeyDataBinWrite(xmlSecKeyDataId id, xmlSecKeyPtr key,
-! xmlSecByte** buf, xmlSecSize* bufSize,
-! xmlSecKeyInfoCtxPtr keyInfoCtx) {
-! PK11SymKey* symKey ;
-!
- xmlSecAssert2(xmlSecNssSymKeyDataKlassCheck(id), -1);
-+ xmlSecAssert2(key != NULL, -1);
-+ xmlSecAssert2(buf != NULL, -1);
-+ xmlSecAssert2(bufSize != 0, -1);
-+ xmlSecAssert2(keyInfoCtx != NULL, -1);
-+
-+ /* Get symmetric key from "key" */
-+ symKey = xmlSecNssSymKeyDataGetKey(xmlSecKeyGetValue(key));
-+ if( symKey != NULL ) {
-+ SECItem* keyItem ;
-+
-+ /* Extract raw key data from symmetric key */
-+ if( PK11_ExtractKeyValue( symKey ) != SECSuccess ) {
-+ xmlSecError(XMLSEC_ERRORS_HERE,
-+ xmlSecErrorsSafeString(xmlSecKeyDataKlassGetName(id)),
-+ "PK11_ExtractKeyValue",
-+ XMLSEC_ERRORS_R_XMLSEC_FAILED,
-+ XMLSEC_ERRORS_NO_MESSAGE);
-+ PK11_FreeSymKey( symKey ) ;
-+ return(-1);
-+ }
-+
-+ /* Get raw key data from "symKey" */
-+ keyItem = PK11_GetKeyData( symKey ) ;
-+ if(keyItem == NULL) {
-+ xmlSecError(XMLSEC_ERRORS_HERE,
-+ xmlSecErrorsSafeString(xmlSecKeyDataKlassGetName(id)),
-+ "PK11_GetKeyData",
-+ XMLSEC_ERRORS_R_XMLSEC_FAILED,
-+ XMLSEC_ERRORS_NO_MESSAGE);
-+ PK11_FreeSymKey( symKey ) ;
-+ return(-1);
-+ }
-+
-+ *bufSize = keyItem->len;
-+ *buf = ( xmlSecByte* )xmlMalloc( *bufSize );
-+ if( *buf == NULL ) {
-+ xmlSecError(XMLSEC_ERRORS_HERE,
-+ xmlSecErrorsSafeString(xmlSecKeyDataKlassGetName(id)),
-+ NULL,
-+ XMLSEC_ERRORS_R_XMLSEC_FAILED,
-+ XMLSEC_ERRORS_NO_MESSAGE);
-+ PK11_FreeSymKey( symKey ) ;
-+ return(-1);
-+ }
-+
-+ memcpy((*buf), keyItem->data, (*bufSize));
-+ PK11_FreeSymKey( symKey ) ;
-+ }
-
-! return 0 ;
- }
-
- static int
- xmlSecNssSymKeyDataGenerate(xmlSecKeyDataPtr data, xmlSecSize sizeBits, xmlSecKeyDataType type ATTRIBUTE_UNUSED) {
-! PK11SymKey* symkey ;
-! PK11SlotInfo* slot ;
-! xmlSecNssSymKeyDataCtxPtr ctx;
-! int ret;
-!
- xmlSecAssert2(xmlSecNssSymKeyDataCheckId(data), -1);
- xmlSecAssert2(sizeBits > 0, -1);
-
-! ctx = xmlSecNssSymKeyDataGetCtx(data);
-! xmlSecAssert2(ctx != NULL, -1);
-!
-! if( sizeBits % 8 != 0 ) {
-! xmlSecError(XMLSEC_ERRORS_HERE,
-! xmlSecErrorsSafeString(xmlSecKeyDataGetName(data)),
-! NULL,
-! XMLSEC_ERRORS_R_XMLSEC_FAILED,
-! "Symmetric key size must be octuple");
-! return(-1);
-! }
-!
-! /* Get slot */
-! slot = xmlSecNssSlotGet(ctx->cipher);
-! if( slot == NULL ) {
-! xmlSecError( XMLSEC_ERRORS_HERE ,
-! xmlSecErrorsSafeString(xmlSecKeyDataGetName(data)),
-! "xmlSecNssSlotGet" ,
-! XMLSEC_ERRORS_R_XMLSEC_FAILED ,
-! XMLSEC_ERRORS_NO_MESSAGE ) ;
-! return(-1) ;
-! }
-!
-! if( PK11_Authenticate( slot, PR_FALSE , NULL ) != SECSuccess ) {
-! xmlSecError( XMLSEC_ERRORS_HERE ,
-! xmlSecErrorsSafeString( xmlSecKeyDataGetName( data ) ) ,
-! "PK11_Authenticate" ,
-! XMLSEC_ERRORS_R_CRYPTO_FAILED ,
-! XMLSEC_ERRORS_NO_MESSAGE ) ;
-! PK11_FreeSlot( slot ) ;
-! return -1 ;
-! }
-!
-! symkey = PK11_KeyGen( slot , ctx->cipher , NULL , sizeBits/8 , NULL ) ;
-! if( symkey == NULL ) {
-! xmlSecError( XMLSEC_ERRORS_HERE ,
-! xmlSecErrorsSafeString( xmlSecKeyDataGetName( data ) ) ,
-! "PK11_KeyGen" ,
-! XMLSEC_ERRORS_R_CRYPTO_FAILED ,
-! XMLSEC_ERRORS_NO_MESSAGE ) ;
-! PK11_FreeSlot( slot ) ;
-! return -1 ;
-! }
-!
-! if( ctx->slot != NULL ) {
-! PK11_FreeSlot( ctx->slot ) ;
-! ctx->slot = NULL ;
-! }
-! ctx->slot = slot ;
-!
-! if( ctx->symkey != NULL ) {
-! PK11_FreeSymKey( ctx->symkey ) ;
-! ctx->symkey = NULL ;
-! }
-! ctx->symkey = symkey ;
-!
-! return 0 ;
- }
-
- static xmlSecKeyDataType
- xmlSecNssSymKeyDataGetType(xmlSecKeyDataPtr data) {
-! xmlSecNssSymKeyDataCtxPtr context = NULL ;
-! xmlSecKeyDataType type = xmlSecKeyDataTypeUnknown ;
-
- xmlSecAssert2(xmlSecNssSymKeyDataCheckId(data), xmlSecKeyDataTypeUnknown);
-+ xmlSecAssert2( xmlSecKeyDataCheckSize( data, xmlSecNssSymKeyDataSize ), xmlSecKeyDataTypeUnknown ) ;
-
-! context = xmlSecNssSymKeyDataGetCtx( data ) ;
-! if( context == NULL ) {
-! xmlSecError( XMLSEC_ERRORS_HERE ,
-! xmlSecErrorsSafeString( xmlSecKeyDataGetName( data ) ) ,
-! "xmlSecNssSymKeyDataGetCtx" ,
-! XMLSEC_ERRORS_R_CRYPTO_FAILED ,
-! XMLSEC_ERRORS_NO_MESSAGE ) ;
-! return xmlSecKeyDataTypeUnknown ;
-! }
-!
-! if( context->symkey != NULL ) {
-! type |= xmlSecKeyDataTypeSymmetric ;
-! } else {
-! type |= xmlSecKeyDataTypeUnknown ;
-! }
-
-! return type ;
- }
-
- static xmlSecSize
- xmlSecNssSymKeyDataGetSize(xmlSecKeyDataPtr data) {
-+ xmlSecNssSymKeyDataCtxPtr context ;
-+ unsigned int length = 0 ;
-+
- xmlSecAssert2(xmlSecNssSymKeyDataCheckId(data), 0);
-! xmlSecAssert2( xmlSecKeyDataCheckSize( data, xmlSecNssSymKeyDataSize ), 0 ) ;
-!
-! context = xmlSecNssSymKeyDataGetCtx( data ) ;
-! if( context == NULL ) {
-! xmlSecError( XMLSEC_ERRORS_HERE ,
-! xmlSecErrorsSafeString( xmlSecKeyDataGetName( data ) ) ,
-! "xmlSecNssSymKeyDataGetCtx" ,
-! XMLSEC_ERRORS_R_CRYPTO_FAILED ,
-! XMLSEC_ERRORS_NO_MESSAGE ) ;
-! return 0 ;
-! }
-!
-! if( context->symkey != NULL ) {
-! length = PK11_GetKeyLength( context->symkey ) ;
-! length *= 8 ;
-! }
-!
-! return length ;
- }
-
- static void
- xmlSecNssSymKeyDataDebugDump(xmlSecKeyDataPtr data, FILE* output) {
- xmlSecAssert(xmlSecNssSymKeyDataCheckId(data));
-
-! /* print only size, everything else is sensitive */
-! fprintf( output , "=== %s: size=%d\n" , data->id->dataNodeName ,
-! xmlSecKeyDataGetSize(data)) ;
- }
-
- static void
- xmlSecNssSymKeyDataDebugXmlDump(xmlSecKeyDataPtr data, FILE* output) {
- xmlSecAssert(xmlSecNssSymKeyDataCheckId(data));
-
-! /* print only size, everything else is sensitive */
-! fprintf( output , "<%s size=\"%d\" />\n" , data->id->dataNodeName ,
-! xmlSecKeyDataGetSize(data)) ;
- }
-
- static int
- xmlSecNssSymKeyDataKlassCheck(xmlSecKeyDataKlass* klass) {
- #ifndef XMLSEC_NO_DES
- if(klass == xmlSecNssKeyDataDesId) {
-! return(1);
- }
- #endif /* XMLSEC_NO_DES */
-
- #ifndef XMLSEC_NO_AES
- if(klass == xmlSecNssKeyDataAesId) {
-! return(1);
- }
- #endif /* XMLSEC_NO_AES */
-
- #ifndef XMLSEC_NO_HMAC
- if(klass == xmlSecNssKeyDataHmacId) {
-! return(1);
- }
- #endif /* XMLSEC_NO_HMAC */
-
-***************
-*** 199,240 ****
- * <xmlsec:AESKeyValue> processing
- *
- *************************************************************************/
- static xmlSecKeyDataKlass xmlSecNssKeyDataAesKlass = {
- sizeof(xmlSecKeyDataKlass),
-! xmlSecKeyDataBinarySize,
-
- /* data */
- xmlSecNameAESKeyValue,
- xmlSecKeyDataUsageKeyValueNode | xmlSecKeyDataUsageRetrievalMethodNodeXml,
-! /* xmlSecKeyDataUsage usage; */
-! xmlSecHrefAESKeyValue, /* const xmlChar* href; */
-! xmlSecNodeAESKeyValue, /* const xmlChar* dataNodeName; */
-! xmlSecNs, /* const xmlChar* dataNodeNs; */
-
- /* constructors/destructor */
-! xmlSecNssSymKeyDataInitialize, /* xmlSecKeyDataInitializeMethod initialize; */
-! xmlSecNssSymKeyDataDuplicate, /* xmlSecKeyDataDuplicateMethod duplicate; */
-! xmlSecNssSymKeyDataFinalize, /* xmlSecKeyDataFinalizeMethod finalize; */
-! xmlSecNssSymKeyDataGenerate, /* xmlSecKeyDataGenerateMethod generate; */
-
- /* get info */
-! xmlSecNssSymKeyDataGetType, /* xmlSecKeyDataGetTypeMethod getType; */
-! xmlSecNssSymKeyDataGetSize, /* xmlSecKeyDataGetSizeMethod getSize; */
-! NULL, /* xmlSecKeyDataGetIdentifier getIdentifier; */
-
- /* read/write */
-! xmlSecNssSymKeyDataXmlRead, /* xmlSecKeyDataXmlReadMethod xmlRead; */
-! xmlSecNssSymKeyDataXmlWrite, /* xmlSecKeyDataXmlWriteMethod xmlWrite; */
-! xmlSecNssSymKeyDataBinRead, /* xmlSecKeyDataBinReadMethod binRead; */
-! xmlSecNssSymKeyDataBinWrite, /* xmlSecKeyDataBinWriteMethod binWrite; */
-
- /* debug */
-! xmlSecNssSymKeyDataDebugDump, /* xmlSecKeyDataDebugDumpMethod debugDump; */
-! xmlSecNssSymKeyDataDebugXmlDump, /* xmlSecKeyDataDebugDumpMethod debugXmlDump; */
-
- /* reserved for the future */
-! NULL, /* void* reserved0; */
-! NULL, /* void* reserved1; */
- };
-
- /**
---- 858,903 ----
- * <xmlsec:AESKeyValue> processing
- *
- *************************************************************************/
-+ #ifdef __MINGW32__ // for runtime-pseudo-reloc
-+ static struct _xmlSecKeyDataKlass xmlSecNssKeyDataAesKlass = {
-+ #else
- static xmlSecKeyDataKlass xmlSecNssKeyDataAesKlass = {
-+ #endif
- sizeof(xmlSecKeyDataKlass),
-! xmlSecNssSymKeyDataSize,
-
- /* data */
- xmlSecNameAESKeyValue,
- xmlSecKeyDataUsageKeyValueNode | xmlSecKeyDataUsageRetrievalMethodNodeXml,
-! /* xmlSecKeyDataUsage usage; */
-! xmlSecHrefAESKeyValue, /* const xmlChar* href; */
-! xmlSecNodeAESKeyValue, /* const xmlChar* dataNodeName; */
-! xmlSecNs, /* const xmlChar* dataNodeNs; */
-
- /* constructors/destructor */
-! xmlSecNssSymKeyDataInitialize, /* xmlSecKeyDataInitializeMethod initialize; */
-! xmlSecNssSymKeyDataDuplicate, /* xmlSecKeyDataDuplicateMethod duplicate; */
-! xmlSecNssSymKeyDataFinalize, /* xmlSecKeyDataFinalizeMethod finalize; */
-! xmlSecNssSymKeyDataGenerate, /* xmlSecKeyDataGenerateMethod generate; */
-
- /* get info */
-! xmlSecNssSymKeyDataGetType, /* xmlSecKeyDataGetTypeMethod getType; */
-! xmlSecNssSymKeyDataGetSize, /* xmlSecKeyDataGetSizeMethod getSize; */
-! NULL, /* xmlSecKeyDataGetIdentifier getIdentifier; */
-
- /* read/write */
-! xmlSecNssSymKeyDataXmlRead, /* xmlSecKeyDataXmlReadMethod xmlRead; */
-! xmlSecNssSymKeyDataXmlWrite, /* xmlSecKeyDataXmlWriteMethod xmlWrite; */
-! xmlSecNssSymKeyDataBinRead, /* xmlSecKeyDataBinReadMethod binRead; */
-! xmlSecNssSymKeyDataBinWrite, /* xmlSecKeyDataBinWriteMethod binWrite; */
-
- /* debug */
-! xmlSecNssSymKeyDataDebugDump, /* xmlSecKeyDataDebugDumpMethod debugDump; */
-! xmlSecNssSymKeyDataDebugXmlDump, /* xmlSecKeyDataDebugDumpMethod debugXmlDump; */
-
- /* reserved for the future */
-! NULL, /* void* reserved0; */
-! NULL, /* void* reserved1; */
- };
-
- /**
-***************
-*** 251,259 ****
-
- /**
- * xmlSecNssKeyDataAesSet:
-! * @data: the pointer to AES key data.
-! * @buf: the pointer to key value.
-! * @bufSize: the key value size (in bytes).
- *
- * Sets the value of AES key data.
- *
---- 914,922 ----
-
- /**
- * xmlSecNssKeyDataAesSet:
-! * @data: the pointer to AES key data.
-! * @buf: the pointer to key value.
-! * @bufSize: the key value size (in bytes).
- *
- * Sets the value of AES key data.
- *
-***************
-*** 280,321 ****
- * <xmlsec:DESKeyValue> processing
- *
- *************************************************************************/
- static xmlSecKeyDataKlass xmlSecNssKeyDataDesKlass = {
- sizeof(xmlSecKeyDataKlass),
-! xmlSecKeyDataBinarySize,
-
- /* data */
- xmlSecNameDESKeyValue,
- xmlSecKeyDataUsageKeyValueNode | xmlSecKeyDataUsageRetrievalMethodNodeXml,
-! /* xmlSecKeyDataUsage usage; */
-! xmlSecHrefDESKeyValue, /* const xmlChar* href; */
-! xmlSecNodeDESKeyValue, /* const xmlChar* dataNodeName; */
-! xmlSecNs, /* const xmlChar* dataNodeNs; */
-
- /* constructors/destructor */
-! xmlSecNssSymKeyDataInitialize, /* xmlSecKeyDataInitializeMethod initialize; */
-! xmlSecNssSymKeyDataDuplicate, /* xmlSecKeyDataDuplicateMethod duplicate; */
-! xmlSecNssSymKeyDataFinalize, /* xmlSecKeyDataFinalizeMethod finalize; */
-! xmlSecNssSymKeyDataGenerate, /* xmlSecKeyDataGenerateMethod generate; */
-
- /* get info */
-! xmlSecNssSymKeyDataGetType, /* xmlSecKeyDataGetTypeMethod getType; */
-! xmlSecNssSymKeyDataGetSize, /* xmlSecKeyDataGetSizeMethod getSize; */
-! NULL, /* xmlSecKeyDataGetIdentifier getIdentifier; */
-
- /* read/write */
-! xmlSecNssSymKeyDataXmlRead, /* xmlSecKeyDataXmlReadMethod xmlRead; */
-! xmlSecNssSymKeyDataXmlWrite, /* xmlSecKeyDataXmlWriteMethod xmlWrite; */
-! xmlSecNssSymKeyDataBinRead, /* xmlSecKeyDataBinReadMethod binRead; */
-! xmlSecNssSymKeyDataBinWrite, /* xmlSecKeyDataBinWriteMethod binWrite; */
-
- /* debug */
-! xmlSecNssSymKeyDataDebugDump, /* xmlSecKeyDataDebugDumpMethod debugDump; */
-! xmlSecNssSymKeyDataDebugXmlDump, /* xmlSecKeyDataDebugDumpMethod debugXmlDump; */
-
- /* reserved for the future */
-! NULL, /* void* reserved0; */
-! NULL, /* void* reserved1; */
- };
-
- /**
---- 943,988 ----
- * <xmlsec:DESKeyValue> processing
- *
- *************************************************************************/
-+ #ifdef __MINGW32__ // for runtime-pseudo-reloc
-+ static struct _xmlSecKeyDataKlass xmlSecNssKeyDataDesKlass = {
-+ #else
- static xmlSecKeyDataKlass xmlSecNssKeyDataDesKlass = {
-+ #endif
- sizeof(xmlSecKeyDataKlass),
-! xmlSecNssSymKeyDataSize,
-
- /* data */
- xmlSecNameDESKeyValue,
- xmlSecKeyDataUsageKeyValueNode | xmlSecKeyDataUsageRetrievalMethodNodeXml,
-! /* xmlSecKeyDataUsage usage; */
-! xmlSecHrefDESKeyValue, /* const xmlChar* href; */
-! xmlSecNodeDESKeyValue, /* const xmlChar* dataNodeName; */
-! xmlSecNs, /* const xmlChar* dataNodeNs; */
-
- /* constructors/destructor */
-! xmlSecNssSymKeyDataInitialize, /* xmlSecKeyDataInitializeMethod initialize; */
-! xmlSecNssSymKeyDataDuplicate, /* xmlSecKeyDataDuplicateMethod duplicate; */
-! xmlSecNssSymKeyDataFinalize, /* xmlSecKeyDataFinalizeMethod finalize; */
-! xmlSecNssSymKeyDataGenerate, /* xmlSecKeyDataGenerateMethod generate; */
-
- /* get info */
-! xmlSecNssSymKeyDataGetType, /* xmlSecKeyDataGetTypeMethod getType; */
-! xmlSecNssSymKeyDataGetSize, /* xmlSecKeyDataGetSizeMethod getSize; */
-! NULL, /* xmlSecKeyDataGetIdentifier getIdentifier; */
-
- /* read/write */
-! xmlSecNssSymKeyDataXmlRead, /* xmlSecKeyDataXmlReadMethod xmlRead; */
-! xmlSecNssSymKeyDataXmlWrite, /* xmlSecKeyDataXmlWriteMethod xmlWrite; */
-! xmlSecNssSymKeyDataBinRead, /* xmlSecKeyDataBinReadMethod binRead; */
-! xmlSecNssSymKeyDataBinWrite, /* xmlSecKeyDataBinWriteMethod binWrite; */
-
- /* debug */
-! xmlSecNssSymKeyDataDebugDump, /* xmlSecKeyDataDebugDumpMethod debugDump; */
-! xmlSecNssSymKeyDataDebugXmlDump, /* xmlSecKeyDataDebugDumpMethod debugXmlDump; */
-
- /* reserved for the future */
-! NULL, /* void* reserved0; */
-! NULL, /* void* reserved1; */
- };
-
- /**
-***************
-*** 332,340 ****
-
- /**
- * xmlSecNssKeyDataDesSet:
-! * @data: the pointer to DES key data.
-! * @buf: the pointer to key value.
-! * @bufSize: the key value size (in bytes).
- *
- * Sets the value of DES key data.
- *
---- 999,1007 ----
-
- /**
- * xmlSecNssKeyDataDesSet:
-! * @data: the pointer to DES key data.
-! * @buf: the pointer to key value.
-! * @bufSize: the key value size (in bytes).
- *
- * Sets the value of DES key data.
- *
-***************
-*** 362,403 ****
- * <xmlsec:HMACKeyValue> processing
- *
- *************************************************************************/
- static xmlSecKeyDataKlass xmlSecNssKeyDataHmacKlass = {
- sizeof(xmlSecKeyDataKlass),
-! xmlSecKeyDataBinarySize,
-
- /* data */
- xmlSecNameHMACKeyValue,
- xmlSecKeyDataUsageKeyValueNode | xmlSecKeyDataUsageRetrievalMethodNodeXml,
-! /* xmlSecKeyDataUsage usage; */
-! xmlSecHrefHMACKeyValue, /* const xmlChar* href; */
-! xmlSecNodeHMACKeyValue, /* const xmlChar* dataNodeName; */
-! xmlSecNs, /* const xmlChar* dataNodeNs; */
-
- /* constructors/destructor */
-! xmlSecNssSymKeyDataInitialize, /* xmlSecKeyDataInitializeMethod initialize; */
-! xmlSecNssSymKeyDataDuplicate, /* xmlSecKeyDataDuplicateMethod duplicate; */
-! xmlSecNssSymKeyDataFinalize, /* xmlSecKeyDataFinalizeMethod finalize; */
-! xmlSecNssSymKeyDataGenerate, /* xmlSecKeyDataGenerateMethod generate; */
-
- /* get info */
-! xmlSecNssSymKeyDataGetType, /* xmlSecKeyDataGetTypeMethod getType; */
-! xmlSecNssSymKeyDataGetSize, /* xmlSecKeyDataGetSizeMethod getSize; */
-! NULL, /* xmlSecKeyDataGetIdentifier getIdentifier; */
-
- /* read/write */
-! xmlSecNssSymKeyDataXmlRead, /* xmlSecKeyDataXmlReadMethod xmlRead; */
-! xmlSecNssSymKeyDataXmlWrite, /* xmlSecKeyDataXmlWriteMethod xmlWrite; */
-! xmlSecNssSymKeyDataBinRead, /* xmlSecKeyDataBinReadMethod binRead; */
-! xmlSecNssSymKeyDataBinWrite, /* xmlSecKeyDataBinWriteMethod binWrite; */
-
- /* debug */
-! xmlSecNssSymKeyDataDebugDump, /* xmlSecKeyDataDebugDumpMethod debugDump; */
-! xmlSecNssSymKeyDataDebugXmlDump, /* xmlSecKeyDataDebugDumpMethod debugXmlDump; */
-
- /* reserved for the future */
-! NULL, /* void* reserved0; */
-! NULL, /* void* reserved1; */
- };
-
- /**
---- 1029,1074 ----
- * <xmlsec:HMACKeyValue> processing
- *
- *************************************************************************/
-+ #ifdef __MINGW32__ // for runtime-pseudo-reloc
-+ static struct _xmlSecKeyDataKlass xmlSecNssKeyDataHmacKlass = {
-+ #else
- static xmlSecKeyDataKlass xmlSecNssKeyDataHmacKlass = {
-+ #endif
- sizeof(xmlSecKeyDataKlass),
-! xmlSecNssSymKeyDataSize,
-
- /* data */
- xmlSecNameHMACKeyValue,
- xmlSecKeyDataUsageKeyValueNode | xmlSecKeyDataUsageRetrievalMethodNodeXml,
-! /* xmlSecKeyDataUsage usage; */
-! xmlSecHrefHMACKeyValue, /* const xmlChar* href; */
-! xmlSecNodeHMACKeyValue, /* const xmlChar* dataNodeName; */
-! xmlSecNs, /* const xmlChar* dataNodeNs; */
-
- /* constructors/destructor */
-! xmlSecNssSymKeyDataInitialize, /* xmlSecKeyDataInitializeMethod initialize; */
-! xmlSecNssSymKeyDataDuplicate, /* xmlSecKeyDataDuplicateMethod duplicate; */
-! xmlSecNssSymKeyDataFinalize, /* xmlSecKeyDataFinalizeMethod finalize; */
-! xmlSecNssSymKeyDataGenerate, /* xmlSecKeyDataGenerateMethod generate; */
-
- /* get info */
-! xmlSecNssSymKeyDataGetType, /* xmlSecKeyDataGetTypeMethod getType; */
-! xmlSecNssSymKeyDataGetSize, /* xmlSecKeyDataGetSizeMethod getSize; */
-! NULL, /* xmlSecKeyDataGetIdentifier getIdentifier; */
-
- /* read/write */
-! xmlSecNssSymKeyDataXmlRead, /* xmlSecKeyDataXmlReadMethod xmlRead; */
-! xmlSecNssSymKeyDataXmlWrite, /* xmlSecKeyDataXmlWriteMethod xmlWrite; */
-! xmlSecNssSymKeyDataBinRead, /* xmlSecKeyDataBinReadMethod binRead; */
-! xmlSecNssSymKeyDataBinWrite, /* xmlSecKeyDataBinWriteMethod binWrite; */
-
- /* debug */
-! xmlSecNssSymKeyDataDebugDump, /* xmlSecKeyDataDebugDumpMethod debugDump; */
-! xmlSecNssSymKeyDataDebugXmlDump, /* xmlSecKeyDataDebugDumpMethod debugXmlDump; */
-
- /* reserved for the future */
-! NULL, /* void* reserved0; */
-! NULL, /* void* reserved1; */
- };
-
- /**
-***************
-*** 414,422 ****
-
- /**
- * xmlSecNssKeyDataHmacSet:
-! * @data: the pointer to HMAC key data.
-! * @buf: the pointer to key value.
-! * @bufSize: the key value size (in bytes).
- *
- * Sets the value of HMAC key data.
- *
---- 1085,1093 ----
-
- /**
- * xmlSecNssKeyDataHmacSet:
-! * @data: the pointer to HMAC key data.
-! * @buf: the pointer to key value.
-! * @bufSize: the key value size (in bytes).
- *
- * Sets the value of HMAC key data.
- *
-*** misc/xmlsec1-1.2.6/src/nss/tokens.c Fri May 11 14:47:47 2007
---- misc/build/xmlsec1-1.2.6/src/nss/tokens.c Fri May 11 14:47:20 2007
-***************
-*** 1 ****
-! dummy
---- 1,548 ----
-! /**
-! * XMLSec library
-! *
-! * This is free software; see Copyright file in the source
-! * distribution for preciese wording.
-! *
-! * Copyright..................................
-! *
-! * Contributor(s): _____________________________
-! *
-! */
-!
-! /**
-! * In order to ensure that particular crypto operation is performed on
-! * particular crypto device, a subclass of xmlSecList is used to store slot and
-! * mechanism information.
-! *
-! * In the list, a slot is bound with a mechanism. If the mechanism is available,
-! * this mechanism only can perform on the slot; otherwise, it can perform on
-! * every eligibl slot in the list.
-! *
-! * When try to find a slot for a particular mechanism, the slot bound with
-! * avaliable mechanism will be looked up firstly.
-! */
-! #include "globals.h"
-! #include <string.h>
-!
-! #include <xmlsec/xmlsec.h>
-! #include <xmlsec/errors.h>
-! #include <xmlsec/list.h>
-!
-! #include <xmlsec/nss/tokens.h>
-!
-! int
-! xmlSecNssKeySlotSetMechList(
-! xmlSecNssKeySlotPtr keySlot ,
-! CK_MECHANISM_TYPE_PTR mechanismList
-! ) {
-! int counter ;
-!
-! xmlSecAssert2( keySlot != NULL , -1 ) ;
-!
-! if( keySlot->mechanismList != CK_NULL_PTR ) {
-! xmlFree( keySlot->mechanismList ) ;
-!
-! for( counter = 0 ; *( mechanismList + counter ) != CKM_INVALID_MECHANISM ; counter ++ ) ;
-! keySlot->mechanismList = ( CK_MECHANISM_TYPE_PTR )xmlMalloc( ( counter + 1 ) * sizeof( CK_MECHANISM_TYPE ) ) ;
-! if( keySlot->mechanismList == NULL ) {
-! xmlSecError( XMLSEC_ERRORS_HERE ,
-! NULL ,
-! NULL ,
-! XMLSEC_ERRORS_R_XMLSEC_FAILED ,
-! XMLSEC_ERRORS_NO_MESSAGE ) ;
-! return( -1 );
-! }
-! for( ; counter >= 0 ; counter -- )
-! *( keySlot->mechanismList + counter ) = *( mechanismList + counter ) ;
-! }
-!
-! return( 0 );
-! }
-!
-! int
-! xmlSecNssKeySlotEnableMech(
-! xmlSecNssKeySlotPtr keySlot ,
-! CK_MECHANISM_TYPE mechanism
-! ) {
-! int counter ;
-! CK_MECHANISM_TYPE_PTR newList ;
-!
-! xmlSecAssert2( keySlot != NULL , -1 ) ;
-!
-! if( mechanism != CKM_INVALID_MECHANISM ) {
-! for( counter = 0 ; *( keySlot->mechanismList + counter ) != CKM_INVALID_MECHANISM ; counter ++ ) ;
-! newList = ( CK_MECHANISM_TYPE_PTR )xmlMalloc( ( counter + 1 + 1 ) * sizeof( CK_MECHANISM_TYPE ) ) ;
-! if( newList == NULL ) {
-! xmlSecError( XMLSEC_ERRORS_HERE ,
-! NULL ,
-! NULL ,
-! XMLSEC_ERRORS_R_XMLSEC_FAILED ,
-! XMLSEC_ERRORS_NO_MESSAGE ) ;
-! return( -1 );
-! }
-! *( newList + counter + 1 ) = CKM_INVALID_MECHANISM ;
-! *( newList + counter ) = mechanism ;
-! for( counter -= 1 ; counter >= 0 ; counter -- )
-! *( newList + counter ) = *( keySlot->mechanismList + counter ) ;
-!
-! xmlFree( keySlot->mechanismList ) ;
-! keySlot->mechanismList = newList ;
-! }
-!
-! return(0);
-! }
-!
-! int
-! xmlSecNssKeySlotDisableMech(
-! xmlSecNssKeySlotPtr keySlot ,
-! CK_MECHANISM_TYPE mechanism
-! ) {
-! int counter ;
-!
-! xmlSecAssert2( keySlot != NULL , -1 ) ;
-!
-! for( counter = 0 ; *( keySlot->mechanismList + counter ) != CKM_INVALID_MECHANISM ; counter ++ ) {
-! if( *( keySlot->mechanismList + counter ) == mechanism ) {
-! for( ; *( keySlot->mechanismList + counter ) != CKM_INVALID_MECHANISM ; counter ++ ) {
-! *( keySlot->mechanismList + counter ) = *( keySlot->mechanismList + counter + 1 ) ;
-! }
-!
-! break ;
-! }
-! }
-!
-! return(0);
-! }
-!
-! CK_MECHANISM_TYPE_PTR
-! xmlSecNssKeySlotGetMechList(
-! xmlSecNssKeySlotPtr keySlot
-! ) {
-! if( keySlot != NULL )
-! return keySlot->mechanismList ;
-! else
-! return NULL ;
-! }
-!
-! int
-! xmlSecNssKeySlotSetSlot(
-! xmlSecNssKeySlotPtr keySlot ,
-! PK11SlotInfo* slot
-! ) {
-! xmlSecAssert2( keySlot != NULL , -1 ) ;
-!
-! if( slot != NULL && keySlot->slot != slot ) {
-! if( keySlot->slot != NULL )
-! PK11_FreeSlot( keySlot->slot ) ;
-!
-! if( keySlot->mechanismList != NULL ) {
-! xmlFree( keySlot->mechanismList ) ;
-! keySlot->mechanismList = NULL ;
-! }
-!
-! keySlot->slot = PK11_ReferenceSlot( slot ) ;
-! }
-!
-! return(0);
-! }
-!
-! int
-! xmlSecNssKeySlotInitialize(
-! xmlSecNssKeySlotPtr keySlot ,
-! PK11SlotInfo* slot
-! ) {
-! xmlSecAssert2( keySlot != NULL , -1 ) ;
-! xmlSecAssert2( keySlot->slot == NULL , -1 ) ;
-! xmlSecAssert2( keySlot->mechanismList == NULL , -1 ) ;
-!
-! if( slot != NULL ) {
-! keySlot->slot = PK11_ReferenceSlot( slot ) ;
-! }
-!
-! return(0);
-! }
-!
-! void
-! xmlSecNssKeySlotFinalize(
-! xmlSecNssKeySlotPtr keySlot
-! ) {
-! xmlSecAssert( keySlot != NULL ) ;
-!
-! if( keySlot->mechanismList != NULL ) {
-! xmlFree( keySlot->mechanismList ) ;
-! keySlot->mechanismList = NULL ;
-! }
-!
-! if( keySlot->slot != NULL ) {
-! PK11_FreeSlot( keySlot->slot ) ;
-! keySlot->slot = NULL ;
-! }
-!
-! }
-!
-! PK11SlotInfo*
-! xmlSecNssKeySlotGetSlot(
-! xmlSecNssKeySlotPtr keySlot
-! ) {
-! if( keySlot != NULL )
-! return keySlot->slot ;
-! else
-! return NULL ;
-! }
-!
-! xmlSecNssKeySlotPtr
-! xmlSecNssKeySlotCreate() {
-! xmlSecNssKeySlotPtr keySlot ;
-!
-! /* Allocates a new xmlSecNssKeySlot and fill the fields */
-! keySlot = ( xmlSecNssKeySlotPtr )xmlMalloc( sizeof( xmlSecNssKeySlot ) ) ;
-! if( keySlot == NULL ) {
-! xmlSecError( XMLSEC_ERRORS_HERE ,
-! NULL ,
-! NULL ,
-! XMLSEC_ERRORS_R_XMLSEC_FAILED ,
-! XMLSEC_ERRORS_NO_MESSAGE ) ;
-! return( NULL );
-! }
-! memset( keySlot, 0, sizeof( xmlSecNssKeySlot ) ) ;
-!
-! return( keySlot ) ;
-! }
-!
-! int
-! xmlSecNssKeySlotCopy(
-! xmlSecNssKeySlotPtr newKeySlot ,
-! xmlSecNssKeySlotPtr keySlot
-! ) {
-! CK_MECHANISM_TYPE_PTR mech ;
-! int counter ;
-!
-! xmlSecAssert2( newKeySlot != NULL , -1 ) ;
-! xmlSecAssert2( keySlot != NULL , -1 ) ;
-!
-! if( keySlot->slot != NULL && newKeySlot->slot != keySlot->slot ) {
-! if( newKeySlot->slot != NULL )
-! PK11_FreeSlot( newKeySlot->slot ) ;
-!
-! newKeySlot->slot = PK11_ReferenceSlot( keySlot->slot ) ;
-! }
-!
-! if( keySlot->mechanismList != CK_NULL_PTR ) {
-! xmlFree( newKeySlot->mechanismList ) ;
-!
-! for( counter = 0 ; *( keySlot->mechanismList + counter ) != CKM_INVALID_MECHANISM ; counter ++ ) ;
-! newKeySlot->mechanismList = ( CK_MECHANISM_TYPE_PTR )xmlMalloc( ( counter + 1 ) * sizeof( CK_MECHANISM_TYPE ) ) ;
-! if( newKeySlot->mechanismList == NULL ) {
-! xmlSecError( XMLSEC_ERRORS_HERE ,
-! NULL ,
-! NULL ,
-! XMLSEC_ERRORS_R_XMLSEC_FAILED ,
-! XMLSEC_ERRORS_NO_MESSAGE ) ;
-! return( -1 );
-! }
-! for( ; counter >= 0 ; counter -- )
-! *( newKeySlot->mechanismList + counter ) = *( keySlot->mechanismList + counter ) ;
-! }
-!
-! return( 0 );
-! }
-!
-! xmlSecNssKeySlotPtr
-! xmlSecNssKeySlotDuplicate(
-! xmlSecNssKeySlotPtr keySlot
-! ) {
-! xmlSecNssKeySlotPtr newKeySlot ;
-! int ret ;
-!
-! xmlSecAssert2( keySlot != NULL , NULL ) ;
-!
-! newKeySlot = xmlSecNssKeySlotCreate() ;
-! if( newKeySlot == NULL ) {
-! xmlSecError( XMLSEC_ERRORS_HERE ,
-! NULL ,
-! NULL ,
-! XMLSEC_ERRORS_R_XMLSEC_FAILED ,
-! XMLSEC_ERRORS_NO_MESSAGE ) ;
-! return( NULL );
-! }
-!
-! if( xmlSecNssKeySlotCopy( newKeySlot, keySlot ) < 0 ) {
-! xmlSecError( XMLSEC_ERRORS_HERE ,
-! NULL ,
-! NULL ,
-! XMLSEC_ERRORS_R_XMLSEC_FAILED ,
-! XMLSEC_ERRORS_NO_MESSAGE ) ;
-! return( NULL );
-! }
-!
-! return( newKeySlot );
-! }
-!
-! void
-! xmlSecNssKeySlotDestroy(
-! xmlSecNssKeySlotPtr keySlot
-! ) {
-! xmlSecAssert( keySlot != NULL ) ;
-!
-! if( keySlot->mechanismList != NULL )
-! xmlFree( keySlot->mechanismList ) ;
-!
-! if( keySlot->slot != NULL )
-! PK11_FreeSlot( keySlot->slot ) ;
-!
-! xmlFree( keySlot ) ;
-! }
-!
-! int
-! xmlSecNssKeySlotBindMech(
-! xmlSecNssKeySlotPtr keySlot ,
-! CK_MECHANISM_TYPE type
-! ) {
-! int counter ;
-!
-! xmlSecAssert2( keySlot != NULL , 0 ) ;
-! xmlSecAssert2( keySlot->slot != NULL , 0 ) ;
-! xmlSecAssert2( type != CKM_INVALID_MECHANISM , 0 ) ;
-!
-! for( counter = 0 ; *( keySlot->mechanismList + counter ) != CKM_INVALID_MECHANISM ; counter ++ ) {
-! if( *( keySlot->mechanismList + counter ) == type )
-! return(1) ;
-! }
-!
-! return( 0 ) ;
-! }
-!
-! int
-! xmlSecNssKeySlotSupportMech(
-! xmlSecNssKeySlotPtr keySlot ,
-! CK_MECHANISM_TYPE type
-! ) {
-! xmlSecAssert2( keySlot != NULL , 0 ) ;
-! xmlSecAssert2( keySlot->slot != NULL , 0 ) ;
-! xmlSecAssert2( type != CKM_INVALID_MECHANISM , 0 ) ;
-!
-! if( PK11_DoesMechanism( keySlot->slot , type ) == PR_TRUE ) {
-! return(1);
-! } else
-! return(0);
-! }
-!
-! void
-! xmlSecNssKeySlotDebugDump(
-! xmlSecNssKeySlotPtr keySlot ,
-! FILE* output
-! ) {
-! xmlSecAssert( keySlot != NULL ) ;
-! xmlSecAssert( output != NULL ) ;
-!
-! fprintf( output, "== KEY SLOT\n" );
-! }
-!
-! void
-! xmlSecNssKeySlotDebugXmlDump(
-! xmlSecNssKeySlotPtr keySlot ,
-! FILE* output
-! ) {
-! }
-!
-! /**
-! * Key Slot List
-! */
-! #ifdef __MINGW32__ // for runtime-pseudo-reloc
-! static struct _xmlSecPtrListKlass xmlSecNssKeySlotPtrListKlass = {
-! #else
-! static xmlSecPtrListKlass xmlSecNssKeySlotPtrListKlass = {
-! #endif
-! BAD_CAST "mechanism-list",
-! (xmlSecPtrDuplicateItemMethod)xmlSecNssKeySlotDuplicate,
-! (xmlSecPtrDestroyItemMethod)xmlSecNssKeySlotDestroy,
-! (xmlSecPtrDebugDumpItemMethod)xmlSecNssKeySlotDebugDump,
-! (xmlSecPtrDebugDumpItemMethod)xmlSecNssKeySlotDebugXmlDump,
-! };
-!
-! xmlSecPtrListId
-! xmlSecNssKeySlotListGetKlass(void) {
-! return(&xmlSecNssKeySlotPtrListKlass);
-! }
-!
-!
-! /*-
-! * Global PKCS#11 crypto token repository -- Key slot list
-! */
-! static xmlSecPtrListPtr _xmlSecNssKeySlotList = NULL ;
-!
-! PK11SlotInfo*
-! xmlSecNssSlotGet(
-! CK_MECHANISM_TYPE type
-! ) {
-! PK11SlotInfo* slot = NULL ;
-! xmlSecNssKeySlotPtr keySlot ;
-! xmlSecSize ksSize ;
-! xmlSecSize ksPos ;
-! char flag ;
-!
-! if( _xmlSecNssKeySlotList == NULL ) {
-! slot = PK11_GetBestSlot( type , NULL ) ;
-! } else {
-! ksSize = xmlSecPtrListGetSize( _xmlSecNssKeySlotList ) ;
-!
-! /*-
-! * Firstly, checking whether the mechanism is bound with a special slot.
-! * If no bound slot, we try to find the first eligible slot in the list.
-! */
-! for( flag = 0, ksPos = 0 ; ksPos < ksSize ; ksPos ++ ) {
-! keySlot = ( xmlSecNssKeySlotPtr )xmlSecPtrListGetItem( _xmlSecNssKeySlotList, ksPos ) ;
-! if( keySlot != NULL && xmlSecNssKeySlotBindMech( keySlot, type ) ) {
-! slot = xmlSecNssKeySlotGetSlot( keySlot ) ;
-! flag = 2 ;
-! } else if( flag == 0 && xmlSecNssKeySlotSupportMech( keySlot, type ) ) {
-! slot = xmlSecNssKeySlotGetSlot( keySlot ) ;
-! flag = 1 ;
-! }
-!
-! if( flag == 2 )
-! break ;
-! }
-! if( slot != NULL )
-! slot = PK11_ReferenceSlot( slot ) ;
-! }
-!
-! if( slot != NULL && PK11_NeedLogin( slot ) ) {
-! if( PK11_Authenticate( slot , PR_TRUE , NULL ) != SECSuccess ) {
-! xmlSecError( XMLSEC_ERRORS_HERE ,
-! NULL ,
-! NULL ,
-! XMLSEC_ERRORS_R_XMLSEC_FAILED ,
-! XMLSEC_ERRORS_NO_MESSAGE ) ;
-! PK11_FreeSlot( slot ) ;
-! return( NULL );
-! }
-! }
-!
-! return slot ;
-! }
-!
-! int
-! xmlSecNssSlotInitialize(
-! void
-! ) {
-! if( _xmlSecNssKeySlotList != NULL ) {
-! xmlSecPtrListDestroy( _xmlSecNssKeySlotList ) ;
-! _xmlSecNssKeySlotList = NULL ;
-! }
-!
-! _xmlSecNssKeySlotList = xmlSecPtrListCreate( xmlSecNssKeySlotListId ) ;
-! if( _xmlSecNssKeySlotList == NULL ) {
-! xmlSecError( XMLSEC_ERRORS_HERE ,
-! NULL ,
-! NULL ,
-! XMLSEC_ERRORS_R_XMLSEC_FAILED ,
-! XMLSEC_ERRORS_NO_MESSAGE ) ;
-! return( -1 );
-! }
-!
-! return(0);
-! }
-!
-! void
-! xmlSecNssSlotShutdown(
-! void
-! ) {
-! if( _xmlSecNssKeySlotList != NULL ) {
-! xmlSecPtrListDestroy( _xmlSecNssKeySlotList ) ;
-! _xmlSecNssKeySlotList = NULL ;
-! }
-! }
-!
-! int
-! xmlSecNssSlotAdopt(
-! PK11SlotInfo* slot,
-! CK_MECHANISM_TYPE type
-! ) {
-! xmlSecNssKeySlotPtr keySlot ;
-! xmlSecSize ksSize ;
-! xmlSecSize ksPos ;
-! char flag ;
-!
-! xmlSecAssert2( _xmlSecNssKeySlotList != NULL, -1 ) ;
-! xmlSecAssert2( slot != NULL, -1 ) ;
-!
-! ksSize = xmlSecPtrListGetSize( _xmlSecNssKeySlotList ) ;
-!
-! /*-
-! * Firstly, checking whether the slot is in the repository already.
-! */
-! flag = 0 ;
-! for( ksPos = 0 ; ksPos < ksSize ; ksPos ++ ) {
-! keySlot = ( xmlSecNssKeySlotPtr )xmlSecPtrListGetItem( _xmlSecNssKeySlotList, ksPos ) ;
-! /* If find the slot in the list */
-! if( keySlot != NULL && xmlSecNssKeySlotGetSlot( keySlot ) == slot ) {
-! /* If mechnism type is valid, bind the slot with the mechanism */
-! if( type != CKM_INVALID_MECHANISM ) {
-! if( xmlSecNssKeySlotEnableMech( keySlot, type ) < 0 ) {
-! xmlSecError( XMLSEC_ERRORS_HERE ,
-! NULL ,
-! NULL ,
-! XMLSEC_ERRORS_R_XMLSEC_FAILED ,
-! XMLSEC_ERRORS_NO_MESSAGE ) ;
-! return(-1);
-! }
-! }
-!
-! flag = 1 ;
-! }
-! }
-!
-! /* If the slot do not in the list, add a new item to the list */
-! if( flag == 0 ) {
-! /* Create a new KeySlot */
-! keySlot = xmlSecNssKeySlotCreate() ;
-! if( keySlot == NULL ) {
-! xmlSecError( XMLSEC_ERRORS_HERE ,
-! NULL ,
-! NULL ,
-! XMLSEC_ERRORS_R_XMLSEC_FAILED ,
-! XMLSEC_ERRORS_NO_MESSAGE ) ;
-! return(-1);
-! }
-!
-! /* Initialize the keySlot with a slot */
-! if( xmlSecNssKeySlotInitialize( keySlot, slot ) < 0 ) {
-! xmlSecError( XMLSEC_ERRORS_HERE ,
-! NULL ,
-! NULL ,
-! XMLSEC_ERRORS_R_XMLSEC_FAILED ,
-! XMLSEC_ERRORS_NO_MESSAGE ) ;
-! xmlSecNssKeySlotDestroy( keySlot ) ;
-! return(-1);
-! }
-!
-! /* If mechnism type is valid, bind the slot with the mechanism */
-! if( type != CKM_INVALID_MECHANISM ) {
-! if( xmlSecNssKeySlotEnableMech( keySlot, type ) < 0 ) {
-! xmlSecError( XMLSEC_ERRORS_HERE ,
-! NULL ,
-! NULL ,
-! XMLSEC_ERRORS_R_XMLSEC_FAILED ,
-! XMLSEC_ERRORS_NO_MESSAGE ) ;
-! xmlSecNssKeySlotDestroy( keySlot ) ;
-! return(-1);
-! }
-! }
-!
-! /* Add keySlot into the list */
-! if( xmlSecPtrListAdd( _xmlSecNssKeySlotList, keySlot ) < 0 ) {
-! xmlSecError( XMLSEC_ERRORS_HERE ,
-! NULL ,
-! NULL ,
-! XMLSEC_ERRORS_R_XMLSEC_FAILED ,
-! XMLSEC_ERRORS_NO_MESSAGE ) ;
-! xmlSecNssKeySlotDestroy( keySlot ) ;
-! return(-1);
-! }
-! }
-!
-! return(0);
-! }
-!
-*** misc/xmlsec1-1.2.6/src/nss/x509.c Fri Sep 26 05:53:09 2003
---- misc/build/xmlsec1-1.2.6/src/nss/x509.c Fri May 11 14:47:20 2007
-***************
-*** 34,40 ****
- #include <xmlsec/keys.h>
- #include <xmlsec/keyinfo.h>
- #include <xmlsec/keysmngr.h>
-- #include <xmlsec/x509.h>
- #include <xmlsec/base64.h>
- #include <xmlsec/errors.h>
-
---- 34,39 ----
-***************
-*** 61,97 ****
- static int xmlSecNssX509CertificateNodeRead (xmlSecKeyDataPtr data,
- xmlNodePtr node,
- xmlSecKeyInfoCtxPtr keyInfoCtx);
-- static int xmlSecNssX509CertificateNodeWrite (CERTCertificate* cert,
-- xmlNodePtr node,
-- xmlSecKeyInfoCtxPtr keyInfoCtx);
- static int xmlSecNssX509SubjectNameNodeRead (xmlSecKeyDataPtr data,
- xmlNodePtr node,
- xmlSecKeyInfoCtxPtr keyInfoCtx);
-- static int xmlSecNssX509SubjectNameNodeWrite (CERTCertificate* cert,
-- xmlNodePtr node,
-- xmlSecKeyInfoCtxPtr keyInfoCtx);
- static int xmlSecNssX509IssuerSerialNodeRead (xmlSecKeyDataPtr data,
- xmlNodePtr node,
- xmlSecKeyInfoCtxPtr keyInfoCtx);
-- static int xmlSecNssX509IssuerSerialNodeWrite (CERTCertificate* cert,
-- xmlNodePtr node,
-- xmlSecKeyInfoCtxPtr keyInfoCtx);
- static int xmlSecNssX509SKINodeRead (xmlSecKeyDataPtr data,
- xmlNodePtr node,
- xmlSecKeyInfoCtxPtr keyInfoCtx);
-- static int xmlSecNssX509SKINodeWrite (CERTCertificate* cert,
-- xmlNodePtr node,
-- xmlSecKeyInfoCtxPtr keyInfoCtx);
- static int xmlSecNssX509CRLNodeRead (xmlSecKeyDataPtr data,
- xmlNodePtr node,
- xmlSecKeyInfoCtxPtr keyInfoCtx);
-- static int xmlSecNssX509CRLNodeWrite (CERTSignedCrl* crl,
-- xmlNodePtr node,
-- xmlSecKeyInfoCtxPtr keyInfoCtx);
- static int xmlSecNssKeyDataX509VerifyAndExtractKey(xmlSecKeyDataPtr data,
- xmlSecKeyPtr key,
- xmlSecKeyInfoCtxPtr keyInfoCtx);
--
- static CERTCertificate* xmlSecNssX509CertDerRead (const xmlSecByte* buf,
- xmlSecSize size);
- static CERTCertificate* xmlSecNssX509CertBase64DerRead (xmlChar* buf);
---- 60,80 ----
-***************
-*** 104,112 ****
- xmlSecKeyInfoCtxPtr keyInfoCtx);
- static xmlChar* xmlSecNssX509CrlBase64DerWrite (CERTSignedCrl* crl,
- int base64LineWrap);
-- static xmlChar* xmlSecNssX509NameWrite (CERTName* nm);
-- static xmlChar* xmlSecNssASN1IntegerWrite (SECItem *num);
-- static xmlChar* xmlSecNssX509SKIWrite (CERTCertificate* cert);
- static void xmlSecNssX509CertDebugDump (CERTCertificate* cert,
- FILE* output);
- static void xmlSecNssX509CertDebugXmlDump (CERTCertificate* cert,
---- 87,92 ----
-***************
-*** 254,260 ****
---- 234,244 ----
-
-
-
-+ #ifdef __MINGW32__ // for runtime-pseudo-reloc
-+ static struct _xmlSecKeyDataKlass xmlSecNssKeyDataX509Klass = {
-+ #else
- static xmlSecKeyDataKlass xmlSecNssKeyDataX509Klass = {
-+ #endif
- sizeof(xmlSecKeyDataKlass),
- xmlSecNssX509DataSize,
-
-***************
-*** 378,384 ****
- xmlSecErrorsSafeString(xmlSecKeyDataGetName(data)),
- "CERT_NewCertList",
- XMLSEC_ERRORS_R_CRYPTO_FAILED,
-! XMLSEC_ERRORS_NO_MESSAGE);
- return(-1);
- }
- }
---- 362,368 ----
- xmlSecErrorsSafeString(xmlSecKeyDataGetName(data)),
- "CERT_NewCertList",
- XMLSEC_ERRORS_R_CRYPTO_FAILED,
-! "error code=%d", PORT_GetError());
- return(-1);
- }
- }
-***************
-*** 389,395 ****
- xmlSecErrorsSafeString(xmlSecKeyDataGetName(data)),
- "CERT_AddCertToListTail",
- XMLSEC_ERRORS_R_CRYPTO_FAILED,
-! XMLSEC_ERRORS_NO_MESSAGE);
- return(-1);
- }
- ctx->numCerts++;
---- 373,379 ----
- xmlSecErrorsSafeString(xmlSecKeyDataGetName(data)),
- "CERT_AddCertToListTail",
- XMLSEC_ERRORS_R_CRYPTO_FAILED,
-! "error code=%d", PORT_GetError());
- return(-1);
- }
- ctx->numCerts++;
-***************
-*** 588,594 ****
- xmlSecErrorsSafeString(xmlSecKeyDataGetName(dst)),
- "CERT_DupCertificate",
- XMLSEC_ERRORS_R_CRYPTO_FAILED,
-! XMLSEC_ERRORS_NO_MESSAGE);
- return(-1);
- }
-
---- 572,578 ----
- xmlSecErrorsSafeString(xmlSecKeyDataGetName(dst)),
- "CERT_DupCertificate",
- XMLSEC_ERRORS_R_CRYPTO_FAILED,
-! "error code=%d", PORT_GetError());
- return(-1);
- }
-
-***************
-*** 627,633 ****
- xmlSecErrorsSafeString(xmlSecKeyDataGetName(dst)),
- "SEC_DupCrl",
- XMLSEC_ERRORS_R_CRYPTO_FAILED,
-! XMLSEC_ERRORS_NO_MESSAGE);
- return(-1);
- }
-
---- 611,617 ----
- xmlSecErrorsSafeString(xmlSecKeyDataGetName(dst)),
- "SEC_DupCrl",
- XMLSEC_ERRORS_R_CRYPTO_FAILED,
-! "error code=%d", PORT_GetError());
- return(-1);
- }
-
-***************
-*** 652,658 ****
- xmlSecErrorsSafeString(xmlSecKeyDataGetName(dst)),
- "CERT_DupCertificate",
- XMLSEC_ERRORS_R_CRYPTO_FAILED,
-! XMLSEC_ERRORS_NO_MESSAGE);
- return(-1);
- }
- ret = xmlSecNssKeyDataX509AdoptKeyCert(dst, certDst);
---- 636,642 ----
- xmlSecErrorsSafeString(xmlSecKeyDataGetName(dst)),
- "CERT_DupCertificate",
- XMLSEC_ERRORS_R_CRYPTO_FAILED,
-! "error code=%d", PORT_GetError());
- return(-1);
- }
- ret = xmlSecNssKeyDataX509AdoptKeyCert(dst, certDst);
-***************
-*** 752,782 ****
- xmlSecNssKeyDataX509XmlWrite(xmlSecKeyDataId id, xmlSecKeyPtr key,
- xmlNodePtr node, xmlSecKeyInfoCtxPtr keyInfoCtx) {
- xmlSecKeyDataPtr data;
- CERTCertificate* cert;
- CERTSignedCrl* crl;
- xmlSecSize size, pos;
-- int content = 0;
-- int ret;
-
- xmlSecAssert2(id == xmlSecNssKeyDataX509Id, -1);
- xmlSecAssert2(key != NULL, -1);
- xmlSecAssert2(node != NULL, -1);
- xmlSecAssert2(keyInfoCtx != NULL, -1);
-
-! content = xmlSecX509DataGetNodeContent (node, 1, keyInfoCtx);
-! if (content < 0) {
-! xmlSecError(XMLSEC_ERRORS_HERE,
-! xmlSecErrorsSafeString(xmlSecKeyDataKlassGetName(id)),
-! "xmlSecX509DataGetNodeContent",
-! XMLSEC_ERRORS_R_XMLSEC_FAILED,
-! "content=%d", content);
-! return(-1);
-! } else if(content == 0) {
-! /* by default we are writing certificates and crls */
-! content = XMLSEC_X509DATA_DEFAULT;
- }
-
-- /* get x509 data */
- data = xmlSecKeyGetData(key, id);
- if(data == NULL) {
- /* no x509 data in the key */
---- 736,757 ----
- xmlSecNssKeyDataX509XmlWrite(xmlSecKeyDataId id, xmlSecKeyPtr key,
- xmlNodePtr node, xmlSecKeyInfoCtxPtr keyInfoCtx) {
- xmlSecKeyDataPtr data;
-+ xmlNodePtr cur;
-+ xmlChar* buf;
- CERTCertificate* cert;
- CERTSignedCrl* crl;
- xmlSecSize size, pos;
-
- xmlSecAssert2(id == xmlSecNssKeyDataX509Id, -1);
- xmlSecAssert2(key != NULL, -1);
- xmlSecAssert2(node != NULL, -1);
- xmlSecAssert2(keyInfoCtx != NULL, -1);
-
-! /* todo: flag in ctx remove all existing content */
-! if(0) {
-! xmlNodeSetContent(node, NULL);
- }
-
- data = xmlSecKeyGetData(key, id);
- if(data == NULL) {
- /* no x509 data in the key */
-***************
-*** 795,874 ****
- "pos=%d", pos);
- return(-1);
- }
-!
-! if((content & XMLSEC_X509DATA_CERTIFICATE_NODE) != 0) {
-! ret = xmlSecNssX509CertificateNodeWrite(cert, node, keyInfoCtx);
-! if(ret < 0) {
-! xmlSecError(XMLSEC_ERRORS_HERE,
-! xmlSecErrorsSafeString(xmlSecKeyDataKlassGetName(id)),
-! "xmlSecNssX509CertificateNodeWrite",
-! XMLSEC_ERRORS_R_XMLSEC_FAILED,
-! "pos=%d", pos);
-! return(-1);
-! }
- }
-!
-! if((content & XMLSEC_X509DATA_SUBJECTNAME_NODE) != 0) {
-! ret = xmlSecNssX509SubjectNameNodeWrite(cert, node, keyInfoCtx);
-! if(ret < 0) {
-! xmlSecError(XMLSEC_ERRORS_HERE,
-! xmlSecErrorsSafeString(xmlSecKeyDataKlassGetName(id)),
-! "xmlSecNssX509SubjectNameNodeWrite",
-! XMLSEC_ERRORS_R_XMLSEC_FAILED,
-! "pos=%d", pos);
-! return(-1);
-! }
- }
-
-! if((content & XMLSEC_X509DATA_ISSUERSERIAL_NODE) != 0) {
-! ret = xmlSecNssX509IssuerSerialNodeWrite(cert, node, keyInfoCtx);
-! if(ret < 0) {
-! xmlSecError(XMLSEC_ERRORS_HERE,
-! xmlSecErrorsSafeString(xmlSecKeyDataKlassGetName(id)),
-! "xmlSecNssX509IssuerSerialNodeWrite",
-! XMLSEC_ERRORS_R_XMLSEC_FAILED,
-! "pos=%d", pos);
-! return(-1);
-! }
-! }
-
-! if((content & XMLSEC_X509DATA_SKI_NODE) != 0) {
-! ret = xmlSecNssX509SKINodeWrite(cert, node, keyInfoCtx);
-! if(ret < 0) {
-! xmlSecError(XMLSEC_ERRORS_HERE,
-! xmlSecErrorsSafeString(xmlSecKeyDataKlassGetName(id)),
-! "xmlSecNssX509SKINodeWrite",
-! XMLSEC_ERRORS_R_XMLSEC_FAILED,
-! "pos=%d", pos);
-! return(-1);
-! }
-! }
-! }
-
-! /* write crls if needed */
-! if((content & XMLSEC_X509DATA_CRL_NODE) != 0) {
-! size = xmlSecNssKeyDataX509GetCrlsSize(data);
-! for(pos = 0; pos < size; ++pos) {
-! crl = xmlSecNssKeyDataX509GetCrl(data, pos);
-! if(crl == NULL) {
-! xmlSecError(XMLSEC_ERRORS_HERE,
-! xmlSecErrorsSafeString(xmlSecKeyDataKlassGetName(id)),
-! "xmlSecNssKeyDataX509GetCrl",
-! XMLSEC_ERRORS_R_XMLSEC_FAILED,
-! "pos=%d", pos);
-! return(-1);
-! }
-!
-! ret = xmlSecNssX509CRLNodeWrite(crl, node, keyInfoCtx);
-! if(ret < 0) {
-! xmlSecError(XMLSEC_ERRORS_HERE,
-! xmlSecErrorsSafeString(xmlSecKeyDataKlassGetName(id)),
-! "xmlSecNssX509CRLNodeWrite",
-! XMLSEC_ERRORS_R_XMLSEC_FAILED,
-! "pos=%d", pos);
-! return(-1);
-! }
-! }
- }
-
- return(0);
---- 770,844 ----
- "pos=%d", pos);
- return(-1);
- }
-!
-! /* set base64 lines size from context */
-! buf = xmlSecNssX509CertBase64DerWrite(cert, keyInfoCtx->base64LineSize);
-! if(buf == NULL) {
-! xmlSecError(XMLSEC_ERRORS_HERE,
-! xmlSecErrorsSafeString(xmlSecKeyDataKlassGetName(id)),
-! "xmlSecNssX509CertBase64DerWrite",
-! XMLSEC_ERRORS_R_XMLSEC_FAILED,
-! XMLSEC_ERRORS_NO_MESSAGE);
-! return(-1);
- }
-!
-! cur = xmlSecAddChild(node, xmlSecNodeX509Certificate, xmlSecDSigNs);
-! if(cur == NULL) {
-! xmlSecError(XMLSEC_ERRORS_HERE,
-! xmlSecErrorsSafeString(xmlSecKeyDataKlassGetName(id)),
-! "xmlSecAddChild",
-! XMLSEC_ERRORS_R_XMLSEC_FAILED,
-! "node=%s",
-! xmlSecErrorsSafeString(xmlSecNodeX509Certificate));
-! xmlFree(buf);
-! return(-1);
- }
-+ /* todo: add \n around base64 data - from context */
-+ /* todo: add errors check */
-+ xmlNodeSetContent(cur, xmlSecStringCR);
-+ xmlNodeSetContent(cur, buf);
-+ xmlFree(buf);
-+ }
-
-! /* write crls */
-! size = xmlSecNssKeyDataX509GetCrlsSize(data);
-! for(pos = 0; pos < size; ++pos) {
-! crl = xmlSecNssKeyDataX509GetCrl(data, pos);
-! if(crl == NULL) {
-! xmlSecError(XMLSEC_ERRORS_HERE,
-! xmlSecErrorsSafeString(xmlSecKeyDataKlassGetName(id)),
-! "xmlSecNssKeyDataX509GetCrl",
-! XMLSEC_ERRORS_R_XMLSEC_FAILED,
-! "pos=%d", pos);
-! return(-1);
-! }
-
-! /* set base64 lines size from context */
-! buf = xmlSecNssX509CrlBase64DerWrite(crl, keyInfoCtx->base64LineSize);
-! if(buf == NULL) {
-! xmlSecError(XMLSEC_ERRORS_HERE,
-! xmlSecErrorsSafeString(xmlSecKeyDataKlassGetName(id)),
-! "xmlSecNssX509CrlBase64DerWrite",
-! XMLSEC_ERRORS_R_XMLSEC_FAILED,
-! XMLSEC_ERRORS_NO_MESSAGE);
-! return(-1);
-! }
-
-! cur = xmlSecAddChild(node, xmlSecNodeX509CRL, xmlSecDSigNs);
-! if(cur == NULL) {
-! xmlSecError(XMLSEC_ERRORS_HERE,
-! xmlSecErrorsSafeString(xmlSecKeyDataKlassGetName(id)),
-! "xmlSecAddChild",
-! XMLSEC_ERRORS_R_XMLSEC_FAILED,
-! "new_node=%s",
-! xmlSecErrorsSafeString(xmlSecNodeX509CRL));
-! xmlFree(buf);
-! return(-1);
-! }
-! /* todo: add \n around base64 data - from context */
-! /* todo: add errors check */
-! xmlNodeSetContent(cur, xmlSecStringCR);
-! xmlNodeSetContent(cur, buf);
- }
-
- return(0);
-***************
-*** 1015,1033 ****
- xmlSecAssert2(keyInfoCtx != NULL, -1);
-
- content = xmlNodeGetContent(node);
-! if((content == NULL) || (xmlSecIsEmptyString(content) == 1)) {
-! if(content != NULL) {
-! xmlFree(content);
-! }
-! if((keyInfoCtx->flags & XMLSEC_KEYINFO_FLAGS_STOP_ON_EMPTY_NODE) != 0) {
-! xmlSecError(XMLSEC_ERRORS_HERE,
-! xmlSecErrorsSafeString(xmlSecKeyDataGetName(data)),
-! xmlSecErrorsSafeString(xmlSecNodeGetName(node)),
-! XMLSEC_ERRORS_R_INVALID_NODE_CONTENT,
-! XMLSEC_ERRORS_NO_MESSAGE);
-! return(-1);
-! }
-! return(0);
- }
-
- cert = xmlSecNssX509CertBase64DerRead(content);
---- 985,997 ----
- xmlSecAssert2(keyInfoCtx != NULL, -1);
-
- content = xmlNodeGetContent(node);
-! if(content == NULL){
-! xmlSecError(XMLSEC_ERRORS_HERE,
-! xmlSecErrorsSafeString(xmlSecKeyDataGetName(data)),
-! xmlSecErrorsSafeString(xmlSecNodeGetName(node)),
-! XMLSEC_ERRORS_R_INVALID_NODE_CONTENT,
-! XMLSEC_ERRORS_NO_MESSAGE);
-! return(-1);
- }
-
- cert = xmlSecNssX509CertBase64DerRead(content);
-***************
-*** 1057,1102 ****
- return(0);
- }
-
-- static int
-- xmlSecNssX509CertificateNodeWrite(CERTCertificate* cert, xmlNodePtr node, xmlSecKeyInfoCtxPtr keyInfoCtx) {
-- xmlChar* buf;
-- xmlNodePtr cur;
--
-- xmlSecAssert2(cert != NULL, -1);
-- xmlSecAssert2(node != NULL, -1);
-- xmlSecAssert2(keyInfoCtx != NULL, -1);
--
-- /* set base64 lines size from context */
-- buf = xmlSecNssX509CertBase64DerWrite(cert, keyInfoCtx->base64LineSize);
-- if(buf == NULL) {
-- xmlSecError(XMLSEC_ERRORS_HERE,
-- NULL,
-- "xmlSecNssX509CertBase64DerWrite",
-- XMLSEC_ERRORS_R_XMLSEC_FAILED,
-- XMLSEC_ERRORS_NO_MESSAGE);
-- return(-1);
-- }
--
-- cur = xmlSecAddChild(node, xmlSecNodeX509Certificate, xmlSecDSigNs);
-- if(cur == NULL) {
-- xmlSecError(XMLSEC_ERRORS_HERE,
-- NULL,
-- "xmlSecAddChild",
-- XMLSEC_ERRORS_R_XMLSEC_FAILED,
-- "node=%s",
-- xmlSecErrorsSafeString(xmlSecNodeX509Certificate));
-- xmlFree(buf);
-- return(-1);
-- }
--
-- /* todo: add \n around base64 data - from context */
-- /* todo: add errors check */
-- xmlNodeSetContent(cur, xmlSecStringCR);
-- xmlNodeSetContent(cur, buf);
-- xmlFree(buf);
-- return(0);
-- }
--
- static int
- xmlSecNssX509SubjectNameNodeRead(xmlSecKeyDataPtr data, xmlNodePtr node, xmlSecKeyInfoCtxPtr keyInfoCtx) {
- xmlSecKeyDataStorePtr x509Store;
---- 1021,1026 ----
-***************
-*** 1120,1138 ****
- }
-
- subject = xmlNodeGetContent(node);
-! if((subject == NULL) || (xmlSecIsEmptyString(subject) == 1)) {
-! if(subject != NULL) {
-! xmlFree(subject);
-! }
-! if((keyInfoCtx->flags & XMLSEC_KEYINFO_FLAGS_STOP_ON_EMPTY_NODE) != 0) {
-! xmlSecError(XMLSEC_ERRORS_HERE,
-! xmlSecErrorsSafeString(xmlSecKeyDataGetName(data)),
-! xmlSecErrorsSafeString(xmlSecNodeGetName(node)),
-! XMLSEC_ERRORS_R_INVALID_NODE_CONTENT,
-! XMLSEC_ERRORS_NO_MESSAGE);
-! return(-1);
-! }
-! return(0);
- }
-
- cert = xmlSecNssX509StoreFindCert(x509Store, subject, NULL, NULL, NULL, keyInfoCtx);
---- 1044,1056 ----
- }
-
- subject = xmlNodeGetContent(node);
-! if(subject == NULL) {
-! xmlSecError(XMLSEC_ERRORS_HERE,
-! xmlSecErrorsSafeString(xmlSecKeyDataGetName(data)),
-! xmlSecErrorsSafeString(xmlSecNodeGetName(node)),
-! XMLSEC_ERRORS_R_INVALID_NODE_CONTENT,
-! XMLSEC_ERRORS_NO_MESSAGE);
-! return(-1);
- }
-
- cert = xmlSecNssX509StoreFindCert(x509Store, subject, NULL, NULL, NULL, keyInfoCtx);
-***************
-*** 1167,1206 ****
- return(0);
- }
-
-- static int
-- xmlSecNssX509SubjectNameNodeWrite(CERTCertificate* cert, xmlNodePtr node, xmlSecKeyInfoCtxPtr keyInfoCtx ATTRIBUTE_UNUSED) {
-- xmlChar* buf = NULL;
-- xmlNodePtr cur = NULL;
--
-- xmlSecAssert2(cert != NULL, -1);
-- xmlSecAssert2(node != NULL, -1);
--
-- buf = xmlSecNssX509NameWrite(&(cert->subject));
-- if(buf == NULL) {
-- xmlSecError(XMLSEC_ERRORS_HERE,
-- NULL,
-- "xmlSecNssX509NameWrite(&(cert->subject))",
-- XMLSEC_ERRORS_R_XMLSEC_FAILED,
-- XMLSEC_ERRORS_NO_MESSAGE);
-- return(-1);
-- }
--
-- cur = xmlSecAddChild(node, xmlSecNodeX509SubjectName, xmlSecDSigNs);
-- if(cur == NULL) {
-- xmlSecError(XMLSEC_ERRORS_HERE,
-- NULL,
-- "xmlSecAddChild",
-- XMLSEC_ERRORS_R_XMLSEC_FAILED,
-- "node=%s",
-- xmlSecErrorsSafeString(xmlSecNodeX509SubjectName));
-- xmlFree(buf);
-- return(-1);
-- }
-- xmlNodeSetContent(cur, buf);
-- xmlFree(buf);
-- return(0);
-- }
--
- static int
- xmlSecNssX509IssuerSerialNodeRead(xmlSecKeyDataPtr data, xmlNodePtr node, xmlSecKeyInfoCtxPtr keyInfoCtx) {
- xmlSecKeyDataStorePtr x509Store;
---- 1085,1090 ----
-***************
-*** 1226,1246 ****
- }
-
- cur = xmlSecGetNextElementNode(node->children);
-! if(cur == NULL) {
-! if((keyInfoCtx->flags & XMLSEC_KEYINFO_FLAGS_STOP_ON_EMPTY_NODE) != 0) {
-! xmlSecError(XMLSEC_ERRORS_HERE,
-! xmlSecErrorsSafeString(xmlSecKeyDataGetName(data)),
-! xmlSecErrorsSafeString(xmlSecNodeX509IssuerName),
-! XMLSEC_ERRORS_R_NODE_NOT_FOUND,
-! "node=%s",
-! xmlSecErrorsSafeString(xmlSecNodeGetName(cur)));
-! return(-1);
-! }
-! return(0);
-! }
-!
- /* the first is required node X509IssuerName */
-! if(!xmlSecCheckNodeName(cur, xmlSecNodeX509IssuerName, xmlSecDSigNs)) {
- xmlSecError(XMLSEC_ERRORS_HERE,
- xmlSecErrorsSafeString(xmlSecKeyDataGetName(data)),
- xmlSecErrorsSafeString(xmlSecNodeX509IssuerName),
---- 1110,1118 ----
- }
-
- cur = xmlSecGetNextElementNode(node->children);
-!
- /* the first is required node X509IssuerName */
-! if((cur == NULL) || !xmlSecCheckNodeName(cur, xmlSecNodeX509IssuerName, xmlSecDSigNs)) {
- xmlSecError(XMLSEC_ERRORS_HERE,
- xmlSecErrorsSafeString(xmlSecKeyDataGetName(data)),
- xmlSecErrorsSafeString(xmlSecNodeX509IssuerName),
-***************
-*** 1332,1409 ****
- return(0);
- }
-
-- static int
-- xmlSecNssX509IssuerSerialNodeWrite(CERTCertificate* cert, xmlNodePtr node, xmlSecKeyInfoCtxPtr keyInfoCtx ATTRIBUTE_UNUSED) {
-- xmlNodePtr cur;
-- xmlNodePtr issuerNameNode;
-- xmlNodePtr issuerNumberNode;
-- xmlChar* buf;
--
-- xmlSecAssert2(cert != NULL, -1);
-- xmlSecAssert2(node != NULL, -1);
--
-- /* create xml nodes */
-- cur = xmlSecAddChild(node, xmlSecNodeX509IssuerSerial, xmlSecDSigNs);
-- if(cur == NULL) {
-- xmlSecError(XMLSEC_ERRORS_HERE,
-- NULL,
-- "xmlSecAddChild",
-- XMLSEC_ERRORS_R_XMLSEC_FAILED,
-- "node=%s",
-- xmlSecErrorsSafeString(xmlSecNodeX509IssuerSerial));
-- return(-1);
-- }
--
-- issuerNameNode = xmlSecAddChild(cur, xmlSecNodeX509IssuerName, xmlSecDSigNs);
-- if(issuerNameNode == NULL) {
-- xmlSecError(XMLSEC_ERRORS_HERE,
-- NULL,
-- "xmlSecAddChild",
-- XMLSEC_ERRORS_R_XMLSEC_FAILED,
-- "node=%s",
-- xmlSecErrorsSafeString(xmlSecNodeX509IssuerName));
-- return(-1);
-- }
--
-- issuerNumberNode = xmlSecAddChild(cur, xmlSecNodeX509SerialNumber, xmlSecDSigNs);
-- if(issuerNumberNode == NULL) {
-- xmlSecError(XMLSEC_ERRORS_HERE,
-- NULL,
-- "xmlSecAddChild",
-- XMLSEC_ERRORS_R_XMLSEC_FAILED,
-- "node=%s",
-- xmlSecErrorsSafeString(xmlSecNodeX509SerialNumber));
-- return(-1);
-- }
--
-- /* write data */
-- buf = xmlSecNssX509NameWrite(&(cert->issuer));
-- if(buf == NULL) {
-- xmlSecError(XMLSEC_ERRORS_HERE,
-- NULL,
-- "xmlSecNssX509NameWrite(&(cert->issuer))",
-- XMLSEC_ERRORS_R_XMLSEC_FAILED,
-- XMLSEC_ERRORS_NO_MESSAGE);
-- return(-1);
-- }
-- xmlNodeSetContent(issuerNameNode, buf);
-- xmlFree(buf);
--
-- buf = xmlSecNssASN1IntegerWrite(&(cert->serialNumber));
-- if(buf == NULL) {
-- xmlSecError(XMLSEC_ERRORS_HERE,
-- NULL,
-- "xmlSecNssASN1IntegerWrite(&(cert->serialNumber))",
-- XMLSEC_ERRORS_R_XMLSEC_FAILED,
-- XMLSEC_ERRORS_NO_MESSAGE);
-- return(-1);
-- }
-- xmlNodeSetContent(issuerNumberNode, buf);
-- xmlFree(buf);
--
-- return(0);
-- }
--
- static int
- xmlSecNssX509SKINodeRead(xmlSecKeyDataPtr data, xmlNodePtr node, xmlSecKeyInfoCtxPtr keyInfoCtx) {
- xmlSecKeyDataStorePtr x509Store;
---- 1204,1209 ----
-***************
-*** 1427,1446 ****
- }
-
- ski = xmlNodeGetContent(node);
-! if((ski == NULL) || (xmlSecIsEmptyString(ski) == 1)) {
-! if(ski != NULL) {
-! xmlFree(ski);
-! }
-! if((keyInfoCtx->flags & XMLSEC_KEYINFO_FLAGS_STOP_ON_EMPTY_NODE) != 0) {
-! xmlSecError(XMLSEC_ERRORS_HERE,
-! xmlSecErrorsSafeString(xmlSecKeyDataGetName(data)),
-! xmlSecErrorsSafeString(xmlSecNodeGetName(node)),
-! XMLSEC_ERRORS_R_INVALID_NODE_CONTENT,
-! "node=%s",
-! xmlSecErrorsSafeString(xmlSecNodeX509SKI));
-! return(-1);
-! }
-! return(0);
- }
-
- cert = xmlSecNssX509StoreFindCert(x509Store, NULL, NULL, NULL, ski, keyInfoCtx);
---- 1227,1240 ----
- }
-
- ski = xmlNodeGetContent(node);
-! if(ski == NULL) {
-! xmlSecError(XMLSEC_ERRORS_HERE,
-! xmlSecErrorsSafeString(xmlSecKeyDataGetName(data)),
-! xmlSecErrorsSafeString(xmlSecNodeGetName(node)),
-! XMLSEC_ERRORS_R_INVALID_NODE_CONTENT,
-! "node=%s",
-! xmlSecErrorsSafeString(xmlSecNodeX509SKI));
-! return(-1);
- }
-
- cert = xmlSecNssX509StoreFindCert(x509Store, NULL, NULL, NULL, ski, keyInfoCtx);
-***************
-*** 1475,1515 ****
- return(0);
- }
-
-- static int
-- xmlSecNssX509SKINodeWrite(CERTCertificate* cert, xmlNodePtr node, xmlSecKeyInfoCtxPtr keyInfoCtx ATTRIBUTE_UNUSED) {
-- xmlChar *buf = NULL;
-- xmlNodePtr cur = NULL;
--
-- xmlSecAssert2(cert != NULL, -1);
-- xmlSecAssert2(node != NULL, -1);
--
-- buf = xmlSecNssX509SKIWrite(cert);
-- if(buf == NULL) {
-- xmlSecError(XMLSEC_ERRORS_HERE,
-- NULL,
-- "xmlSecNssX509SKIWrite",
-- XMLSEC_ERRORS_R_XMLSEC_FAILED,
-- XMLSEC_ERRORS_NO_MESSAGE);
-- return(-1);
-- }
--
-- cur = xmlSecAddChild(node, xmlSecNodeX509SKI, xmlSecDSigNs);
-- if(cur == NULL) {
-- xmlSecError(XMLSEC_ERRORS_HERE,
-- NULL,
-- "xmlSecAddChild",
-- XMLSEC_ERRORS_R_XMLSEC_FAILED,
-- "new_node=%s",
-- xmlSecErrorsSafeString(xmlSecNodeX509SKI));
-- xmlFree(buf);
-- return(-1);
-- }
-- xmlNodeSetContent(cur, buf);
-- xmlFree(buf);
--
-- return(0);
-- }
--
- static int
- xmlSecNssX509CRLNodeRead(xmlSecKeyDataPtr data, xmlNodePtr node, xmlSecKeyInfoCtxPtr keyInfoCtx) {
- xmlChar *content;
---- 1269,1274 ----
-***************
-*** 1520,1538 ****
- xmlSecAssert2(keyInfoCtx != NULL, -1);
-
- content = xmlNodeGetContent(node);
-! if((content == NULL) || (xmlSecIsEmptyString(content) == 1)) {
-! if(content != NULL) {
-! xmlFree(content);
-! }
-! if((keyInfoCtx->flags & XMLSEC_KEYINFO_FLAGS_STOP_ON_EMPTY_NODE) != 0) {
-! xmlSecError(XMLSEC_ERRORS_HERE,
-! xmlSecErrorsSafeString(xmlSecKeyDataGetName(data)),
-! xmlSecErrorsSafeString(xmlSecNodeGetName(node)),
-! XMLSEC_ERRORS_R_INVALID_NODE_CONTENT,
-! XMLSEC_ERRORS_NO_MESSAGE);
-! return(-1);
-! }
-! return(0);
- }
-
- crl = xmlSecNssX509CrlBase64DerRead(content, keyInfoCtx);
---- 1279,1291 ----
- xmlSecAssert2(keyInfoCtx != NULL, -1);
-
- content = xmlNodeGetContent(node);
-! if(content == NULL){
-! xmlSecError(XMLSEC_ERRORS_HERE,
-! xmlSecErrorsSafeString(xmlSecKeyDataGetName(data)),
-! xmlSecErrorsSafeString(xmlSecNodeGetName(node)),
-! XMLSEC_ERRORS_R_INVALID_NODE_CONTENT,
-! XMLSEC_ERRORS_NO_MESSAGE);
-! return(-1);
- }
-
- crl = xmlSecNssX509CrlBase64DerRead(content, keyInfoCtx);
-***************
-*** 1552,1598 ****
- }
-
- static int
-- xmlSecNssX509CRLNodeWrite(CERTSignedCrl* crl, xmlNodePtr node, xmlSecKeyInfoCtxPtr keyInfoCtx) {
-- xmlChar* buf = NULL;
-- xmlNodePtr cur = NULL;
--
-- xmlSecAssert2(crl != NULL, -1);
-- xmlSecAssert2(node != NULL, -1);
-- xmlSecAssert2(keyInfoCtx != NULL, -1);
--
-- /* set base64 lines size from context */
-- buf = xmlSecNssX509CrlBase64DerWrite(crl, keyInfoCtx->base64LineSize);
-- if(buf == NULL) {
-- xmlSecError(XMLSEC_ERRORS_HERE,
-- NULL,
-- "xmlSecNssX509CrlBase64DerWrite",
-- XMLSEC_ERRORS_R_XMLSEC_FAILED,
-- XMLSEC_ERRORS_NO_MESSAGE);
-- return(-1);
-- }
--
-- cur = xmlSecAddChild(node, xmlSecNodeX509CRL, xmlSecDSigNs);
-- if(cur == NULL) {
-- xmlSecError(XMLSEC_ERRORS_HERE,
-- NULL,
-- "xmlSecAddChild",
-- XMLSEC_ERRORS_R_XMLSEC_FAILED,
-- "new_node=%s",
-- xmlSecErrorsSafeString(xmlSecNodeX509CRL));
-- xmlFree(buf);
-- return(-1);
-- }
-- /* todo: add \n around base64 data - from context */
-- /* todo: add errors check */
-- xmlNodeSetContent(cur, xmlSecStringCR);
-- xmlNodeSetContent(cur, buf);
-- xmlFree(buf);
--
-- return(0);
-- }
--
--
-- static int
- xmlSecNssKeyDataX509VerifyAndExtractKey(xmlSecKeyDataPtr data, xmlSecKeyPtr key,
- xmlSecKeyInfoCtxPtr keyInfoCtx) {
- xmlSecNssX509DataCtxPtr ctx;
---- 1305,1310 ----
-***************
-*** 1600,1605 ****
---- 1312,1321 ----
- int ret;
- SECStatus status;
- PRTime notBefore, notAfter;
-+
-+ PK11SlotInfo* slot ;
-+ SECKEYPublicKey *pubKey = NULL;
-+ SECKEYPrivateKey *priKey = NULL;
-
- xmlSecAssert2(xmlSecKeyDataCheckId(data, xmlSecNssKeyDataX509Id), -1);
- xmlSecAssert2(key != NULL, -1);
-***************
-*** 1632,1641 ****
- xmlSecErrorsSafeString(xmlSecKeyDataGetName(data)),
- "CERT_DupCertificate",
- XMLSEC_ERRORS_R_CRYPTO_FAILED,
-! XMLSEC_ERRORS_NO_MESSAGE);
- return(-1);
- }
-
- keyValue = xmlSecNssX509CertGetKey(ctx->keyCert);
- if(keyValue == NULL) {
- xmlSecError(XMLSEC_ERRORS_HERE,
---- 1348,1360 ----
- xmlSecErrorsSafeString(xmlSecKeyDataGetName(data)),
- "CERT_DupCertificate",
- XMLSEC_ERRORS_R_CRYPTO_FAILED,
-! "error code=%d", PORT_GetError());
- return(-1);
- }
-
-+ /*-
-+ * Get Public key from cert, which does not always work for sign action.
-+ *
- keyValue = xmlSecNssX509CertGetKey(ctx->keyCert);
- if(keyValue == NULL) {
- xmlSecError(XMLSEC_ERRORS_HERE,
-***************
-*** 1645,1650 ****
---- 1364,1417 ----
- XMLSEC_ERRORS_NO_MESSAGE);
- return(-1);
- }
-+ */
-+
-+ /*-
-+ * I'll search key according to KeyReq.
-+ */
-+ slot = cert->slot ;
-+ if( ( keyInfoCtx->keyReq.keyType & xmlSecKeyDataTypePrivate ) == xmlSecKeyDataTypePrivate ) {
-+ if( ( priKey = PK11_FindPrivateKeyFromCert( slot , cert , NULL ) ) == NULL ) {
-+ xmlSecError( XMLSEC_ERRORS_HERE ,
-+ xmlSecErrorsSafeString( xmlSecKeyDataGetName( data ) ) ,
-+ "PK11_FindPrivateKeyFromCert" ,
-+ XMLSEC_ERRORS_R_CRYPTO_FAILED ,
-+ XMLSEC_ERRORS_NO_MESSAGE ) ;
-+ return -1 ;
-+ }
-+ }
-+
-+ if( ( keyInfoCtx->keyReq.keyType & xmlSecKeyDataTypePublic ) == xmlSecKeyDataTypePublic ) {
-+ if( ( pubKey = CERT_ExtractPublicKey( cert ) ) == NULL ) {
-+ xmlSecError( XMLSEC_ERRORS_HERE ,
-+ xmlSecErrorsSafeString( xmlSecKeyDataGetName( data ) ) ,
-+ "CERT_ExtractPublicKey" ,
-+ XMLSEC_ERRORS_R_CRYPTO_FAILED ,
-+ XMLSEC_ERRORS_NO_MESSAGE ) ;
-+
-+ if( priKey != NULL )
-+ SECKEY_DestroyPrivateKey( priKey ) ;
-+ return -1 ;
-+ }
-+ }
-+
-+ keyValue = xmlSecNssPKIAdoptKey(priKey, pubKey);
-+ if( keyValue == NULL ) {
-+ xmlSecError( XMLSEC_ERRORS_HERE ,
-+ xmlSecErrorsSafeString( xmlSecKeyDataGetName( data ) ) ,
-+ "xmlSecNssPKIAdoptKey" ,
-+ XMLSEC_ERRORS_R_CRYPTO_FAILED ,
-+ XMLSEC_ERRORS_NO_MESSAGE ) ;
-+
-+ if( priKey != NULL )
-+ SECKEY_DestroyPrivateKey( priKey ) ;
-+
-+ if( pubKey != NULL )
-+ SECKEY_DestroyPublicKey( pubKey ) ;
-+
-+ return -1 ;
-+ }
-+ /* Modify keyValue get Done */
-
- /* verify that the key matches our expectations */
- if(xmlSecKeyReqMatchKeyValue(&(keyInfoCtx->keyReq), keyValue) != 1) {
-***************
-*** 1725,1738 ****
- return(0);
- }
-
-- /**
-- * xmlSecNssX509CertGetKey:
-- * @cert: the certificate.
-- *
-- * Extracts public key from the @cert.
-- *
-- * Returns public key value or NULL if an error occurs.
-- */
- xmlSecKeyDataPtr
- xmlSecNssX509CertGetKey(CERTCertificate* cert) {
- xmlSecKeyDataPtr data;
---- 1492,1497 ----
-***************
-*** 1746,1752 ****
- NULL,
- "CERT_ExtractPublicKey",
- XMLSEC_ERRORS_R_CRYPTO_FAILED,
-! XMLSEC_ERRORS_NO_MESSAGE);
- return(NULL);
- }
-
---- 1505,1511 ----
- NULL,
- "CERT_ExtractPublicKey",
- XMLSEC_ERRORS_R_CRYPTO_FAILED,
-! "error code=%d", PORT_GetError());
- return(NULL);
- }
-
-***************
-*** 1804,1810 ****
- NULL,
- "__CERT_NewTempCertificate",
- XMLSEC_ERRORS_R_CRYPTO_FAILED,
-! XMLSEC_ERRORS_NO_MESSAGE);
- return(NULL);
- }
-
---- 1563,1569 ----
- NULL,
- "__CERT_NewTempCertificate",
- XMLSEC_ERRORS_R_CRYPTO_FAILED,
-! "error code=%d", PORT_GetError());
- return(NULL);
- }
-
-***************
-*** 1827,1833 ****
- NULL,
- "cert->derCert",
- XMLSEC_ERRORS_R_CRYPTO_FAILED,
-! XMLSEC_ERRORS_NO_MESSAGE);
- return(NULL);
- }
-
---- 1586,1592 ----
- NULL,
- "cert->derCert",
- XMLSEC_ERRORS_R_CRYPTO_FAILED,
-! "error code=%d", PORT_GetError());
- return(NULL);
- }
-
-***************
-*** 1890,1896 ****
- NULL,
- "PK11_GetInternalKeySlot",
- XMLSEC_ERRORS_R_CRYPTO_FAILED,
-! XMLSEC_ERRORS_NO_MESSAGE);
- return NULL;
- }
-
---- 1649,1655 ----
- NULL,
- "PK11_GetInternalKeySlot",
- XMLSEC_ERRORS_R_CRYPTO_FAILED,
-! "error code=%d", PORT_GetError());
- return NULL;
- }
-
-***************
-*** 1905,1911 ****
- NULL,
- "PK11_ImportCRL",
- XMLSEC_ERRORS_R_CRYPTO_FAILED,
-! XMLSEC_ERRORS_NO_MESSAGE);
- PK11_FreeSlot(slot);
- return(NULL);
- }
---- 1664,1670 ----
- NULL,
- "PK11_ImportCRL",
- XMLSEC_ERRORS_R_CRYPTO_FAILED,
-! "error code=%d", PORT_GetError());
- PK11_FreeSlot(slot);
- return(NULL);
- }
-***************
-*** 1929,1935 ****
- NULL,
- "crl->derCrl",
- XMLSEC_ERRORS_R_CRYPTO_FAILED,
-! XMLSEC_ERRORS_NO_MESSAGE);
- return(NULL);
- }
-
---- 1688,1694 ----
- NULL,
- "crl->derCrl",
- XMLSEC_ERRORS_R_CRYPTO_FAILED,
-! "error code=%d", PORT_GetError());
- return(NULL);
- }
-
-***************
-*** 1946,2031 ****
- return(res);
- }
-
-- static xmlChar*
-- xmlSecNssX509NameWrite(CERTName* nm) {
-- xmlChar *res = NULL;
-- char *str;
--
-- xmlSecAssert2(nm != NULL, NULL);
--
-- str = CERT_NameToAscii(nm);
-- if (str == NULL) {
-- xmlSecError(XMLSEC_ERRORS_HERE,
-- NULL,
-- "CERT_NameToAscii",
-- XMLSEC_ERRORS_R_CRYPTO_FAILED,
-- XMLSEC_ERRORS_NO_MESSAGE);
-- return(NULL);
-- }
--
-- res = xmlStrdup(BAD_CAST str);
-- if(res == NULL) {
-- xmlSecError(XMLSEC_ERRORS_HERE,
-- NULL,
-- "xmlStrdup",
-- XMLSEC_ERRORS_R_MALLOC_FAILED,
-- XMLSEC_ERRORS_NO_MESSAGE);
-- PORT_Free(str);
-- return(NULL);
-- }
-- PORT_Free(str);
-- return(res);
-- }
--
-- static xmlChar*
-- xmlSecNssASN1IntegerWrite(SECItem *num) {
-- xmlChar *res = NULL;
--
-- xmlSecAssert2(num != NULL, NULL);
--
-- /* TODO : to be implemented after
-- * NSS bug http://bugzilla.mozilla.org/show_bug.cgi?id=212864 is fixed
-- */
-- return(res);
-- }
--
-- static xmlChar*
-- xmlSecNssX509SKIWrite(CERTCertificate* cert) {
-- xmlChar *res = NULL;
-- SECItem ski;
-- SECStatus rv;
--
-- xmlSecAssert2(cert != NULL, NULL);
--
-- memset(&ski, 0, sizeof(ski));
--
-- rv = CERT_FindSubjectKeyIDExtension(cert, &ski);
-- if (rv != SECSuccess) {
-- xmlSecError(XMLSEC_ERRORS_HERE,
-- NULL,
-- "CERT_FindSubjectKeyIDExtension",
-- XMLSEC_ERRORS_R_CRYPTO_FAILED,
-- XMLSEC_ERRORS_NO_MESSAGE);
-- SECITEM_FreeItem(&ski, PR_FALSE);
-- return(NULL);
-- }
--
-- res = xmlSecBase64Encode(ski.data, ski.len, 0);
-- if(res == NULL) {
-- xmlSecError(XMLSEC_ERRORS_HERE,
-- NULL,
-- "xmlSecBase64Encode",
-- XMLSEC_ERRORS_R_XMLSEC_FAILED,
-- XMLSEC_ERRORS_NO_MESSAGE);
-- SECITEM_FreeItem(&ski, PR_FALSE);
-- return(NULL);
-- }
-- SECITEM_FreeItem(&ski, PR_FALSE);
--
-- return(res);
-- }
--
--
- static void
- xmlSecNssX509CertDebugDump(CERTCertificate* cert, FILE* output) {
- SECItem *sn;
---- 1705,1710 ----
-***************
-*** 2084,2090 ****
---- 1763,1773 ----
- xmlSecSize bufSize,
- xmlSecKeyInfoCtxPtr keyInfoCtx);
-
-+ #ifdef __MINGW32__ // for runtime-pseudo-reloc
-+ static struct _xmlSecKeyDataKlass xmlSecNssKeyDataRawX509CertKlass = {
-+ #else
- static xmlSecKeyDataKlass xmlSecNssKeyDataRawX509CertKlass = {
-+ #endif
- sizeof(xmlSecKeyDataKlass),
- sizeof(xmlSecKeyData),
-
-*** misc/xmlsec1-1.2.6/src/nss/x509vfy.c Fri Sep 26 02:58:15 2003
---- misc/build/xmlsec1-1.2.6/src/nss/x509vfy.c Fri May 11 14:47:20 2007
-***************
-*** 30,35 ****
---- 30,36 ----
- #include <xmlsec/keyinfo.h>
- #include <xmlsec/keysmngr.h>
- #include <xmlsec/base64.h>
-+ #include <xmlsec/bn.h>
- #include <xmlsec/errors.h>
-
- #include <xmlsec/nss/crypto.h>
-***************
-*** 43,50 ****
- typedef struct _xmlSecNssX509StoreCtx xmlSecNssX509StoreCtx,
- *xmlSecNssX509StoreCtxPtr;
- struct _xmlSecNssX509StoreCtx {
-! CERTCertList* certsList; /* just keeping a reference to destroy later */
-! };
-
- /****************************************************************************
- *
---- 44,51 ----
- typedef struct _xmlSecNssX509StoreCtx xmlSecNssX509StoreCtx,
- *xmlSecNssX509StoreCtxPtr;
- struct _xmlSecNssX509StoreCtx {
-! CERTCertList* certsList; /* just keeping a reference to destroy later */
-! };
-
- /****************************************************************************
- *
-***************
-*** 54,98 ****
- *
- ***************************************************************************/
- #define xmlSecNssX509StoreGetCtx(store) \
-! ((xmlSecNssX509StoreCtxPtr)(((xmlSecByte*)(store)) + \
-! sizeof(xmlSecKeyDataStoreKlass)))
- #define xmlSecNssX509StoreSize \
-! (sizeof(xmlSecKeyDataStoreKlass) + sizeof(xmlSecNssX509StoreCtx))
-
- static int xmlSecNssX509StoreInitialize (xmlSecKeyDataStorePtr store);
- static void xmlSecNssX509StoreFinalize (xmlSecKeyDataStorePtr store);
-- static int xmlSecNssX509NameStringRead (xmlSecByte **str,
-- int *strLen,
-- xmlSecByte *res,
-- int resLen,
-- xmlSecByte delim,
-- int ingoreTrailingSpaces);
-- static xmlSecByte * xmlSecNssX509NameRead (xmlSecByte *str,
-- int len);
--
-- static void xmlSecNssNumToItem(SECItem *it, unsigned long num);
-
-
- static xmlSecKeyDataStoreKlass xmlSecNssX509StoreKlass = {
-! sizeof(xmlSecKeyDataStoreKlass),
-! xmlSecNssX509StoreSize,
-!
-! /* data */
-! xmlSecNameX509Store, /* const xmlChar* name; */
-!
-! /* constructors/destructor */
-! xmlSecNssX509StoreInitialize, /* xmlSecKeyDataStoreInitializeMethod initialize; */
-! xmlSecNssX509StoreFinalize, /* xmlSecKeyDataStoreFinalizeMethod finalize; */
-!
-! /* reserved for the future */
-! NULL, /* void* reserved0; */
-! NULL, /* void* reserved1; */
- };
-
- static CERTCertificate* xmlSecNssX509FindCert(xmlChar *subjectName,
-! xmlChar *issuerName,
-! xmlChar *issuerSerial,
-! xmlChar *ski);
-
-
- /**
---- 55,94 ----
- *
- ***************************************************************************/
- #define xmlSecNssX509StoreGetCtx(store) \
-! ((xmlSecNssX509StoreCtxPtr)(((xmlSecByte*)(store)) + \
-! sizeof(xmlSecKeyDataStoreKlass)))
- #define xmlSecNssX509StoreSize \
-! (sizeof(xmlSecKeyDataStoreKlass) + sizeof(xmlSecNssX509StoreCtx))
-
- static int xmlSecNssX509StoreInitialize (xmlSecKeyDataStorePtr store);
- static void xmlSecNssX509StoreFinalize (xmlSecKeyDataStorePtr store);
-
-+ static int xmlSecNssIntegerToItem( const xmlChar* integer , SECItem *it ) ;
-
-+ #ifdef __MINGW32__ // for runtime-pseudo-reloc
-+ static struct _xmlSecKeyDataStoreKlass xmlSecNssX509StoreKlass = {
-+ #else
- static xmlSecKeyDataStoreKlass xmlSecNssX509StoreKlass = {
-! #endif
-! sizeof(xmlSecKeyDataStoreKlass),
-! xmlSecNssX509StoreSize,
-!
-! /* data */
-! xmlSecNameX509Store, /* const xmlChar* name; */
-!
-! /* constructors/destructor */
-! xmlSecNssX509StoreInitialize, /* xmlSecKeyDataStoreInitializeMethod initialize; */
-! xmlSecNssX509StoreFinalize, /* xmlSecKeyDataStoreFinalizeMethod finalize; */
-!
-! /* reserved for the future */
-! NULL, /* void* reserved0; */
-! NULL, /* void* reserved1; */
- };
-
- static CERTCertificate* xmlSecNssX509FindCert(xmlChar *subjectName,
-! xmlChar *issuerName,
-! xmlChar *issuerSerial,
-! xmlChar *ski);
-
-
- /**
-***************
-*** 104,110 ****
- */
- xmlSecKeyDataStoreId
- xmlSecNssX509StoreGetKlass(void) {
-! return(&xmlSecNssX509StoreKlass);
- }
-
- /**
---- 100,106 ----
- */
- xmlSecKeyDataStoreId
- xmlSecNssX509StoreGetKlass(void) {
-! return(&xmlSecNssX509StoreKlass);
- }
-
- /**
-***************
-*** 125,139 ****
- xmlSecNssX509StoreFindCert(xmlSecKeyDataStorePtr store, xmlChar *subjectName,
- xmlChar *issuerName, xmlChar *issuerSerial,
- xmlChar *ski, xmlSecKeyInfoCtx* keyInfoCtx) {
-! xmlSecNssX509StoreCtxPtr ctx;
-!
-! xmlSecAssert2(xmlSecKeyDataStoreCheckId(store, xmlSecNssX509StoreId), NULL);
-! xmlSecAssert2(keyInfoCtx != NULL, NULL);
-
-! ctx = xmlSecNssX509StoreGetCtx(store);
-! xmlSecAssert2(ctx != NULL, NULL);
-
-! return(xmlSecNssX509FindCert(subjectName, issuerName, issuerSerial, ski));
- }
-
- /**
---- 121,135 ----
- xmlSecNssX509StoreFindCert(xmlSecKeyDataStorePtr store, xmlChar *subjectName,
- xmlChar *issuerName, xmlChar *issuerSerial,
- xmlChar *ski, xmlSecKeyInfoCtx* keyInfoCtx) {
-! xmlSecNssX509StoreCtxPtr ctx;
-!
-! xmlSecAssert2(xmlSecKeyDataStoreCheckId(store, xmlSecNssX509StoreId), NULL);
-! xmlSecAssert2(keyInfoCtx != NULL, NULL);
-
-! ctx = xmlSecNssX509StoreGetCtx(store);
-! xmlSecAssert2(ctx != NULL, NULL);
-
-! return(xmlSecNssX509FindCert(subjectName, issuerName, issuerSerial, ski));
- }
-
- /**
-***************
-*** 148,263 ****
- */
- CERTCertificate *
- xmlSecNssX509StoreVerify(xmlSecKeyDataStorePtr store, CERTCertList* certs,
-! xmlSecKeyInfoCtx* keyInfoCtx) {
-! xmlSecNssX509StoreCtxPtr ctx;
-! CERTCertListNode* head;
-! CERTCertificate* cert = NULL;
-! CERTCertListNode* head1;
-! CERTCertificate* cert1 = NULL;
-! SECStatus status = SECFailure;
-! int64 timeboundary;
-! int64 tmp1, tmp2;
-!
-! xmlSecAssert2(xmlSecKeyDataStoreCheckId(store, xmlSecNssX509StoreId), NULL);
-! xmlSecAssert2(certs != NULL, NULL);
-! xmlSecAssert2(keyInfoCtx != NULL, NULL);
-!
-! ctx = xmlSecNssX509StoreGetCtx(store);
-! xmlSecAssert2(ctx != NULL, NULL);
-!
-! for (head = CERT_LIST_HEAD(certs);
-! !CERT_LIST_END(head, certs);
-! head = CERT_LIST_NEXT(head)) {
-! cert = head->cert;
- if(keyInfoCtx->certsVerificationTime > 0) {
-! /* convert the time since epoch in seconds to microseconds */
-! LL_UI2L(timeboundary, keyInfoCtx->certsVerificationTime);
-! tmp1 = (int64)PR_USEC_PER_SEC;
-! tmp2 = timeboundary;
-! LL_MUL(timeboundary, tmp1, tmp2);
- } else {
-! timeboundary = PR_Now();
- }
-
- /* if cert is the issuer of any other cert in the list, then it is
- * to be skipped */
- for (head1 = CERT_LIST_HEAD(certs);
-! !CERT_LIST_END(head1, certs);
-! head1 = CERT_LIST_NEXT(head1)) {
-
-! cert1 = head1->cert;
-! if (cert1 == cert) {
- continue;
-! }
-
-! if (SECITEM_CompareItem(&cert1->derIssuer, &cert->derSubject)
-! == SECEqual) {
- break;
-! }
- }
-
- if (!CERT_LIST_END(head1, certs)) {
-! continue;
- }
-!
-! status = CERT_VerifyCertificate(CERT_GetDefaultCertDB(),
-! cert, PR_FALSE,
-! (SECCertificateUsage)0,
-! timeboundary , NULL, NULL, NULL);
-! if (status == SECSuccess) {
-! break;
- }
-- }
-
-! if (status == SECSuccess) {
- return (cert);
-! }
-!
-! switch(PORT_GetError()) {
- case SEC_ERROR_EXPIRED_ISSUER_CERTIFICATE:
- case SEC_ERROR_CA_CERT_INVALID:
- case SEC_ERROR_UNKNOWN_SIGNER:
-! xmlSecError(XMLSEC_ERRORS_HERE,
-! xmlSecErrorsSafeString(xmlSecKeyDataStoreGetName(store)),
-! NULL,
-! XMLSEC_ERRORS_R_CERT_ISSUER_FAILED,
-! "cert with subject name %s could not be verified because the issuer's cert is expired/invalid or not found",
-! cert->subjectName);
-! break;
- case SEC_ERROR_EXPIRED_CERTIFICATE:
-! xmlSecError(XMLSEC_ERRORS_HERE,
-! xmlSecErrorsSafeString(xmlSecKeyDataStoreGetName(store)),
-! NULL,
-! XMLSEC_ERRORS_R_CERT_HAS_EXPIRED,
-! "cert with subject name %s has expired",
-! cert->subjectName);
-! break;
- case SEC_ERROR_REVOKED_CERTIFICATE:
-! xmlSecError(XMLSEC_ERRORS_HERE,
-! xmlSecErrorsSafeString(xmlSecKeyDataStoreGetName(store)),
-! NULL,
-! XMLSEC_ERRORS_R_CERT_REVOKED,
-! "cert with subject name %s has been revoked",
-! cert->subjectName);
-! break;
- default:
-! xmlSecError(XMLSEC_ERRORS_HERE,
-! xmlSecErrorsSafeString(xmlSecKeyDataStoreGetName(store)),
-! NULL,
-! XMLSEC_ERRORS_R_CERT_VERIFY_FAILED,
-! "cert with subject name %s could not be verified",
-! cert->subjectName);
-! break;
-! }
+ goto done;
+ }
+@@ -1472,7 +1525,7 @@
-! return (NULL);
- }
-
- /**
- * xmlSecNssX509StoreAdoptCert:
-! * @store: the pointer to X509 key data store klass.
-! * @cert: the pointer to NSS X509 certificate.
-! * @type: the certificate type (trusted/untrusted).
- *
- * Adds trusted (root) or untrusted certificate to the store.
- *
---- 144,273 ----
- */
- CERTCertificate *
- xmlSecNssX509StoreVerify(xmlSecKeyDataStorePtr store, CERTCertList* certs,
-! xmlSecKeyInfoCtx* keyInfoCtx) {
-! xmlSecNssX509StoreCtxPtr ctx;
-! CERTCertListNode* head;
-! CERTCertificate* cert = NULL;
-! CERTCertListNode* head1;
-! CERTCertificate* cert1 = NULL;
-! SECStatus status = SECFailure;
-! int64 timeboundary;
-! int64 tmp1, tmp2;
-!
-! xmlSecAssert2(xmlSecKeyDataStoreCheckId(store, xmlSecNssX509StoreId), NULL);
-! xmlSecAssert2(certs != NULL, NULL);
-! xmlSecAssert2(keyInfoCtx != NULL, NULL);
-!
-! ctx = xmlSecNssX509StoreGetCtx(store);
-! xmlSecAssert2(ctx != NULL, NULL);
-!
-! for (head = CERT_LIST_HEAD(certs);
-! !CERT_LIST_END(head, certs);
-! head = CERT_LIST_NEXT(head)) {
-! cert = head->cert;
- if(keyInfoCtx->certsVerificationTime > 0) {
-! /* convert the time since epoch in seconds to microseconds */
-! LL_UI2L(timeboundary, keyInfoCtx->certsVerificationTime);
-! tmp1 = (int64)PR_USEC_PER_SEC;
-! tmp2 = timeboundary;
-! LL_MUL(timeboundary, tmp1, tmp2);
- } else {
-! timeboundary = PR_Now();
- }
-
- /* if cert is the issuer of any other cert in the list, then it is
- * to be skipped */
- for (head1 = CERT_LIST_HEAD(certs);
-! !CERT_LIST_END(head1, certs);
-! head1 = CERT_LIST_NEXT(head1)) {
-
-! cert1 = head1->cert;
-! if (cert1 == cert) {
- continue;
-! }
-
-! if (SECITEM_CompareItem(&cert1->derIssuer, &cert->derSubject)
-! == SECEqual) {
- break;
-! }
- }
-
- if (!CERT_LIST_END(head1, certs)) {
-! continue;
- }
-! /* JL: OpenOffice.org implements its own certificate verification routine.
-! The goal is to seperate validation of the signature
-! and the certificate. For example, OOo could show that the document signature is valid,
-! but the certificate could not be verified. If we do not prevent the verification of
-! the certificate by libxmlsec and the verification fails, then the XML signature may not be
-! verified. This would happen, for example, if the root certificate is not installed.
-!
-! In the store schould only be the certificate from the X509Certificate element
-! and the X509IssuerSerial element. The latter is only there
-! if the certificate is installed. Both certificates must be the same!
-! In case of writing the signature, the store contains only the certificate that
-! was created based on the information from the X509IssuerSerial element. */
-! status = SECSuccess;
-! break;
-! /* status = CERT_VerifyCertificate(CERT_GetDefaultCertDB(),
-! cert, PR_FALSE,
-! (SECCertificateUsage)0,
-! timeboundary , NULL, NULL, NULL);
-! if (status == SECSuccess) {
-! break;
-! } */
- }
-
-! if (status == SECSuccess) {
- return (cert);
-! }
-!
-! switch(PORT_GetError()) {
- case SEC_ERROR_EXPIRED_ISSUER_CERTIFICATE:
- case SEC_ERROR_CA_CERT_INVALID:
- case SEC_ERROR_UNKNOWN_SIGNER:
-! xmlSecError(XMLSEC_ERRORS_HERE,
-! xmlSecErrorsSafeString(xmlSecKeyDataStoreGetName(store)),
-! NULL,
-! XMLSEC_ERRORS_R_CERT_ISSUER_FAILED,
-! "cert with subject name %s could not be verified because the issuer's cert is expired/invalid or not found",
-! cert->subjectName);
-! break;
- case SEC_ERROR_EXPIRED_CERTIFICATE:
-! xmlSecError(XMLSEC_ERRORS_HERE,
-! xmlSecErrorsSafeString(xmlSecKeyDataStoreGetName(store)),
-! NULL,
-! XMLSEC_ERRORS_R_CERT_HAS_EXPIRED,
-! "cert with subject name %s has expired",
-! cert->subjectName);
-! break;
- case SEC_ERROR_REVOKED_CERTIFICATE:
-! xmlSecError(XMLSEC_ERRORS_HERE,
-! xmlSecErrorsSafeString(xmlSecKeyDataStoreGetName(store)),
-! NULL,
-! XMLSEC_ERRORS_R_CERT_REVOKED,
-! "cert with subject name %s has been revoked",
-! cert->subjectName);
-! break;
- default:
-! xmlSecError(XMLSEC_ERRORS_HERE,
-! xmlSecErrorsSafeString(xmlSecKeyDataStoreGetName(store)),
-! NULL,
-! XMLSEC_ERRORS_R_CERT_VERIFY_FAILED,
-! "cert with subject name %s could not be verified, errcode %d",
-! cert->subjectName,
-! PORT_GetError());
-! break;
-! }
+ ctx = xmlSecNssPKIKeyDataGetCtx(data);
+ xmlSecAssert2(ctx != NULL, -1);
+- xmlSecAssert2(SECKEY_GetPublicKeyType(ctx->pubkey) == rsaKey, -1);
++/* xmlSecAssert2(SECKEY_GetPublicKeyType(ctx->pubkey) == rsaKey, -1);*/
+ if (ctx->privkey != NULL) {
+ return(xmlSecKeyDataTypePrivate | xmlSecKeyDataTypePublic);
+ } else {
+@@ -1490,7 +1543,7 @@
+
+ ctx = xmlSecNssPKIKeyDataGetCtx(data);
+ xmlSecAssert2(ctx != NULL, -1);
+- xmlSecAssert2(SECKEY_GetPublicKeyType(ctx->pubkey) == rsaKey, -1);
++/* xmlSecAssert2(SECKEY_GetPublicKeyType(ctx->pubkey) == rsaKey, -1);*/
+
+ return(8 * SECKEY_PublicKeyStrength(ctx->pubkey));
+ }
+--- misc/xmlsec1-1.2.6/src/nss/signatures.c 2003-09-26 02:58:15.000000000 +0200
++++ misc/build/xmlsec1-1.2.6/src/nss/signatures.c 2008-06-29 23:44:19.000000000 +0200
+@@ -199,7 +199,7 @@
+ xmlSecErrorsSafeString(xmlSecTransformGetName(transform)),
+ "SGN_NewContext",
+ XMLSEC_ERRORS_R_CRYPTO_FAILED,
+- XMLSEC_ERRORS_NO_MESSAGE);
++ "error code=%d", PORT_GetError());
+ return(-1);
+ }
+ } else {
+@@ -222,7 +222,7 @@
+ xmlSecErrorsSafeString(xmlSecTransformGetName(transform)),
+ "VFY_CreateContext",
+ XMLSEC_ERRORS_R_CRYPTO_FAILED,
+- XMLSEC_ERRORS_NO_MESSAGE);
++ "error code=%d", PORT_GetError());
+ return(-1);
+ }
+ }
+@@ -282,7 +282,7 @@
+ xmlSecErrorsSafeString(xmlSecTransformGetName(transform)),
+ "VFY_Update, VFY_End",
+ XMLSEC_ERRORS_R_CRYPTO_FAILED,
+- XMLSEC_ERRORS_NO_MESSAGE);
++ "error code=%d", PORT_GetError());
+
+ if (PORT_GetError() == SEC_ERROR_PKCS7_BAD_SIGNATURE) {
+ xmlSecError(XMLSEC_ERRORS_HERE,
+@@ -341,7 +341,7 @@
+ xmlSecErrorsSafeString(xmlSecTransformGetName(transform)),
+ "SGN_Begin",
+ XMLSEC_ERRORS_R_CRYPTO_FAILED,
+- XMLSEC_ERRORS_NO_MESSAGE);
++ "error code=%d", PORT_GetError());
+ return(-1);
+ }
+ } else {
+@@ -351,7 +351,7 @@
+ xmlSecErrorsSafeString(xmlSecTransformGetName(transform)),
+ "VFY_Begin",
+ XMLSEC_ERRORS_R_CRYPTO_FAILED,
+- XMLSEC_ERRORS_NO_MESSAGE);
++ "error code=%d", PORT_GetError());
+ return(-1);
+ }
+ }
+@@ -368,7 +368,7 @@
+ xmlSecErrorsSafeString(xmlSecTransformGetName(transform)),
+ "SGN_Update",
+ XMLSEC_ERRORS_R_CRYPTO_FAILED,
+- XMLSEC_ERRORS_NO_MESSAGE);
++ "error code=%d", PORT_GetError());
+ return(-1);
+ }
+ } else {
+@@ -378,7 +378,7 @@
+ xmlSecErrorsSafeString(xmlSecTransformGetName(transform)),
+ "VFY_Update",
+ XMLSEC_ERRORS_R_CRYPTO_FAILED,
+- XMLSEC_ERRORS_NO_MESSAGE);
++ "error code=%d", PORT_GetError());
+ return(-1);
+ }
+ }
+@@ -404,7 +404,7 @@
+ xmlSecErrorsSafeString(xmlSecTransformGetName(transform)),
+ "SGN_End",
+ XMLSEC_ERRORS_R_CRYPTO_FAILED,
+- XMLSEC_ERRORS_NO_MESSAGE);
++ "error code=%d", PORT_GetError());
+ return(-1);
+ }
+
+@@ -459,7 +459,11 @@
+ *
+ ***************************************************************************/
+
++#ifdef __MINGW32__ // for runtime-pseudo-reloc
++static struct _xmlSecTransformKlass xmlSecNssDsaSha1Klass = {
++#else
+ static xmlSecTransformKlass xmlSecNssDsaSha1Klass = {
++#endif
+ /* klass/object sizes */
+ sizeof(xmlSecTransformKlass), /* xmlSecSize klassSize */
+ xmlSecNssSignatureSize, /* xmlSecSize objSize */
+@@ -506,7 +510,11 @@
+ * RSA-SHA1 signature transform
+ *
+ ***************************************************************************/
++#ifdef __MINGW32__ // for runtime-pseudo-reloc
++static struct _xmlSecTransformKlass xmlSecNssRsaSha1Klass = {
++#else
+ static xmlSecTransformKlass xmlSecNssRsaSha1Klass = {
++#endif
+ /* klass/object sizes */
+ sizeof(xmlSecTransformKlass), /* xmlSecSize klassSize */
+ xmlSecNssSignatureSize, /* xmlSecSize objSize */
+--- misc/xmlsec1-1.2.6/src/nss/symkeys.c 2003-07-21 05:12:52.000000000 +0200
++++ misc/build/xmlsec1-1.2.6/src/nss/symkeys.c 2008-06-29 23:44:19.000000000 +0200
+@@ -15,178 +15,837 @@
+ #include <stdio.h>
+ #include <string.h>
+
++#include <pk11func.h>
++#include <nss.h>
++
+ #include <xmlsec/xmlsec.h>
+ #include <xmlsec/xmltree.h>
++#include <xmlsec/base64.h>
+ #include <xmlsec/keys.h>
+ #include <xmlsec/keyinfo.h>
+ #include <xmlsec/transforms.h>
+ #include <xmlsec/errors.h>
+
+ #include <xmlsec/nss/crypto.h>
++#include <xmlsec/nss/ciphers.h>
++#include <xmlsec/nss/tokens.h>
+
+ /*****************************************************************************
+ *
+- * Symmetic (binary) keys - just a wrapper for xmlSecKeyDataBinary
++ * Symmetic (binary) keys - a wrapper over slot information and PK11SymKey
+ *
+ ****************************************************************************/
+-static int xmlSecNssSymKeyDataInitialize (xmlSecKeyDataPtr data);
+-static int xmlSecNssSymKeyDataDuplicate (xmlSecKeyDataPtr dst,
+- xmlSecKeyDataPtr src);
+-static void xmlSecNssSymKeyDataFinalize (xmlSecKeyDataPtr data);
+-static int xmlSecNssSymKeyDataXmlRead (xmlSecKeyDataId id,
+- xmlSecKeyPtr key,
+- xmlNodePtr node,
+- xmlSecKeyInfoCtxPtr keyInfoCtx);
+-static int xmlSecNssSymKeyDataXmlWrite (xmlSecKeyDataId id,
+- xmlSecKeyPtr key,
+- xmlNodePtr node,
+- xmlSecKeyInfoCtxPtr keyInfoCtx);
+-static int xmlSecNssSymKeyDataBinRead (xmlSecKeyDataId id,
+- xmlSecKeyPtr key,
+- const xmlSecByte* buf,
+- xmlSecSize bufSize,
+- xmlSecKeyInfoCtxPtr keyInfoCtx);
+-static int xmlSecNssSymKeyDataBinWrite (xmlSecKeyDataId id,
+- xmlSecKeyPtr key,
+- xmlSecByte** buf,
+- xmlSecSize* bufSize,
+- xmlSecKeyInfoCtxPtr keyInfoCtx);
+-static int xmlSecNssSymKeyDataGenerate (xmlSecKeyDataPtr data,
+- xmlSecSize sizeBits,
+- xmlSecKeyDataType type);
+-
+-static xmlSecKeyDataType xmlSecNssSymKeyDataGetType (xmlSecKeyDataPtr data);
+-static xmlSecSize xmlSecNssSymKeyDataGetSize (xmlSecKeyDataPtr data);
+-static void xmlSecNssSymKeyDataDebugDump (xmlSecKeyDataPtr data,
+- FILE* output);
+-static void xmlSecNssSymKeyDataDebugXmlDump (xmlSecKeyDataPtr data,
+- FILE* output);
+-static int xmlSecNssSymKeyDataKlassCheck (xmlSecKeyDataKlass* klass);
++typedef struct _xmlSecNssSymKeyDataCtx xmlSecNssSymKeyDataCtx ;
++typedef struct _xmlSecNssSymKeyDataCtx* xmlSecNssSymKeyDataCtxPtr ;
++
++struct _xmlSecNssSymKeyDataCtx {
++ CK_MECHANISM_TYPE cipher ; /* the symmetic key mechanism */
++ PK11SlotInfo* slot ; /* the key resident slot */
++ PK11SymKey* symkey ; /* the symmetic key */
++} ;
++
++#define xmlSecNssSymKeyDataSize \
++ ( sizeof( xmlSecKeyData ) + sizeof( xmlSecNssSymKeyDataCtx ) )
++
++#define xmlSecNssSymKeyDataGetCtx( data ) \
++ ( ( xmlSecNssSymKeyDataCtxPtr )( ( ( xmlSecByte* )( data ) ) + sizeof( xmlSecKeyData ) ) )
++
++
++static int xmlSecNssSymKeyDataInitialize (xmlSecKeyDataPtr data);
++static int xmlSecNssSymKeyDataDuplicate (xmlSecKeyDataPtr dst,
++ xmlSecKeyDataPtr src);
++static void xmlSecNssSymKeyDataFinalize (xmlSecKeyDataPtr data);
++static int xmlSecNssSymKeyDataXmlRead (xmlSecKeyDataId id,
++ xmlSecKeyPtr key,
++ xmlNodePtr node,
++ xmlSecKeyInfoCtxPtr keyInfoCtx);
++static int xmlSecNssSymKeyDataXmlWrite (xmlSecKeyDataId id,
++ xmlSecKeyPtr key,
++ xmlNodePtr node,
++ xmlSecKeyInfoCtxPtr keyInfoCtx);
++static int xmlSecNssSymKeyDataBinRead (xmlSecKeyDataId id,
++ xmlSecKeyPtr key,
++ const xmlSecByte* buf,
++ xmlSecSize bufSize,
++ xmlSecKeyInfoCtxPtr keyInfoCtx);
++static int xmlSecNssSymKeyDataBinWrite (xmlSecKeyDataId id,
++ xmlSecKeyPtr key,
++ xmlSecByte** buf,
++ xmlSecSize* bufSize,
++ xmlSecKeyInfoCtxPtr keyInfoCtx);
++static int xmlSecNssSymKeyDataGenerate (xmlSecKeyDataPtr data,
++ xmlSecSize sizeBits,
++ xmlSecKeyDataType type);
++
++static xmlSecKeyDataType xmlSecNssSymKeyDataGetType (xmlSecKeyDataPtr data);
++static xmlSecSize xmlSecNssSymKeyDataGetSize (xmlSecKeyDataPtr data);
++static void xmlSecNssSymKeyDataDebugDump (xmlSecKeyDataPtr data,
++ FILE* output);
++static void xmlSecNssSymKeyDataDebugXmlDump (xmlSecKeyDataPtr data,
++ FILE* output);
++static int xmlSecNssSymKeyDataKlassCheck (xmlSecKeyDataKlass* klass);
+
+ #define xmlSecNssSymKeyDataCheckId(data) \
+ (xmlSecKeyDataIsValid((data)) && \
+ xmlSecNssSymKeyDataKlassCheck((data)->id))
+
++/**
++ * xmlSecNssSymKeyDataAdoptKey:
++ * @data: the pointer to symmetric key data.
++ * @symkey: the symmetric key
++ *
++ * Set the value of symmetric key data.
++ *
++ * Returns 0 on success or a negative value if an error occurs.
++ */
++int
++xmlSecNssSymKeyDataAdoptKey(
++ xmlSecKeyDataPtr data ,
++ PK11SymKey* symkey
++) {
++ xmlSecNssSymKeyDataCtxPtr context = NULL ;
++
++ xmlSecAssert2( xmlSecNssSymKeyDataCheckId( data ), -1 ) ;
++ xmlSecAssert2( xmlSecKeyDataCheckSize( data, xmlSecNssSymKeyDataSize ), -1 ) ;
++ xmlSecAssert2( symkey != NULL, -1 ) ;
++
++ context = xmlSecNssSymKeyDataGetCtx( data ) ;
++ xmlSecAssert2(context != NULL, -1);
++
++ context->cipher = PK11_GetMechanism( symkey ) ;
++
++ if( context->slot != NULL ) {
++ PK11_FreeSlot( context->slot ) ;
++ context->slot = NULL ;
++ }
++ context->slot = PK11_GetSlotFromKey( symkey ) ;
++
++ if( context->symkey != NULL ) {
++ PK11_FreeSymKey( context->symkey ) ;
++ context->symkey = NULL ;
++ }
++ context->symkey = PK11_ReferenceSymKey( symkey ) ;
++
++ return 0 ;
++}
++
++xmlSecKeyDataPtr xmlSecNssSymKeyDataKeyAdopt(
++ PK11SymKey* symKey
++) {
++ xmlSecKeyDataPtr data = NULL ;
++ CK_MECHANISM_TYPE mechanism = CKM_INVALID_MECHANISM ;
++
++ xmlSecAssert2( symKey != NULL , NULL ) ;
++
++ mechanism = PK11_GetMechanism( symKey ) ;
++ switch( mechanism ) {
++ case CKM_DES3_KEY_GEN :
++ case CKM_DES3_CBC :
++ case CKM_DES3_MAC :
++ data = xmlSecKeyDataCreate( xmlSecNssKeyDataDesId ) ;
++ if( data == NULL ) {
++ xmlSecError( XMLSEC_ERRORS_HERE ,
++ NULL ,
++ "xmlSecKeyDataCreate" ,
++ XMLSEC_ERRORS_R_CRYPTO_FAILED ,
++ "xmlSecNssKeyDataDesId" ) ;
++ return NULL ;
++ }
++ break ;
++ case CKM_AES_KEY_GEN :
++ case CKM_AES_CBC :
++ case CKM_AES_MAC :
++ data = xmlSecKeyDataCreate( xmlSecNssKeyDataAesId ) ;
++ if( data == NULL ) {
++ xmlSecError( XMLSEC_ERRORS_HERE ,
++ NULL ,
++ "xmlSecKeyDataCreate" ,
++ XMLSEC_ERRORS_R_CRYPTO_FAILED ,
++ "xmlSecNssKeyDataDesId" ) ;
++ return NULL ;
++ }
++ break ;
++ default :
++ xmlSecError( XMLSEC_ERRORS_HERE ,
++ NULL ,
++ NULL ,
++ XMLSEC_ERRORS_R_CRYPTO_FAILED ,
++ "Unsupported mechanism" ) ;
++ return NULL ;
++ }
++
++ if( xmlSecNssSymKeyDataAdoptKey( data , symKey ) < 0 ) {
++ xmlSecError( XMLSEC_ERRORS_HERE ,
++ NULL ,
++ "xmlSecNssSymKeyDataAdoptKey" ,
++ XMLSEC_ERRORS_R_CRYPTO_FAILED ,
++ XMLSEC_ERRORS_NO_MESSAGE ) ;
++
++ xmlSecKeyDataDestroy( data ) ;
++ return NULL ;
++ }
++
++ return data ;
++}
++
++
++PK11SymKey*
++xmlSecNssSymKeyDataGetKey(
++ xmlSecKeyDataPtr data
++) {
++ xmlSecNssSymKeyDataCtxPtr ctx;
++ PK11SymKey* symkey ;
++
++ xmlSecAssert2(xmlSecNssSymKeyDataCheckId(data), NULL);
++ xmlSecAssert2(xmlSecKeyDataCheckSize(data, xmlSecNssSymKeyDataSize), NULL);
++
++ ctx = xmlSecNssSymKeyDataGetCtx(data);
++ xmlSecAssert2(ctx != NULL, NULL);
++
++ if( ctx->symkey != NULL ) {
++ symkey = PK11_ReferenceSymKey( ctx->symkey ) ;
++ } else {
++ symkey = NULL ;
++ }
++
++ return(symkey);
++}
++
+ static int
+ xmlSecNssSymKeyDataInitialize(xmlSecKeyDataPtr data) {
++ xmlSecNssSymKeyDataCtxPtr ctx;
++
+ xmlSecAssert2(xmlSecNssSymKeyDataCheckId(data), -1);
+-
+- return(xmlSecKeyDataBinaryValueInitialize(data));
++ xmlSecAssert2(xmlSecKeyDataCheckSize(data, xmlSecNssSymKeyDataSize), -1);
++
++ ctx = xmlSecNssSymKeyDataGetCtx(data);
++ xmlSecAssert2(ctx != NULL, -1);
++
++ memset( ctx, 0, sizeof(xmlSecNssSymKeyDataCtx));
++
++ /* Set the block cipher mechanism */
++#ifndef XMLSEC_NO_DES
++ if(xmlSecKeyDataCheckId(data, xmlSecNssKeyDataDesId)) {
++ ctx->cipher = CKM_DES3_KEY_GEN;
++ } else
++#endif /* XMLSEC_NO_DES */
++
++#ifndef XMLSEC_NO_AES
++ if(xmlSecKeyDataCheckId(data, xmlSecNssKeyDataDesId)) {
++ ctx->cipher = CKM_AES_KEY_GEN;
++ } else
++#endif /* XMLSEC_NO_AES */
++
++ if(1) {
++ xmlSecError( XMLSEC_ERRORS_HERE ,
++ xmlSecErrorsSafeString(xmlSecKeyDataGetName(data)),
++ NULL ,
++ XMLSEC_ERRORS_R_XMLSEC_FAILED ,
++ "Unsupported block cipher" ) ;
++ return(-1) ;
++ }
++
++ return(0);
+ }
+
+ static int
+ xmlSecNssSymKeyDataDuplicate(xmlSecKeyDataPtr dst, xmlSecKeyDataPtr src) {
++ xmlSecNssSymKeyDataCtxPtr ctxDst;
++ xmlSecNssSymKeyDataCtxPtr ctxSrc;
++
+ xmlSecAssert2(xmlSecNssSymKeyDataCheckId(dst), -1);
++ xmlSecAssert2(xmlSecKeyDataCheckSize(dst, xmlSecNssSymKeyDataSize), -1);
+ xmlSecAssert2(xmlSecNssSymKeyDataCheckId(src), -1);
++ xmlSecAssert2(xmlSecKeyDataCheckSize(src, xmlSecNssSymKeyDataSize), -1);
+ xmlSecAssert2(dst->id == src->id, -1);
+-
+- return(xmlSecKeyDataBinaryValueDuplicate(dst, src));
++
++ ctxDst = xmlSecNssSymKeyDataGetCtx(dst);
++ xmlSecAssert2(ctxDst != NULL, -1);
++
++ ctxSrc = xmlSecNssSymKeyDataGetCtx(src);
++ xmlSecAssert2(ctxSrc != NULL, -1);
++
++ ctxDst->cipher = ctxSrc->cipher ;
++
++ if( ctxSrc->slot != NULL ) {
++ if( ctxDst->slot != NULL && ctxDst->slot != ctxSrc->slot ) {
++ PK11_FreeSlot( ctxDst->slot ) ;
++ ctxDst->slot = NULL ;
++ }
++
++ if( ctxDst->slot == NULL && ctxSrc->slot != NULL )
++ ctxDst->slot = PK11_ReferenceSlot( ctxSrc->slot ) ;
++ } else {
++ if( ctxDst->slot != NULL ) {
++ PK11_FreeSlot( ctxDst->slot ) ;
++ ctxDst->slot = NULL ;
++ }
++ }
++
++ if( ctxSrc->symkey != NULL ) {
++ if( ctxDst->symkey != NULL && ctxDst->symkey != ctxSrc->symkey ) {
++ PK11_FreeSymKey( ctxDst->symkey ) ;
++ ctxDst->symkey = NULL ;
++ }
++
++ if( ctxDst->symkey == NULL && ctxSrc->symkey != NULL )
++ ctxDst->symkey = PK11_ReferenceSymKey( ctxSrc->symkey ) ;
++ } else {
++ if( ctxDst->symkey != NULL ) {
++ PK11_FreeSymKey( ctxDst->symkey ) ;
++ ctxDst->symkey = NULL ;
++ }
++ }
++
++ return(0);
+ }
+
+ static void
+ xmlSecNssSymKeyDataFinalize(xmlSecKeyDataPtr data) {
++ xmlSecNssSymKeyDataCtxPtr ctx;
++
+ xmlSecAssert(xmlSecNssSymKeyDataCheckId(data));
+-
+- xmlSecKeyDataBinaryValueFinalize(data);
++ xmlSecAssert(xmlSecKeyDataCheckSize(data, xmlSecNssSymKeyDataSize));
++
++ ctx = xmlSecNssSymKeyDataGetCtx(data);
++ xmlSecAssert(ctx != NULL);
++
++ if( ctx->slot != NULL ) {
++ PK11_FreeSlot( ctx->slot ) ;
++ ctx->slot = NULL ;
++ }
++
++ if( ctx->symkey != NULL ) {
++ PK11_FreeSymKey( ctx->symkey ) ;
++ ctx->symkey = NULL ;
++ }
++
++ ctx->cipher = CKM_INVALID_MECHANISM ;
+ }
+
+ static int
+ xmlSecNssSymKeyDataXmlRead(xmlSecKeyDataId id, xmlSecKeyPtr key,
+- xmlNodePtr node, xmlSecKeyInfoCtxPtr keyInfoCtx) {
+- xmlSecAssert2(xmlSecNssSymKeyDataKlassCheck(id), -1);
++ xmlNodePtr node, xmlSecKeyInfoCtxPtr keyInfoCtx) {
++ PK11SymKey* symKey ;
++ PK11SlotInfo* slot ;
++ xmlSecBufferPtr keyBuf;
++ xmlSecSize len;
++ xmlSecKeyDataPtr data;
++ xmlSecNssSymKeyDataCtxPtr ctx;
++ SECItem keyItem ;
++ int ret;
++
++ xmlSecAssert2(id != xmlSecKeyDataIdUnknown, -1);
++ xmlSecAssert2(key != NULL, -1);
++ xmlSecAssert2(node != NULL, -1);
++ xmlSecAssert2(keyInfoCtx != NULL, -1);
++
++ /* Create a new KeyData from a id */
++ data = xmlSecKeyDataCreate(id);
++ if(data == NULL ) {
++ xmlSecError(XMLSEC_ERRORS_HERE,
++ xmlSecErrorsSafeString(xmlSecKeyDataKlassGetName(id)),
++ "xmlSecKeyDataCreate",
++ XMLSEC_ERRORS_R_XMLSEC_FAILED,
++ XMLSEC_ERRORS_NO_MESSAGE);
++ return(-1);
++ }
++
++ ctx = xmlSecNssSymKeyDataGetCtx(data);
++ xmlSecAssert2(ctx != NULL, -1);
++
++ /* Create a buffer for raw symmetric key value */
++ if( ( keyBuf = xmlSecBufferCreate( 128 ) ) == NULL ) {
++ xmlSecError( XMLSEC_ERRORS_HERE ,
++ xmlSecErrorsSafeString(xmlSecKeyDataKlassGetName(id)),
++ "xmlSecBufferCreate" ,
++ XMLSEC_ERRORS_R_XMLSEC_FAILED ,
++ XMLSEC_ERRORS_NO_MESSAGE ) ;
++ xmlSecKeyDataDestroy( data ) ;
++ return(-1) ;
++ }
++
++ /* Read the raw key value */
++ if( xmlSecBufferBase64NodeContentRead( keyBuf , node ) < 0 ) {
++ xmlSecError( XMLSEC_ERRORS_HERE ,
++ xmlSecErrorsSafeString(xmlSecKeyDataKlassGetName(id)),
++ xmlSecErrorsSafeString(xmlSecNodeGetName(node)),
++ XMLSEC_ERRORS_R_XMLSEC_FAILED ,
++ XMLSEC_ERRORS_NO_MESSAGE ) ;
++
++ xmlSecBufferDestroy( keyBuf ) ;
++ xmlSecKeyDataDestroy( data ) ;
++ return(-1) ;
++ }
++
++ /* Get slot */
++ slot = xmlSecNssSlotGet(ctx->cipher);
++ if( slot == NULL ) {
++ xmlSecError( XMLSEC_ERRORS_HERE ,
++ xmlSecErrorsSafeString(xmlSecKeyDataKlassGetName(id)),
++ "xmlSecNssSlotGet" ,
++ XMLSEC_ERRORS_R_XMLSEC_FAILED ,
++ XMLSEC_ERRORS_NO_MESSAGE ) ;
++
++ xmlSecBufferDestroy( keyBuf ) ;
++ xmlSecKeyDataDestroy( data ) ;
++ return(-1) ;
++ }
++
++ /* Wrap the raw key value SECItem */
++ keyItem.type = siBuffer ;
++ keyItem.data = xmlSecBufferGetData( keyBuf ) ;
++ keyItem.len = xmlSecBufferGetSize( keyBuf ) ;
++
++ /* Import the raw key into slot temporalily and get the key handler*/
++ symKey = PK11_ImportSymKey(slot, ctx->cipher, PK11_OriginGenerated, CKA_VALUE, &keyItem, NULL ) ;
++ if( symKey == NULL ) {
++ xmlSecError( XMLSEC_ERRORS_HERE ,
++ xmlSecErrorsSafeString(xmlSecKeyDataKlassGetName(id)),
++ "PK11_ImportSymKey" ,
++ XMLSEC_ERRORS_R_XMLSEC_FAILED ,
++ XMLSEC_ERRORS_NO_MESSAGE ) ;
++
++ PK11_FreeSlot( slot ) ;
++ xmlSecBufferDestroy( keyBuf ) ;
++ xmlSecKeyDataDestroy( data ) ;
++ return(-1) ;
++ }
++ PK11_FreeSlot( slot ) ;
++
++ /* raw key material has been copied into symKey, it isn't used any more */
++ xmlSecBufferDestroy( keyBuf ) ;
-! return (NULL);
- }
-
- /**
- * xmlSecNssX509StoreAdoptCert:
-! * @store: the pointer to X509 key data store klass.
-! * @cert: the pointer to NSS X509 certificate.
-! * @type: the certificate type (trusted/untrusted).
- *
- * Adds trusted (root) or untrusted certificate to the store.
- *
-***************
-*** 265,331 ****
- */
- int
- xmlSecNssX509StoreAdoptCert(xmlSecKeyDataStorePtr store, CERTCertificate* cert, xmlSecKeyDataType type ATTRIBUTE_UNUSED) {
-! xmlSecNssX509StoreCtxPtr ctx;
-! int ret;
-
-! xmlSecAssert2(xmlSecKeyDataStoreCheckId(store, xmlSecNssX509StoreId), -1);
-! xmlSecAssert2(cert != NULL, -1);
-
-! ctx = xmlSecNssX509StoreGetCtx(store);
-! xmlSecAssert2(ctx != NULL, -1);
-
-! if(ctx->certsList == NULL) {
-! ctx->certsList = CERT_NewCertList();
-! if(ctx->certsList == NULL) {
-! xmlSecError(XMLSEC_ERRORS_HERE,
-! xmlSecErrorsSafeString(xmlSecKeyDataStoreGetName(store)),
-! "CERT_NewCertList",
-! XMLSEC_ERRORS_R_CRYPTO_FAILED,
-! XMLSEC_ERRORS_NO_MESSAGE);
-! return(-1);
-! }
-! }
-!
-! ret = CERT_AddCertToListTail(ctx->certsList, cert);
-! if(ret != SECSuccess) {
-! xmlSecError(XMLSEC_ERRORS_HERE,
-! xmlSecErrorsSafeString(xmlSecKeyDataStoreGetName(store)),
-! "CERT_AddCertToListTail",
-! XMLSEC_ERRORS_R_CRYPTO_FAILED,
-! XMLSEC_ERRORS_NO_MESSAGE);
-! return(-1);
-! }
-
-! return(0);
- }
-
- static int
- xmlSecNssX509StoreInitialize(xmlSecKeyDataStorePtr store) {
-! xmlSecNssX509StoreCtxPtr ctx;
-! xmlSecAssert2(xmlSecKeyDataStoreCheckId(store, xmlSecNssX509StoreId), -1);
-
-! ctx = xmlSecNssX509StoreGetCtx(store);
-! xmlSecAssert2(ctx != NULL, -1);
-
-! memset(ctx, 0, sizeof(xmlSecNssX509StoreCtx));
-
-! return(0);
- }
-
- static void
- xmlSecNssX509StoreFinalize(xmlSecKeyDataStorePtr store) {
-! xmlSecNssX509StoreCtxPtr ctx;
-! xmlSecAssert(xmlSecKeyDataStoreCheckId(store, xmlSecNssX509StoreId));
-
-! ctx = xmlSecNssX509StoreGetCtx(store);
-! xmlSecAssert(ctx != NULL);
-!
-! if (ctx->certsList) {
- CERT_DestroyCertList(ctx->certsList);
- ctx->certsList = NULL;
-! }
-
-! memset(ctx, 0, sizeof(xmlSecNssX509StoreCtx));
- }
-
-
---- 275,341 ----
- */
- int
- xmlSecNssX509StoreAdoptCert(xmlSecKeyDataStorePtr store, CERTCertificate* cert, xmlSecKeyDataType type ATTRIBUTE_UNUSED) {
-! xmlSecNssX509StoreCtxPtr ctx;
-! int ret;
-
-! xmlSecAssert2(xmlSecKeyDataStoreCheckId(store, xmlSecNssX509StoreId), -1);
-! xmlSecAssert2(cert != NULL, -1);
-
-! ctx = xmlSecNssX509StoreGetCtx(store);
-! xmlSecAssert2(ctx != NULL, -1);
-
-! if(ctx->certsList == NULL) {
-! ctx->certsList = CERT_NewCertList();
-! if(ctx->certsList == NULL) {
-! xmlSecError(XMLSEC_ERRORS_HERE,
-! xmlSecErrorsSafeString(xmlSecKeyDataStoreGetName(store)),
-! "CERT_NewCertList",
-! XMLSEC_ERRORS_R_CRYPTO_FAILED,
-! "error code=%d", PORT_GetError());
-! return(-1);
-! }
-! }
-
-! ret = CERT_AddCertToListTail(ctx->certsList, cert);
-! if(ret != SECSuccess) {
-! xmlSecError(XMLSEC_ERRORS_HERE,
-! xmlSecErrorsSafeString(xmlSecKeyDataStoreGetName(store)),
-! "CERT_AddCertToListTail",
-! XMLSEC_ERRORS_R_CRYPTO_FAILED,
-! "error code=%d", PORT_GetError());
-! return(-1);
-! }
-!
-! return(0);
- }
-
- static int
- xmlSecNssX509StoreInitialize(xmlSecKeyDataStorePtr store) {
-! xmlSecNssX509StoreCtxPtr ctx;
-! xmlSecAssert2(xmlSecKeyDataStoreCheckId(store, xmlSecNssX509StoreId), -1);
-
-! ctx = xmlSecNssX509StoreGetCtx(store);
-! xmlSecAssert2(ctx != NULL, -1);
-
-! memset(ctx, 0, sizeof(xmlSecNssX509StoreCtx));
-
-! return(0);
- }
-
- static void
- xmlSecNssX509StoreFinalize(xmlSecKeyDataStorePtr store) {
-! xmlSecNssX509StoreCtxPtr ctx;
-! xmlSecAssert(xmlSecKeyDataStoreCheckId(store, xmlSecNssX509StoreId));
-
-! ctx = xmlSecNssX509StoreGetCtx(store);
-! xmlSecAssert(ctx != NULL);
-!
-! if (ctx->certsList) {
- CERT_DestroyCertList(ctx->certsList);
- ctx->certsList = NULL;
-! }
-
-! memset(ctx, 0, sizeof(xmlSecNssX509StoreCtx));
- }
-
-
-***************
-*** 340,715 ****
- */
- static CERTCertificate*
- xmlSecNssX509FindCert(xmlChar *subjectName, xmlChar *issuerName,
-! xmlChar *issuerSerial, xmlChar *ski) {
-! CERTCertificate *cert = NULL;
-! xmlChar *p = NULL;
-! CERTName *name = NULL;
-! SECItem *nameitem = NULL;
-! PRArenaPool *arena = NULL;
-!
-! if (subjectName != NULL) {
-! p = xmlSecNssX509NameRead(subjectName, xmlStrlen(subjectName));
-! if (p == NULL) {
-! xmlSecError(XMLSEC_ERRORS_HERE,
-! NULL,
-! "xmlSecNssX509NameRead",
-! XMLSEC_ERRORS_R_XMLSEC_FAILED,
-! "subject=%s",
-! xmlSecErrorsSafeString(subjectName));
-! goto done;
-! }
-!
-! arena = PORT_NewArena(DER_DEFAULT_CHUNKSIZE);
-! if (arena == NULL) {
-! xmlSecError(XMLSEC_ERRORS_HERE,
-! NULL,
-! "PORT_NewArena",
-! XMLSEC_ERRORS_R_CRYPTO_FAILED,
-! XMLSEC_ERRORS_NO_MESSAGE);
-! goto done;
-! }
-!
-! name = CERT_AsciiToName((char*)p);
-! if (name == NULL) {
-! xmlSecError(XMLSEC_ERRORS_HERE,
-! NULL,
-! "CERT_AsciiToName",
-! XMLSEC_ERRORS_R_XMLSEC_FAILED,
-! XMLSEC_ERRORS_NO_MESSAGE);
-! goto done;
-! }
-!
-! nameitem = SEC_ASN1EncodeItem(arena, NULL, (void *)name,
-! SEC_ASN1_GET(CERT_NameTemplate));
-! if (nameitem == NULL) {
-! xmlSecError(XMLSEC_ERRORS_HERE,
-! NULL,
-! "SEC_ASN1EncodeItem",
-! XMLSEC_ERRORS_R_XMLSEC_FAILED,
-! XMLSEC_ERRORS_NO_MESSAGE);
-! goto done;
-! }
-!
-! cert = CERT_FindCertByName(CERT_GetDefaultCertDB(), nameitem);
-! goto done;
-! }
-!
-! if((issuerName != NULL) && (issuerSerial != NULL)) {
-! CERTIssuerAndSN issuerAndSN;
-!
-! p = xmlSecNssX509NameRead(issuerName, xmlStrlen(issuerName));
-! if (p == NULL) {
-! xmlSecError(XMLSEC_ERRORS_HERE,
-! NULL,
-! "xmlSecNssX509NameRead",
-! XMLSEC_ERRORS_R_XMLSEC_FAILED,
-! "issuer=%s",
-! xmlSecErrorsSafeString(issuerName));
-! goto done;
-! }
-!
-! arena = PORT_NewArena(DER_DEFAULT_CHUNKSIZE);
-! if (arena == NULL) {
-! xmlSecError(XMLSEC_ERRORS_HERE,
-! NULL,
-! "PORT_NewArena",
-! XMLSEC_ERRORS_R_CRYPTO_FAILED,
-! XMLSEC_ERRORS_NO_MESSAGE);
-! goto done;
-! }
-!
-! name = CERT_AsciiToName((char*)p);
-! if (name == NULL) {
-! xmlSecError(XMLSEC_ERRORS_HERE,
-! NULL,
-! "CERT_AsciiToName",
-! XMLSEC_ERRORS_R_XMLSEC_FAILED,
-! XMLSEC_ERRORS_NO_MESSAGE);
-! goto done;
-! }
-!
-! nameitem = SEC_ASN1EncodeItem(arena, NULL, (void *)name,
-! SEC_ASN1_GET(CERT_NameTemplate));
-! if (nameitem == NULL) {
-! xmlSecError(XMLSEC_ERRORS_HERE,
-! NULL,
-! "SEC_ASN1EncodeItem",
-! XMLSEC_ERRORS_R_XMLSEC_FAILED,
-! XMLSEC_ERRORS_NO_MESSAGE);
-! goto done;
-! }
-!
-! memset(&issuerAndSN, 0, sizeof(issuerAndSN));
-
-! issuerAndSN.derIssuer.data = nameitem->data;
-! issuerAndSN.derIssuer.len = nameitem->len;
-
-! /* TBD: serial num can be arbitrarily long */
-! xmlSecNssNumToItem(&issuerAndSN.serialNumber, PORT_Atoi((char *)issuerSerial));
-
-! cert = CERT_FindCertByIssuerAndSN(CERT_GetDefaultCertDB(),
-! &issuerAndSN);
-! SECITEM_FreeItem(&issuerAndSN.serialNumber, PR_FALSE);
-! goto done;
-! }
-!
-! if(ski != NULL) {
-! SECItem subjKeyID;
-! int len;
-!
-! len = xmlSecBase64Decode(ski, (xmlSecByte*)ski, xmlStrlen(ski));
-! if(len < 0) {
-! xmlSecError(XMLSEC_ERRORS_HERE,
-! NULL,
-! "xmlSecBase64Decode",
-! XMLSEC_ERRORS_R_XMLSEC_FAILED,
-! "ski=%s",
-! xmlSecErrorsSafeString(ski));
-! goto done;
-! }
-!
-! memset(&subjKeyID, 0, sizeof(subjKeyID));
-! subjKeyID.data = ski;
-! subjKeyID.len = xmlStrlen(ski);
-! cert = CERT_FindCertBySubjectKeyID(CERT_GetDefaultCertDB(),
-! &subjKeyID);
-! }
-
-! done:
-! if (p != NULL) {
-! PORT_Free(p);
-! }
-! if (arena != NULL) {
-! PORT_FreeArena(arena, PR_FALSE);
-! }
-! if (name != NULL) {
-! CERT_DestroyName(name);
-! }
-
-! return(cert);
-! }
-
-! /**
-! * xmlSecNssX509NameRead:
-! */
-! static xmlSecByte *
-! xmlSecNssX509NameRead(xmlSecByte *str, int len) {
-! xmlSecByte name[256];
-! xmlSecByte value[256];
-! xmlSecByte *retval = NULL;
-! xmlSecByte *p = NULL;
-! int nameLen, valueLen;
-!
-! xmlSecAssert2(str != NULL, NULL);
-!
-! /* return string should be no longer than input string */
-! retval = (xmlSecByte *)PORT_Alloc(len+1);
-! if(retval == NULL) {
-! xmlSecError(XMLSEC_ERRORS_HERE,
-! NULL,
-! "PORT_Alloc",
-! XMLSEC_ERRORS_R_MALLOC_FAILED,
-! XMLSEC_ERRORS_NO_MESSAGE);
-! return(NULL);
-! }
-! p = retval;
-!
-! while(len > 0) {
-! /* skip spaces after comma or semicolon */
-! while((len > 0) && isspace(*str)) {
-! ++str; --len;
-! }
-!
-! nameLen = xmlSecNssX509NameStringRead(&str, &len, name, sizeof(name), '=', 0);
-! if(nameLen < 0) {
-! xmlSecError(XMLSEC_ERRORS_HERE,
-! NULL,
-! "xmlSecNssX509NameStringRead",
-! XMLSEC_ERRORS_R_XMLSEC_FAILED,
-! XMLSEC_ERRORS_NO_MESSAGE);
-! goto done;
-! }
-! memcpy(p, name, nameLen);
-! p+=nameLen;
-! *p++='=';
-! if(len > 0) {
-! ++str; --len;
-! if((*str) == '\"') {
-! valueLen = xmlSecNssX509NameStringRead(&str, &len,
-! value, sizeof(value), '"', 1);
-! if(valueLen < 0) {
-! xmlSecError(XMLSEC_ERRORS_HERE,
- NULL,
-! "xmlSecNssX509NameStringRead",
- XMLSEC_ERRORS_R_XMLSEC_FAILED,
-! XMLSEC_ERRORS_NO_MESSAGE);
-! goto done;
-! }
-! /* skip spaces before comma or semicolon */
-! while((len > 0) && isspace(*str)) {
-! ++str; --len;
- }
-! if((len > 0) && ((*str) != ',')) {
-! xmlSecError(XMLSEC_ERRORS_HERE,
-! NULL,
-! NULL,
-! XMLSEC_ERRORS_R_INVALID_DATA,
-! "comma is expected");
-! goto done;
-! }
-! if(len > 0) {
-! ++str; --len;
- }
-! *p++='\"';
-! memcpy(p, value, valueLen);
-! p+=valueLen;
-! *p++='\"';
-! } else if((*str) == '#') {
-! /* TODO: read octect values */
-! xmlSecError(XMLSEC_ERRORS_HERE,
-! NULL,
-! NULL,
-! XMLSEC_ERRORS_R_INVALID_DATA,
-! "reading octect values is not implemented yet");
-! goto done;
-! } else {
-! valueLen = xmlSecNssX509NameStringRead(&str, &len,
-! value, sizeof(value), ',', 1);
-! if(valueLen < 0) {
-! xmlSecError(XMLSEC_ERRORS_HERE,
- NULL,
-! "xmlSecNssX509NameStringRead",
- XMLSEC_ERRORS_R_XMLSEC_FAILED,
-! XMLSEC_ERRORS_NO_MESSAGE);
-! goto done;
-! }
-! memcpy(p, value, valueLen);
-! p+=valueLen;
-! if (len > 0)
-! *p++=',';
-! }
-! } else {
-! valueLen = 0;
- }
-! if(len > 0) {
-! ++str; --len;
-! }
-! }
-!
-! *p = 0;
-! return(retval);
-!
- done:
-! PORT_Free(retval);
-! return (NULL);
- }
-
-
-
-! /**
-! * xmlSecNssX509NameStringRead:
-! */
-! static int
-! xmlSecNssX509NameStringRead(xmlSecByte **str, int *strLen,
-! xmlSecByte *res, int resLen,
-! xmlSecByte delim, int ingoreTrailingSpaces) {
-! xmlSecByte *p, *q, *nonSpace;
-!
-! xmlSecAssert2(str != NULL, -1);
-! xmlSecAssert2(strLen != NULL, -1);
-! xmlSecAssert2(res != NULL, -1);
-!
-! p = (*str);
-! nonSpace = q = res;
-! while(((p - (*str)) < (*strLen)) && ((*p) != delim) && ((q - res) < resLen)) {
-! if((*p) != '\\') {
-! if(ingoreTrailingSpaces && !isspace(*p)) {
-! nonSpace = q;
-! }
-! *(q++) = *(p++);
-! } else {
-! ++p;
-! nonSpace = q;
-! if(xmlSecIsHex((*p))) {
-! if((p - (*str) + 1) >= (*strLen)) {
-! xmlSecError(XMLSEC_ERRORS_HERE,
-! NULL,
-! NULL,
-! XMLSEC_ERRORS_R_INVALID_DATA,
-! "two hex digits expected");
-! return(-1);
-! }
-! *(q++) = xmlSecGetHex(p[0]) * 16 + xmlSecGetHex(p[1]);
-! p += 2;
-! } else {
-! if(((++p) - (*str)) >= (*strLen)) {
-! xmlSecError(XMLSEC_ERRORS_HERE,
-! NULL,
-! NULL,
-! XMLSEC_ERRORS_R_INVALID_DATA,
-! "escaped symbol missed");
-! return(-1);
-! }
-! *(q++) = *(p++);
-! }
-! }
-! }
-! if(((p - (*str)) < (*strLen)) && ((*p) != delim)) {
-! xmlSecError(XMLSEC_ERRORS_HERE,
-! NULL,
-! NULL,
-! XMLSEC_ERRORS_R_INVALID_SIZE,
-! "buffer is too small");
-! return(-1);
-! }
-! (*strLen) -= (p - (*str));
-! (*str) = p;
-! return((ingoreTrailingSpaces) ? nonSpace - res + 1 : q - res);
-! }
-
-! /* code lifted from NSS */
-! static void
-! xmlSecNssNumToItem(SECItem *it, unsigned long ui)
-! {
-! unsigned char bb[5];
-! int len;
-!
-! bb[0] = 0;
-! bb[1] = (unsigned char) (ui >> 24);
-! bb[2] = (unsigned char) (ui >> 16);
-! bb[3] = (unsigned char) (ui >> 8);
-! bb[4] = (unsigned char) (ui);
-!
-! /*
-! ** Small integers are encoded in a single byte. Larger integers
-! ** require progressively more space.
-! */
-! if (ui > 0x7f) {
-! if (ui > 0x7fff) {
-! if (ui > 0x7fffffL) {
-! if (ui >= 0x80000000L) {
-! len = 5;
-! } else {
-! len = 4;
-! }
-! } else {
-! len = 3;
-! }
-! } else {
-! len = 2;
-! }
-! } else {
-! len = 1;
-! }
-!
-! it->data = (unsigned char *)PORT_Alloc(len);
-! if (it->data == NULL) {
-! return;
-! }
-
-! it->len = len;
-! PORT_Memcpy(it->data, bb + (sizeof(bb) - len), len);
- }
-- #endif /* XMLSEC_NO_X509 */
-
-
---- 350,562 ----
- */
- static CERTCertificate*
- xmlSecNssX509FindCert(xmlChar *subjectName, xmlChar *issuerName,
-! xmlChar *issuerSerial, xmlChar *ski) {
-! CERTCertificate *cert = NULL;
-! CERTName *name = NULL;
-! SECItem *nameitem = NULL;
-! PRArenaPool *arena = NULL;
-!
-! if (subjectName != NULL) {
-! arena = PORT_NewArena(DER_DEFAULT_CHUNKSIZE);
-! if (arena == NULL) {
-! xmlSecError(XMLSEC_ERRORS_HERE,
-! NULL,
-! "PORT_NewArena",
-! XMLSEC_ERRORS_R_CRYPTO_FAILED,
-! "error code=%d", PORT_GetError());
-! goto done;
-! }
-
-! name = CERT_AsciiToName((char*)subjectName);
-! if (name == NULL) {
-! xmlSecError(XMLSEC_ERRORS_HERE,
-! NULL,
-! "CERT_AsciiToName",
-! XMLSEC_ERRORS_R_XMLSEC_FAILED,
-! "error code=%d", PORT_GetError());
-! goto done;
-! }
-
-! nameitem = SEC_ASN1EncodeItem(arena, NULL, (void *)name,
-! SEC_ASN1_GET(CERT_NameTemplate));
-! if (nameitem == NULL) {
-! xmlSecError(XMLSEC_ERRORS_HERE,
-! NULL,
-! "SEC_ASN1EncodeItem",
-! XMLSEC_ERRORS_R_XMLSEC_FAILED,
-! "error code=%d", PORT_GetError());
-! goto done;
-! }
-
-! cert = CERT_FindCertByName(CERT_GetDefaultCertDB(), nameitem);
-! goto done;
-! }
-
-! if((issuerName != NULL) && (issuerSerial != NULL)) {
-! CERTIssuerAndSN issuerAndSN;
-
-! arena = PORT_NewArena(DER_DEFAULT_CHUNKSIZE);
-! if (arena == NULL) {
-! xmlSecError(XMLSEC_ERRORS_HERE,
-! NULL,
-! "PORT_NewArena",
-! XMLSEC_ERRORS_R_CRYPTO_FAILED,
-! "error code=%d", PORT_GetError());
-! goto done;
-! }
-
-! name = CERT_AsciiToName((char*)issuerName);
-! if (name == NULL) {
-! xmlSecError(XMLSEC_ERRORS_HERE,
- NULL,
-! "CERT_AsciiToName",
- XMLSEC_ERRORS_R_XMLSEC_FAILED,
-! "error code=%d", PORT_GetError());
-! goto done;
- }
-!
-! nameitem = SEC_ASN1EncodeItem(arena, NULL, (void *)name,
-! SEC_ASN1_GET(CERT_NameTemplate));
-! if (nameitem == NULL) {
-! xmlSecError(XMLSEC_ERRORS_HERE,
-! NULL,
-! "SEC_ASN1EncodeItem",
-! XMLSEC_ERRORS_R_XMLSEC_FAILED,
-! "error code=%d", PORT_GetError());
-! goto done;
- }
-!
-! memset(&issuerAndSN, 0, sizeof(issuerAndSN));
-!
-! issuerAndSN.derIssuer.data = nameitem->data;
-! issuerAndSN.derIssuer.len = nameitem->len;
-!
-! if( xmlSecNssIntegerToItem( issuerSerial, &issuerAndSN.serialNumber ) < 0 ) {
-! xmlSecError(XMLSEC_ERRORS_HERE,
- NULL,
-! "xmlSecNssIntegerToItem",
- XMLSEC_ERRORS_R_XMLSEC_FAILED,
-! "serial number=%s",
-! xmlSecErrorsSafeString(issuerSerial));
-! goto done;
-! }
-!
-! cert = CERT_FindCertByIssuerAndSN(CERT_GetDefaultCertDB(),
-! &issuerAndSN);
-! SECITEM_FreeItem(&issuerAndSN.serialNumber, PR_FALSE);
-! goto done;
-! }
-!
-! if(ski != NULL) {
-! SECItem subjKeyID;
-! int len;
-!
-! len = xmlSecBase64Decode(ski, (xmlSecByte*)ski, xmlStrlen(ski));
-! if(len < 0) {
-! xmlSecError(XMLSEC_ERRORS_HERE,
-! NULL,
-! "xmlSecBase64Decode",
-! XMLSEC_ERRORS_R_XMLSEC_FAILED,
-! "ski=%s",
-! xmlSecErrorsSafeString(ski));
-! goto done;
-! }
-!
-! memset(&subjKeyID, 0, sizeof(subjKeyID));
-! subjKeyID.data = ski;
-! subjKeyID.len = xmlStrlen(ski);
-! cert = CERT_FindCertBySubjectKeyID(CERT_GetDefaultCertDB(),
-! &subjKeyID);
- }
-!
- done:
-! if (arena != NULL) {
-! PORT_FreeArena(arena, PR_FALSE);
-! }
-! if (name != NULL) {
-! CERT_DestroyName(name);
-! }
-!
-! return(cert);
- }
-
-+ static int
-+ xmlSecNssIntegerToItem(
-+ const xmlChar* integer ,
-+ SECItem *item
-+ ) {
-+ xmlSecBn bn ;
-+ xmlSecSize i, length ;
-+ const xmlSecByte* bnInteger ;
-
-+ xmlSecAssert2( integer != NULL, -1 ) ;
-+ xmlSecAssert2( item != NULL, -1 ) ;
-
-! if( xmlSecBnInitialize( &bn, 0 ) < 0 ) {
-! xmlSecError( XMLSEC_ERRORS_HERE,
-! NULL,
-! "xmlSecBnInitialize",
-! XMLSEC_ERRORS_R_INVALID_DATA,
-! XMLSEC_ERRORS_NO_MESSAGE ) ;
-! return -1 ;
-! }
-
-! if( xmlSecBnFromDecString( &bn, integer ) < 0 ) {
-! xmlSecError( XMLSEC_ERRORS_HERE,
-! NULL,
-! "xmlSecBnFromDecString",
-! XMLSEC_ERRORS_R_INVALID_DATA,
-! XMLSEC_ERRORS_NO_MESSAGE ) ;
-!
-! xmlSecBnFinalize( &bn ) ;
-! return -1 ;
-! }
-!
-! length = xmlSecBnGetSize( &bn ) ;
-! if( length <= 0 ) {
-! xmlSecError( XMLSEC_ERRORS_HERE,
-! NULL,
-! "xmlSecBnGetSize",
-! XMLSEC_ERRORS_R_INVALID_DATA,
-! XMLSEC_ERRORS_NO_MESSAGE ) ;
-!
-! xmlSecBnFinalize( &bn ) ;
-! return -1 ;
-! }
-!
-! bnInteger = xmlSecBnGetData( &bn ) ;
-! if( bnInteger == NULL ) {
-! xmlSecError( XMLSEC_ERRORS_HERE,
-! NULL,
-! "xmlSecBnGetData",
-! XMLSEC_ERRORS_R_INVALID_DATA,
-! XMLSEC_ERRORS_NO_MESSAGE ) ;
-
-! xmlSecBnFinalize( &bn ) ;
-! return -1 ;
-! }
-!
-! item->data = ( unsigned char * )PORT_Alloc( length );
-! if( item->data == NULL ) {
-! xmlSecError( XMLSEC_ERRORS_HERE,
-! NULL,
-! "PORT_Alloc",
-! XMLSEC_ERRORS_R_INVALID_DATA,
-! XMLSEC_ERRORS_NO_MESSAGE ) ;
-!
-! xmlSecBnFinalize( &bn ) ;
-! return -1 ;
-! }
-!
-! item->len = length;
-!
-! for( i = 0 ; i < length ; i ++ )
-! item->data[i] = *( bnInteger + i ) ;
-!
-! xmlSecBnFinalize( &bn ) ;
-!
-! return 0 ;
- }
-
-+ #endif /* XMLSEC_NO_X509 */
-
-*** misc/xmlsec1-1.2.6/win32/Makefile.msvc Wed Jun 9 16:35:12 2004
---- misc/build/xmlsec1-1.2.6/win32/Makefile.msvc Fri May 11 14:47:20 2007
-***************
-*** 223,228 ****
---- 223,232 ----
- $(XMLSEC_OPENSSL_INTDIR_A)\x509vfy.obj
-
- XMLSEC_NSS_OBJS = \
-+ $(XMLSEC_NSS_INTDIR)\akmngr.obj\
-+ $(XMLSEC_NSS_INTDIR)\keytrans.obj\
-+ $(XMLSEC_NSS_INTDIR)\keywrapers.obj\
-+ $(XMLSEC_NSS_INTDIR)\tokens.obj\
- $(XMLSEC_NSS_INTDIR)\app.obj\
- $(XMLSEC_NSS_INTDIR)\bignum.obj\
- $(XMLSEC_NSS_INTDIR)\ciphers.obj \
-***************
-*** 235,243 ****
- $(XMLSEC_NSS_INTDIR)\x509.obj\
- $(XMLSEC_NSS_INTDIR)\x509vfy.obj\
- $(XMLSEC_NSS_INTDIR)\keysstore.obj\
-- $(XMLSEC_NSS_INTDIR)\kt_rsa.obj\
-- $(XMLSEC_NSS_INTDIR)\kw_des.obj\
-- $(XMLSEC_NSS_INTDIR)\kw_aes.obj\
- $(XMLSEC_NSS_INTDIR)\strings.obj
- XMLSEC_NSS_OBJS_A = \
- $(XMLSEC_NSS_INTDIR_A)\app.obj\
---- 239,244 ----
-***************
-*** 258,263 ****
---- 259,265 ----
- $(XMLSEC_NSS_INTDIR_A)\strings.obj
-
- XMLSEC_MSCRYPTO_OBJS = \
-+ $(XMLSEC_MSCRYPTO_INTDIR)\akmngr.obj\
- $(XMLSEC_MSCRYPTO_INTDIR)\app.obj\
- $(XMLSEC_MSCRYPTO_INTDIR)\crypto.obj \
- $(XMLSEC_MSCRYPTO_INTDIR)\ciphers.obj \
-***************
-*** 376,382 ****
- XMLSEC_OPENSSL_SOLIBS = libeay32.lib wsock32.lib kernel32.lib user32.lib gdi32.lib
- XMLSEC_OPENSSL_ALIBS = libeay32.lib wsock32.lib kernel32.lib user32.lib gdi32.lib
-
-! XMLSEC_NSS_SOLIBS = smime3.lib ssl3.lib nss3.lib libnspr4.lib libplds4.lib libplc4.lib kernel32.lib user32.lib gdi32.lib
- XMLSEC_NSS_ALIBS = smime3.lib ssl3.lib nss3.lib libnspr4_s.lib libplds4_s.lib libplc4_s.lib kernel32.lib user32.lib gdi32.lib
-
- XMLSEC_MSCRYPTO_SOLIBS = kernel32.lib user32.lib gdi32.lib Crypt32.lib Advapi32.lib
---- 378,384 ----
- XMLSEC_OPENSSL_SOLIBS = libeay32.lib wsock32.lib kernel32.lib user32.lib gdi32.lib
- XMLSEC_OPENSSL_ALIBS = libeay32.lib wsock32.lib kernel32.lib user32.lib gdi32.lib
-
-! XMLSEC_NSS_SOLIBS = smime3.lib nss3.lib nspr4.lib kernel32.lib user32.lib gdi32.lib
- XMLSEC_NSS_ALIBS = smime3.lib ssl3.lib nss3.lib libnspr4_s.lib libplds4_s.lib libplc4_s.lib kernel32.lib user32.lib gdi32.lib
-
- XMLSEC_MSCRYPTO_SOLIBS = kernel32.lib user32.lib gdi32.lib Crypt32.lib Advapi32.lib
+- return(xmlSecKeyDataBinaryValueXmlRead(id, key, node, keyInfoCtx));
++ /* Adopt the symmetric key into key data */
++ ret = xmlSecNssSymKeyDataAdoptKey(data, symKey);
++ if(ret < 0) {
++ xmlSecError(XMLSEC_ERRORS_HERE,
++ xmlSecErrorsSafeString(xmlSecKeyDataKlassGetName(id)),
++ "xmlSecKeyDataBinaryValueSetBuffer",
++ XMLSEC_ERRORS_R_XMLSEC_FAILED,
++ XMLSEC_ERRORS_NO_MESSAGE);
++ PK11_FreeSymKey( symKey ) ;
++ xmlSecKeyDataDestroy( data ) ;
++ return(-1);
++ }
++ /* symKey has been duplicated into data, it isn't used any more */
++ PK11_FreeSymKey( symKey ) ;
++
++ /* Check value */
++ if(xmlSecKeyReqMatchKeyValue(&(keyInfoCtx->keyReq), data) != 1) {
++ xmlSecError(XMLSEC_ERRORS_HERE,
++ xmlSecErrorsSafeString(xmlSecKeyDataKlassGetName(id)),
++ "xmlSecKeyReqMatchKeyValue",
++ XMLSEC_ERRORS_R_XMLSEC_FAILED,
++ XMLSEC_ERRORS_NO_MESSAGE);
++ xmlSecKeyDataDestroy( data ) ;
++ return(0);
++ }
++
++ ret = xmlSecKeySetValue(key, data);
++ if(ret < 0) {
++ xmlSecError(XMLSEC_ERRORS_HERE,
++ xmlSecErrorsSafeString(xmlSecKeyDataKlassGetName(id)),
++ "xmlSecKeySetValue",
++ XMLSEC_ERRORS_R_XMLSEC_FAILED,
++ XMLSEC_ERRORS_NO_MESSAGE);
++ xmlSecKeyDataDestroy( data ) ;
++ return(-1);
++ }
++
++ return(0);
+ }
+
+ static int
+ xmlSecNssSymKeyDataXmlWrite(xmlSecKeyDataId id, xmlSecKeyPtr key,
+- xmlNodePtr node, xmlSecKeyInfoCtxPtr keyInfoCtx) {
++ xmlNodePtr node, xmlSecKeyInfoCtxPtr keyInfoCtx) {
++ PK11SymKey* symKey ;
++
+ xmlSecAssert2(xmlSecNssSymKeyDataKlassCheck(id), -1);
++ xmlSecAssert2(key != NULL, -1);
++ xmlSecAssert2(node != NULL, -1);
++ xmlSecAssert2(keyInfoCtx != NULL, -1);
++
++ /* Get symmetric key from "key" */
++ symKey = xmlSecNssSymKeyDataGetKey(xmlSecKeyGetValue(key));
++ if( symKey != NULL ) {
++ SECItem* keyItem ;
++ xmlSecBufferPtr keyBuf ;
++
++ /* Extract raw key data from symmetric key */
++ if( PK11_ExtractKeyValue( symKey ) != SECSuccess ) {
++ xmlSecError(XMLSEC_ERRORS_HERE,
++ xmlSecErrorsSafeString(xmlSecKeyDataKlassGetName(id)),
++ "PK11_ExtractKeyValue",
++ XMLSEC_ERRORS_R_XMLSEC_FAILED,
++ XMLSEC_ERRORS_NO_MESSAGE);
++ PK11_FreeSymKey( symKey ) ;
++ return(-1);
++ }
++
++ /* Get raw key data from "symKey" */
++ keyItem = PK11_GetKeyData( symKey ) ;
++ if(keyItem == NULL) {
++ xmlSecError(XMLSEC_ERRORS_HERE,
++ xmlSecErrorsSafeString(xmlSecKeyDataKlassGetName(id)),
++ "PK11_GetKeyData",
++ XMLSEC_ERRORS_R_XMLSEC_FAILED,
++ XMLSEC_ERRORS_NO_MESSAGE);
++ PK11_FreeSymKey( symKey ) ;
++ return(-1);
++ }
++
++ /* Create key data buffer with raw kwy material */
++ keyBuf = xmlSecBufferCreate(keyItem->len) ;
++ if(keyBuf == NULL) {
++ xmlSecError(XMLSEC_ERRORS_HERE,
++ xmlSecErrorsSafeString(xmlSecKeyDataKlassGetName(id)),
++ "xmlSecBufferCreate",
++ XMLSEC_ERRORS_R_XMLSEC_FAILED,
++ XMLSEC_ERRORS_NO_MESSAGE);
++ PK11_FreeSymKey( symKey ) ;
++ return(-1);
++ }
++
++ xmlSecBufferSetData( keyBuf , keyItem->data , keyItem->len ) ;
++
++ /* Write raw key material into current xml node */
++ if( xmlSecBufferBase64NodeContentWrite( keyBuf, node, XMLSEC_BASE64_LINESIZE ) < 0 ) {
++ xmlSecError(XMLSEC_ERRORS_HERE,
++ xmlSecErrorsSafeString(xmlSecKeyDataKlassGetName(id)),
++ "xmlSecBufferBase64NodeContentWrite",
++ XMLSEC_ERRORS_R_XMLSEC_FAILED,
++ XMLSEC_ERRORS_NO_MESSAGE);
++ xmlSecBufferDestroy(keyBuf);
++ PK11_FreeSymKey( symKey ) ;
++ return(-1);
++ }
++ xmlSecBufferDestroy(keyBuf);
++ PK11_FreeSymKey( symKey ) ;
++ }
+
+- return(xmlSecKeyDataBinaryValueXmlWrite(id, key, node, keyInfoCtx));
++ return 0 ;
+ }
+
+ static int
+ xmlSecNssSymKeyDataBinRead(xmlSecKeyDataId id, xmlSecKeyPtr key,
+- const xmlSecByte* buf, xmlSecSize bufSize,
+- xmlSecKeyInfoCtxPtr keyInfoCtx) {
+- xmlSecAssert2(xmlSecNssSymKeyDataKlassCheck(id), -1);
++ const xmlSecByte* buf, xmlSecSize bufSize,
++ xmlSecKeyInfoCtxPtr keyInfoCtx) {
++ PK11SymKey* symKey ;
++ PK11SlotInfo* slot ;
++ xmlSecKeyDataPtr data;
++ xmlSecNssSymKeyDataCtxPtr ctx;
++ SECItem keyItem ;
++ int ret;
+
+- return(xmlSecKeyDataBinaryValueBinRead(id, key, buf, bufSize, keyInfoCtx));
++ xmlSecAssert2(id != xmlSecKeyDataIdUnknown, -1);
++ xmlSecAssert2(key != NULL, -1);
++ xmlSecAssert2(buf != NULL, -1);
++ xmlSecAssert2(bufSize != 0, -1);
++ xmlSecAssert2(keyInfoCtx != NULL, -1);
++
++ /* Create a new KeyData from a id */
++ data = xmlSecKeyDataCreate(id);
++ if(data == NULL ) {
++ xmlSecError(XMLSEC_ERRORS_HERE,
++ xmlSecErrorsSafeString(xmlSecKeyDataKlassGetName(id)),
++ "xmlSecKeyDataCreate",
++ XMLSEC_ERRORS_R_XMLSEC_FAILED,
++ XMLSEC_ERRORS_NO_MESSAGE);
++ return(-1);
++ }
++
++ ctx = xmlSecNssSymKeyDataGetCtx(data);
++ xmlSecAssert2(ctx != NULL, -1);
++
++ /* Get slot */
++ slot = xmlSecNssSlotGet(ctx->cipher);
++ if( slot == NULL ) {
++ xmlSecError( XMLSEC_ERRORS_HERE ,
++ xmlSecErrorsSafeString(xmlSecKeyDataKlassGetName(id)),
++ "xmlSecNssSlotGet" ,
++ XMLSEC_ERRORS_R_XMLSEC_FAILED ,
++ XMLSEC_ERRORS_NO_MESSAGE ) ;
++ xmlSecKeyDataDestroy( data ) ;
++ return(-1) ;
++ }
++
++ /* Wrap the raw key value SECItem */
++ keyItem.type = siBuffer ;
++ keyItem.data = buf ;
++ keyItem.len = bufSize ;
++
++ /* Import the raw key into slot temporalily and get the key handler*/
++ symKey = PK11_ImportSymKey(slot, ctx->cipher, PK11_OriginGenerated, CKA_VALUE, &keyItem, NULL ) ;
++ if( symKey == NULL ) {
++ xmlSecError( XMLSEC_ERRORS_HERE ,
++ xmlSecErrorsSafeString(xmlSecKeyDataKlassGetName(id)),
++ "PK11_ImportSymKey" ,
++ XMLSEC_ERRORS_R_XMLSEC_FAILED ,
++ XMLSEC_ERRORS_NO_MESSAGE ) ;
++ PK11_FreeSlot( slot ) ;
++ xmlSecKeyDataDestroy( data ) ;
++ return(-1) ;
++ }
++
++ /* Adopt the symmetric key into key data */
++ ret = xmlSecNssSymKeyDataAdoptKey(data, symKey);
++ if(ret < 0) {
++ xmlSecError(XMLSEC_ERRORS_HERE,
++ xmlSecErrorsSafeString(xmlSecKeyDataKlassGetName(id)),
++ "xmlSecKeyDataBinaryValueSetBuffer",
++ XMLSEC_ERRORS_R_XMLSEC_FAILED,
++ XMLSEC_ERRORS_NO_MESSAGE ) ;
++ PK11_FreeSymKey( symKey ) ;
++ PK11_FreeSlot( slot ) ;
++ xmlSecKeyDataDestroy( data ) ;
++ return(-1);
++ }
++ /* symKey has been duplicated into data, it isn't used any more */
++ PK11_FreeSymKey( symKey ) ;
++ PK11_FreeSlot( slot ) ;
++
++ /* Check value */
++ if(xmlSecKeyReqMatchKeyValue(&(keyInfoCtx->keyReq), data) != 1) {
++ xmlSecError(XMLSEC_ERRORS_HERE,
++ xmlSecErrorsSafeString(xmlSecKeyDataKlassGetName(id)),
++ "xmlSecKeyReqMatchKeyValue",
++ XMLSEC_ERRORS_R_XMLSEC_FAILED,
++ XMLSEC_ERRORS_NO_MESSAGE);
++ xmlSecKeyDataDestroy( data ) ;
++ return(0);
++ }
++
++ ret = xmlSecKeySetValue(key, data);
++ if(ret < 0) {
++ xmlSecError(XMLSEC_ERRORS_HERE,
++ xmlSecErrorsSafeString(xmlSecKeyDataKlassGetName(id)),
++ "xmlSecKeySetValue",
++ XMLSEC_ERRORS_R_XMLSEC_FAILED,
++ XMLSEC_ERRORS_NO_MESSAGE);
++ xmlSecKeyDataDestroy( data ) ;
++ return(-1);
++ }
++
++ return(0);
+ }
+
+ static int
+ xmlSecNssSymKeyDataBinWrite(xmlSecKeyDataId id, xmlSecKeyPtr key,
+- xmlSecByte** buf, xmlSecSize* bufSize,
+- xmlSecKeyInfoCtxPtr keyInfoCtx) {
++ xmlSecByte** buf, xmlSecSize* bufSize,
++ xmlSecKeyInfoCtxPtr keyInfoCtx) {
++ PK11SymKey* symKey ;
++
+ xmlSecAssert2(xmlSecNssSymKeyDataKlassCheck(id), -1);
++ xmlSecAssert2(key != NULL, -1);
++ xmlSecAssert2(buf != NULL, -1);
++ xmlSecAssert2(bufSize != 0, -1);
++ xmlSecAssert2(keyInfoCtx != NULL, -1);
++
++ /* Get symmetric key from "key" */
++ symKey = xmlSecNssSymKeyDataGetKey(xmlSecKeyGetValue(key));
++ if( symKey != NULL ) {
++ SECItem* keyItem ;
++
++ /* Extract raw key data from symmetric key */
++ if( PK11_ExtractKeyValue( symKey ) != SECSuccess ) {
++ xmlSecError(XMLSEC_ERRORS_HERE,
++ xmlSecErrorsSafeString(xmlSecKeyDataKlassGetName(id)),
++ "PK11_ExtractKeyValue",
++ XMLSEC_ERRORS_R_XMLSEC_FAILED,
++ XMLSEC_ERRORS_NO_MESSAGE);
++ PK11_FreeSymKey( symKey ) ;
++ return(-1);
++ }
++
++ /* Get raw key data from "symKey" */
++ keyItem = PK11_GetKeyData( symKey ) ;
++ if(keyItem == NULL) {
++ xmlSecError(XMLSEC_ERRORS_HERE,
++ xmlSecErrorsSafeString(xmlSecKeyDataKlassGetName(id)),
++ "PK11_GetKeyData",
++ XMLSEC_ERRORS_R_XMLSEC_FAILED,
++ XMLSEC_ERRORS_NO_MESSAGE);
++ PK11_FreeSymKey( symKey ) ;
++ return(-1);
++ }
++
++ *bufSize = keyItem->len;
++ *buf = ( xmlSecByte* )xmlMalloc( *bufSize );
++ if( *buf == NULL ) {
++ xmlSecError(XMLSEC_ERRORS_HERE,
++ xmlSecErrorsSafeString(xmlSecKeyDataKlassGetName(id)),
++ NULL,
++ XMLSEC_ERRORS_R_XMLSEC_FAILED,
++ XMLSEC_ERRORS_NO_MESSAGE);
++ PK11_FreeSymKey( symKey ) ;
++ return(-1);
++ }
++
++ memcpy((*buf), keyItem->data, (*bufSize));
++ PK11_FreeSymKey( symKey ) ;
++ }
+
+- return(xmlSecKeyDataBinaryValueBinWrite(id, key, buf, bufSize, keyInfoCtx));
++ return 0 ;
+ }
+
+ static int
+ xmlSecNssSymKeyDataGenerate(xmlSecKeyDataPtr data, xmlSecSize sizeBits, xmlSecKeyDataType type ATTRIBUTE_UNUSED) {
+- xmlSecBufferPtr buffer;
+-
++ PK11SymKey* symkey ;
++ PK11SlotInfo* slot ;
++ xmlSecNssSymKeyDataCtxPtr ctx;
++ int ret;
++
+ xmlSecAssert2(xmlSecNssSymKeyDataCheckId(data), -1);
+ xmlSecAssert2(sizeBits > 0, -1);
+
+- buffer = xmlSecKeyDataBinaryValueGetBuffer(data);
+- xmlSecAssert2(buffer != NULL, -1);
+-
+- return(xmlSecNssGenerateRandom(buffer, (sizeBits + 7) / 8));
++ ctx = xmlSecNssSymKeyDataGetCtx(data);
++ xmlSecAssert2(ctx != NULL, -1);
++
++ if( sizeBits % 8 != 0 ) {
++ xmlSecError(XMLSEC_ERRORS_HERE,
++ xmlSecErrorsSafeString(xmlSecKeyDataGetName(data)),
++ NULL,
++ XMLSEC_ERRORS_R_XMLSEC_FAILED,
++ "Symmetric key size must be octuple");
++ return(-1);
++ }
++
++ /* Get slot */
++ slot = xmlSecNssSlotGet(ctx->cipher);
++ if( slot == NULL ) {
++ xmlSecError( XMLSEC_ERRORS_HERE ,
++ xmlSecErrorsSafeString(xmlSecKeyDataGetName(data)),
++ "xmlSecNssSlotGet" ,
++ XMLSEC_ERRORS_R_XMLSEC_FAILED ,
++ XMLSEC_ERRORS_NO_MESSAGE ) ;
++ return(-1) ;
++ }
++
++ if( PK11_Authenticate( slot, PR_FALSE , NULL ) != SECSuccess ) {
++ xmlSecError( XMLSEC_ERRORS_HERE ,
++ xmlSecErrorsSafeString( xmlSecKeyDataGetName( data ) ) ,
++ "PK11_Authenticate" ,
++ XMLSEC_ERRORS_R_CRYPTO_FAILED ,
++ XMLSEC_ERRORS_NO_MESSAGE ) ;
++ PK11_FreeSlot( slot ) ;
++ return -1 ;
++ }
++
++ symkey = PK11_KeyGen( slot , ctx->cipher , NULL , sizeBits/8 , NULL ) ;
++ if( symkey == NULL ) {
++ xmlSecError( XMLSEC_ERRORS_HERE ,
++ xmlSecErrorsSafeString( xmlSecKeyDataGetName( data ) ) ,
++ "PK11_KeyGen" ,
++ XMLSEC_ERRORS_R_CRYPTO_FAILED ,
++ XMLSEC_ERRORS_NO_MESSAGE ) ;
++ PK11_FreeSlot( slot ) ;
++ return -1 ;
++ }
++
++ if( ctx->slot != NULL ) {
++ PK11_FreeSlot( ctx->slot ) ;
++ ctx->slot = NULL ;
++ }
++ ctx->slot = slot ;
++
++ if( ctx->symkey != NULL ) {
++ PK11_FreeSymKey( ctx->symkey ) ;
++ ctx->symkey = NULL ;
++ }
++ ctx->symkey = symkey ;
++
++ return 0 ;
+ }
+
+ static xmlSecKeyDataType
+ xmlSecNssSymKeyDataGetType(xmlSecKeyDataPtr data) {
+- xmlSecBufferPtr buffer;
++ xmlSecNssSymKeyDataCtxPtr context = NULL ;
++ xmlSecKeyDataType type = xmlSecKeyDataTypeUnknown ;
+
+ xmlSecAssert2(xmlSecNssSymKeyDataCheckId(data), xmlSecKeyDataTypeUnknown);
++ xmlSecAssert2( xmlSecKeyDataCheckSize( data, xmlSecNssSymKeyDataSize ), xmlSecKeyDataTypeUnknown ) ;
+
+- buffer = xmlSecKeyDataBinaryValueGetBuffer(data);
+- xmlSecAssert2(buffer != NULL, xmlSecKeyDataTypeUnknown);
++ context = xmlSecNssSymKeyDataGetCtx( data ) ;
++ if( context == NULL ) {
++ xmlSecError( XMLSEC_ERRORS_HERE ,
++ xmlSecErrorsSafeString( xmlSecKeyDataGetName( data ) ) ,
++ "xmlSecNssSymKeyDataGetCtx" ,
++ XMLSEC_ERRORS_R_CRYPTO_FAILED ,
++ XMLSEC_ERRORS_NO_MESSAGE ) ;
++ return xmlSecKeyDataTypeUnknown ;
++ }
++
++ if( context->symkey != NULL ) {
++ type |= xmlSecKeyDataTypeSymmetric ;
++ } else {
++ type |= xmlSecKeyDataTypeUnknown ;
++ }
+
+- return((xmlSecBufferGetSize(buffer) > 0) ? xmlSecKeyDataTypeSymmetric : xmlSecKeyDataTypeUnknown);
++ return type ;
+ }
+
+ static xmlSecSize
+ xmlSecNssSymKeyDataGetSize(xmlSecKeyDataPtr data) {
++ xmlSecNssSymKeyDataCtxPtr context ;
++ unsigned int length = 0 ;
++
+ xmlSecAssert2(xmlSecNssSymKeyDataCheckId(data), 0);
+-
+- return(xmlSecKeyDataBinaryValueGetSize(data));
++ xmlSecAssert2( xmlSecKeyDataCheckSize( data, xmlSecNssSymKeyDataSize ), 0 ) ;
++
++ context = xmlSecNssSymKeyDataGetCtx( data ) ;
++ if( context == NULL ) {
++ xmlSecError( XMLSEC_ERRORS_HERE ,
++ xmlSecErrorsSafeString( xmlSecKeyDataGetName( data ) ) ,
++ "xmlSecNssSymKeyDataGetCtx" ,
++ XMLSEC_ERRORS_R_CRYPTO_FAILED ,
++ XMLSEC_ERRORS_NO_MESSAGE ) ;
++ return 0 ;
++ }
++
++ if( context->symkey != NULL ) {
++ length = PK11_GetKeyLength( context->symkey ) ;
++ length *= 8 ;
++ }
++
++ return length ;
+ }
+
+ static void
+ xmlSecNssSymKeyDataDebugDump(xmlSecKeyDataPtr data, FILE* output) {
+ xmlSecAssert(xmlSecNssSymKeyDataCheckId(data));
+
+- xmlSecKeyDataBinaryValueDebugDump(data, output);
++ /* print only size, everything else is sensitive */
++ fprintf( output , "=== %s: size=%d\n" , data->id->dataNodeName ,
++ xmlSecKeyDataGetSize(data)) ;
+ }
+
+ static void
+ xmlSecNssSymKeyDataDebugXmlDump(xmlSecKeyDataPtr data, FILE* output) {
+ xmlSecAssert(xmlSecNssSymKeyDataCheckId(data));
+
+- xmlSecKeyDataBinaryValueDebugXmlDump(data, output);
++ /* print only size, everything else is sensitive */
++ fprintf( output , "<%s size=\"%d\" />\n" , data->id->dataNodeName ,
++ xmlSecKeyDataGetSize(data)) ;
+ }
+
+ static int
+ xmlSecNssSymKeyDataKlassCheck(xmlSecKeyDataKlass* klass) {
+ #ifndef XMLSEC_NO_DES
+ if(klass == xmlSecNssKeyDataDesId) {
+- return(1);
++ return(1);
+ }
+ #endif /* XMLSEC_NO_DES */
+
+ #ifndef XMLSEC_NO_AES
+ if(klass == xmlSecNssKeyDataAesId) {
+- return(1);
++ return(1);
+ }
+ #endif /* XMLSEC_NO_AES */
+
+ #ifndef XMLSEC_NO_HMAC
+ if(klass == xmlSecNssKeyDataHmacId) {
+- return(1);
++ return(1);
+ }
+ #endif /* XMLSEC_NO_HMAC */
+
+@@ -199,42 +858,46 @@
+ * <xmlsec:AESKeyValue> processing
+ *
+ *************************************************************************/
++#ifdef __MINGW32__ // for runtime-pseudo-reloc
++static struct _xmlSecKeyDataKlass xmlSecNssKeyDataAesKlass = {
++#else
+ static xmlSecKeyDataKlass xmlSecNssKeyDataAesKlass = {
++#endif
+ sizeof(xmlSecKeyDataKlass),
+- xmlSecKeyDataBinarySize,
++ xmlSecNssSymKeyDataSize,
+
+ /* data */
+ xmlSecNameAESKeyValue,
+ xmlSecKeyDataUsageKeyValueNode | xmlSecKeyDataUsageRetrievalMethodNodeXml,
+- /* xmlSecKeyDataUsage usage; */
+- xmlSecHrefAESKeyValue, /* const xmlChar* href; */
+- xmlSecNodeAESKeyValue, /* const xmlChar* dataNodeName; */
+- xmlSecNs, /* const xmlChar* dataNodeNs; */
++ /* xmlSecKeyDataUsage usage; */
++ xmlSecHrefAESKeyValue, /* const xmlChar* href; */
++ xmlSecNodeAESKeyValue, /* const xmlChar* dataNodeName; */
++ xmlSecNs, /* const xmlChar* dataNodeNs; */
+
+ /* constructors/destructor */
+- xmlSecNssSymKeyDataInitialize, /* xmlSecKeyDataInitializeMethod initialize; */
+- xmlSecNssSymKeyDataDuplicate, /* xmlSecKeyDataDuplicateMethod duplicate; */
+- xmlSecNssSymKeyDataFinalize, /* xmlSecKeyDataFinalizeMethod finalize; */
+- xmlSecNssSymKeyDataGenerate, /* xmlSecKeyDataGenerateMethod generate; */
++ xmlSecNssSymKeyDataInitialize, /* xmlSecKeyDataInitializeMethod initialize; */
++ xmlSecNssSymKeyDataDuplicate, /* xmlSecKeyDataDuplicateMethod duplicate; */
++ xmlSecNssSymKeyDataFinalize, /* xmlSecKeyDataFinalizeMethod finalize; */
++ xmlSecNssSymKeyDataGenerate, /* xmlSecKeyDataGenerateMethod generate; */
+
+ /* get info */
+- xmlSecNssSymKeyDataGetType, /* xmlSecKeyDataGetTypeMethod getType; */
+- xmlSecNssSymKeyDataGetSize, /* xmlSecKeyDataGetSizeMethod getSize; */
+- NULL, /* xmlSecKeyDataGetIdentifier getIdentifier; */
++ xmlSecNssSymKeyDataGetType, /* xmlSecKeyDataGetTypeMethod getType; */
++ xmlSecNssSymKeyDataGetSize, /* xmlSecKeyDataGetSizeMethod getSize; */
++ NULL, /* xmlSecKeyDataGetIdentifier getIdentifier; */
+
+ /* read/write */
+- xmlSecNssSymKeyDataXmlRead, /* xmlSecKeyDataXmlReadMethod xmlRead; */
+- xmlSecNssSymKeyDataXmlWrite, /* xmlSecKeyDataXmlWriteMethod xmlWrite; */
+- xmlSecNssSymKeyDataBinRead, /* xmlSecKeyDataBinReadMethod binRead; */
+- xmlSecNssSymKeyDataBinWrite, /* xmlSecKeyDataBinWriteMethod binWrite; */
++ xmlSecNssSymKeyDataXmlRead, /* xmlSecKeyDataXmlReadMethod xmlRead; */
++ xmlSecNssSymKeyDataXmlWrite, /* xmlSecKeyDataXmlWriteMethod xmlWrite; */
++ xmlSecNssSymKeyDataBinRead, /* xmlSecKeyDataBinReadMethod binRead; */
++ xmlSecNssSymKeyDataBinWrite, /* xmlSecKeyDataBinWriteMethod binWrite; */
+
+ /* debug */
+- xmlSecNssSymKeyDataDebugDump, /* xmlSecKeyDataDebugDumpMethod debugDump; */
+- xmlSecNssSymKeyDataDebugXmlDump, /* xmlSecKeyDataDebugDumpMethod debugXmlDump; */
++ xmlSecNssSymKeyDataDebugDump, /* xmlSecKeyDataDebugDumpMethod debugDump; */
++ xmlSecNssSymKeyDataDebugXmlDump, /* xmlSecKeyDataDebugDumpMethod debugXmlDump; */
+
+ /* reserved for the future */
+- NULL, /* void* reserved0; */
+- NULL, /* void* reserved1; */
++ NULL, /* void* reserved0; */
++ NULL, /* void* reserved1; */
+ };
+
+ /**
+@@ -251,9 +914,9 @@
+
+ /**
+ * xmlSecNssKeyDataAesSet:
+- * @data: the pointer to AES key data.
+- * @buf: the pointer to key value.
+- * @bufSize: the key value size (in bytes).
++ * @data: the pointer to AES key data.
++ * @buf: the pointer to key value.
++ * @bufSize: the key value size (in bytes).
+ *
+ * Sets the value of AES key data.
+ *
+@@ -280,42 +943,46 @@
+ * <xmlsec:DESKeyValue> processing
+ *
+ *************************************************************************/
++#ifdef __MINGW32__ // for runtime-pseudo-reloc
++static struct _xmlSecKeyDataKlass xmlSecNssKeyDataDesKlass = {
++#else
+ static xmlSecKeyDataKlass xmlSecNssKeyDataDesKlass = {
++#endif
+ sizeof(xmlSecKeyDataKlass),
+- xmlSecKeyDataBinarySize,
++ xmlSecNssSymKeyDataSize,
+
+ /* data */
+ xmlSecNameDESKeyValue,
+ xmlSecKeyDataUsageKeyValueNode | xmlSecKeyDataUsageRetrievalMethodNodeXml,
+- /* xmlSecKeyDataUsage usage; */
+- xmlSecHrefDESKeyValue, /* const xmlChar* href; */
+- xmlSecNodeDESKeyValue, /* const xmlChar* dataNodeName; */
+- xmlSecNs, /* const xmlChar* dataNodeNs; */
++ /* xmlSecKeyDataUsage usage; */
++ xmlSecHrefDESKeyValue, /* const xmlChar* href; */
++ xmlSecNodeDESKeyValue, /* const xmlChar* dataNodeName; */
++ xmlSecNs, /* const xmlChar* dataNodeNs; */
+
+ /* constructors/destructor */
+- xmlSecNssSymKeyDataInitialize, /* xmlSecKeyDataInitializeMethod initialize; */
+- xmlSecNssSymKeyDataDuplicate, /* xmlSecKeyDataDuplicateMethod duplicate; */
+- xmlSecNssSymKeyDataFinalize, /* xmlSecKeyDataFinalizeMethod finalize; */
+- xmlSecNssSymKeyDataGenerate, /* xmlSecKeyDataGenerateMethod generate; */
++ xmlSecNssSymKeyDataInitialize, /* xmlSecKeyDataInitializeMethod initialize; */
++ xmlSecNssSymKeyDataDuplicate, /* xmlSecKeyDataDuplicateMethod duplicate; */
++ xmlSecNssSymKeyDataFinalize, /* xmlSecKeyDataFinalizeMethod finalize; */
++ xmlSecNssSymKeyDataGenerate, /* xmlSecKeyDataGenerateMethod generate; */
+
+ /* get info */
+- xmlSecNssSymKeyDataGetType, /* xmlSecKeyDataGetTypeMethod getType; */
+- xmlSecNssSymKeyDataGetSize, /* xmlSecKeyDataGetSizeMethod getSize; */
+- NULL, /* xmlSecKeyDataGetIdentifier getIdentifier; */
++ xmlSecNssSymKeyDataGetType, /* xmlSecKeyDataGetTypeMethod getType; */
++ xmlSecNssSymKeyDataGetSize, /* xmlSecKeyDataGetSizeMethod getSize; */
++ NULL, /* xmlSecKeyDataGetIdentifier getIdentifier; */
+
+ /* read/write */
+- xmlSecNssSymKeyDataXmlRead, /* xmlSecKeyDataXmlReadMethod xmlRead; */
+- xmlSecNssSymKeyDataXmlWrite, /* xmlSecKeyDataXmlWriteMethod xmlWrite; */
+- xmlSecNssSymKeyDataBinRead, /* xmlSecKeyDataBinReadMethod binRead; */
+- xmlSecNssSymKeyDataBinWrite, /* xmlSecKeyDataBinWriteMethod binWrite; */
++ xmlSecNssSymKeyDataXmlRead, /* xmlSecKeyDataXmlReadMethod xmlRead; */
++ xmlSecNssSymKeyDataXmlWrite, /* xmlSecKeyDataXmlWriteMethod xmlWrite; */
++ xmlSecNssSymKeyDataBinRead, /* xmlSecKeyDataBinReadMethod binRead; */
++ xmlSecNssSymKeyDataBinWrite, /* xmlSecKeyDataBinWriteMethod binWrite; */
+
+ /* debug */
+- xmlSecNssSymKeyDataDebugDump, /* xmlSecKeyDataDebugDumpMethod debugDump; */
+- xmlSecNssSymKeyDataDebugXmlDump, /* xmlSecKeyDataDebugDumpMethod debugXmlDump; */
++ xmlSecNssSymKeyDataDebugDump, /* xmlSecKeyDataDebugDumpMethod debugDump; */
++ xmlSecNssSymKeyDataDebugXmlDump, /* xmlSecKeyDataDebugDumpMethod debugXmlDump; */
+
+ /* reserved for the future */
+- NULL, /* void* reserved0; */
+- NULL, /* void* reserved1; */
++ NULL, /* void* reserved0; */
++ NULL, /* void* reserved1; */
+ };
+
+ /**
+@@ -332,9 +999,9 @@
+
+ /**
+ * xmlSecNssKeyDataDesSet:
+- * @data: the pointer to DES key data.
+- * @buf: the pointer to key value.
+- * @bufSize: the key value size (in bytes).
++ * @data: the pointer to DES key data.
++ * @buf: the pointer to key value.
++ * @bufSize: the key value size (in bytes).
+ *
+ * Sets the value of DES key data.
+ *
+@@ -362,42 +1029,46 @@
+ * <xmlsec:HMACKeyValue> processing
+ *
+ *************************************************************************/
++#ifdef __MINGW32__ // for runtime-pseudo-reloc
++static struct _xmlSecKeyDataKlass xmlSecNssKeyDataHmacKlass = {
++#else
+ static xmlSecKeyDataKlass xmlSecNssKeyDataHmacKlass = {
++#endif
+ sizeof(xmlSecKeyDataKlass),
+- xmlSecKeyDataBinarySize,
++ xmlSecNssSymKeyDataSize,
+
+ /* data */
+ xmlSecNameHMACKeyValue,
+ xmlSecKeyDataUsageKeyValueNode | xmlSecKeyDataUsageRetrievalMethodNodeXml,
+- /* xmlSecKeyDataUsage usage; */
+- xmlSecHrefHMACKeyValue, /* const xmlChar* href; */
+- xmlSecNodeHMACKeyValue, /* const xmlChar* dataNodeName; */
+- xmlSecNs, /* const xmlChar* dataNodeNs; */
++ /* xmlSecKeyDataUsage usage; */
++ xmlSecHrefHMACKeyValue, /* const xmlChar* href; */
++ xmlSecNodeHMACKeyValue, /* const xmlChar* dataNodeName; */
++ xmlSecNs, /* const xmlChar* dataNodeNs; */
+
+ /* constructors/destructor */
+- xmlSecNssSymKeyDataInitialize, /* xmlSecKeyDataInitializeMethod initialize; */
+- xmlSecNssSymKeyDataDuplicate, /* xmlSecKeyDataDuplicateMethod duplicate; */
+- xmlSecNssSymKeyDataFinalize, /* xmlSecKeyDataFinalizeMethod finalize; */
+- xmlSecNssSymKeyDataGenerate, /* xmlSecKeyDataGenerateMethod generate; */
++ xmlSecNssSymKeyDataInitialize, /* xmlSecKeyDataInitializeMethod initialize; */
++ xmlSecNssSymKeyDataDuplicate, /* xmlSecKeyDataDuplicateMethod duplicate; */
++ xmlSecNssSymKeyDataFinalize, /* xmlSecKeyDataFinalizeMethod finalize; */
++ xmlSecNssSymKeyDataGenerate, /* xmlSecKeyDataGenerateMethod generate; */
+
+ /* get info */
+- xmlSecNssSymKeyDataGetType, /* xmlSecKeyDataGetTypeMethod getType; */
+- xmlSecNssSymKeyDataGetSize, /* xmlSecKeyDataGetSizeMethod getSize; */
+- NULL, /* xmlSecKeyDataGetIdentifier getIdentifier; */
++ xmlSecNssSymKeyDataGetType, /* xmlSecKeyDataGetTypeMethod getType; */
++ xmlSecNssSymKeyDataGetSize, /* xmlSecKeyDataGetSizeMethod getSize; */
++ NULL, /* xmlSecKeyDataGetIdentifier getIdentifier; */
+
+ /* read/write */
+- xmlSecNssSymKeyDataXmlRead, /* xmlSecKeyDataXmlReadMethod xmlRead; */
+- xmlSecNssSymKeyDataXmlWrite, /* xmlSecKeyDataXmlWriteMethod xmlWrite; */
+- xmlSecNssSymKeyDataBinRead, /* xmlSecKeyDataBinReadMethod binRead; */
+- xmlSecNssSymKeyDataBinWrite, /* xmlSecKeyDataBinWriteMethod binWrite; */
++ xmlSecNssSymKeyDataXmlRead, /* xmlSecKeyDataXmlReadMethod xmlRead; */
++ xmlSecNssSymKeyDataXmlWrite, /* xmlSecKeyDataXmlWriteMethod xmlWrite; */
++ xmlSecNssSymKeyDataBinRead, /* xmlSecKeyDataBinReadMethod binRead; */
++ xmlSecNssSymKeyDataBinWrite, /* xmlSecKeyDataBinWriteMethod binWrite; */
+
+ /* debug */
+- xmlSecNssSymKeyDataDebugDump, /* xmlSecKeyDataDebugDumpMethod debugDump; */
+- xmlSecNssSymKeyDataDebugXmlDump, /* xmlSecKeyDataDebugDumpMethod debugXmlDump; */
++ xmlSecNssSymKeyDataDebugDump, /* xmlSecKeyDataDebugDumpMethod debugDump; */
++ xmlSecNssSymKeyDataDebugXmlDump, /* xmlSecKeyDataDebugDumpMethod debugXmlDump; */
+
+ /* reserved for the future */
+- NULL, /* void* reserved0; */
+- NULL, /* void* reserved1; */
++ NULL, /* void* reserved0; */
++ NULL, /* void* reserved1; */
+ };
+
+ /**
+@@ -414,9 +1085,9 @@
+
+ /**
+ * xmlSecNssKeyDataHmacSet:
+- * @data: the pointer to HMAC key data.
+- * @buf: the pointer to key value.
+- * @bufSize: the key value size (in bytes).
++ * @data: the pointer to HMAC key data.
++ * @buf: the pointer to key value.
++ * @bufSize: the key value size (in bytes).
+ *
+ * Sets the value of HMAC key data.
+ *
+--- misc/xmlsec1-1.2.6/src/nss/tokens.c 2008-06-29 23:44:40.000000000 +0200
++++ misc/build/xmlsec1-1.2.6/src/nss/tokens.c 2008-06-29 23:44:19.000000000 +0200
+@@ -1 +1,548 @@
+-dummy
++/**
++ * XMLSec library
++ *
++ * This is free software; see Copyright file in the source
++ * distribution for preciese wording.
++ *
++ * Copyright..................................
++ *
++ * Contributor(s): _____________________________
++ *
++ */
++
++/**
++ * In order to ensure that particular crypto operation is performed on
++ * particular crypto device, a subclass of xmlSecList is used to store slot and
++ * mechanism information.
++ *
++ * In the list, a slot is bound with a mechanism. If the mechanism is available,
++ * this mechanism only can perform on the slot; otherwise, it can perform on
++ * every eligibl slot in the list.
++ *
++ * When try to find a slot for a particular mechanism, the slot bound with
++ * avaliable mechanism will be looked up firstly.
++ */
++#include "globals.h"
++#include <string.h>
++
++#include <xmlsec/xmlsec.h>
++#include <xmlsec/errors.h>
++#include <xmlsec/list.h>
++
++#include <xmlsec/nss/tokens.h>
++
++int
++xmlSecNssKeySlotSetMechList(
++ xmlSecNssKeySlotPtr keySlot ,
++ CK_MECHANISM_TYPE_PTR mechanismList
++) {
++ int counter ;
++
++ xmlSecAssert2( keySlot != NULL , -1 ) ;
++
++ if( keySlot->mechanismList != CK_NULL_PTR ) {
++ xmlFree( keySlot->mechanismList ) ;
++
++ for( counter = 0 ; *( mechanismList + counter ) != CKM_INVALID_MECHANISM ; counter ++ ) ;
++ keySlot->mechanismList = ( CK_MECHANISM_TYPE_PTR )xmlMalloc( ( counter + 1 ) * sizeof( CK_MECHANISM_TYPE ) ) ;
++ if( keySlot->mechanismList == NULL ) {
++ xmlSecError( XMLSEC_ERRORS_HERE ,
++ NULL ,
++ NULL ,
++ XMLSEC_ERRORS_R_XMLSEC_FAILED ,
++ XMLSEC_ERRORS_NO_MESSAGE ) ;
++ return( -1 );
++ }
++ for( ; counter >= 0 ; counter -- )
++ *( keySlot->mechanismList + counter ) = *( mechanismList + counter ) ;
++ }
++
++ return( 0 );
++}
++
++int
++xmlSecNssKeySlotEnableMech(
++ xmlSecNssKeySlotPtr keySlot ,
++ CK_MECHANISM_TYPE mechanism
++) {
++ int counter ;
++ CK_MECHANISM_TYPE_PTR newList ;
++
++ xmlSecAssert2( keySlot != NULL , -1 ) ;
++
++ if( mechanism != CKM_INVALID_MECHANISM ) {
++ for( counter = 0 ; *( keySlot->mechanismList + counter ) != CKM_INVALID_MECHANISM ; counter ++ ) ;
++ newList = ( CK_MECHANISM_TYPE_PTR )xmlMalloc( ( counter + 1 + 1 ) * sizeof( CK_MECHANISM_TYPE ) ) ;
++ if( newList == NULL ) {
++ xmlSecError( XMLSEC_ERRORS_HERE ,
++ NULL ,
++ NULL ,
++ XMLSEC_ERRORS_R_XMLSEC_FAILED ,
++ XMLSEC_ERRORS_NO_MESSAGE ) ;
++ return( -1 );
++ }
++ *( newList + counter + 1 ) = CKM_INVALID_MECHANISM ;
++ *( newList + counter ) = mechanism ;
++ for( counter -= 1 ; counter >= 0 ; counter -- )
++ *( newList + counter ) = *( keySlot->mechanismList + counter ) ;
++
++ xmlFree( keySlot->mechanismList ) ;
++ keySlot->mechanismList = newList ;
++ }
++
++ return(0);
++}
++
++int
++xmlSecNssKeySlotDisableMech(
++ xmlSecNssKeySlotPtr keySlot ,
++ CK_MECHANISM_TYPE mechanism
++) {
++ int counter ;
++
++ xmlSecAssert2( keySlot != NULL , -1 ) ;
++
++ for( counter = 0 ; *( keySlot->mechanismList + counter ) != CKM_INVALID_MECHANISM ; counter ++ ) {
++ if( *( keySlot->mechanismList + counter ) == mechanism ) {
++ for( ; *( keySlot->mechanismList + counter ) != CKM_INVALID_MECHANISM ; counter ++ ) {
++ *( keySlot->mechanismList + counter ) = *( keySlot->mechanismList + counter + 1 ) ;
++ }
++
++ break ;
++ }
++ }
++
++ return(0);
++}
++
++CK_MECHANISM_TYPE_PTR
++xmlSecNssKeySlotGetMechList(
++ xmlSecNssKeySlotPtr keySlot
++) {
++ if( keySlot != NULL )
++ return keySlot->mechanismList ;
++ else
++ return NULL ;
++}
++
++int
++xmlSecNssKeySlotSetSlot(
++ xmlSecNssKeySlotPtr keySlot ,
++ PK11SlotInfo* slot
++) {
++ xmlSecAssert2( keySlot != NULL , -1 ) ;
++
++ if( slot != NULL && keySlot->slot != slot ) {
++ if( keySlot->slot != NULL )
++ PK11_FreeSlot( keySlot->slot ) ;
++
++ if( keySlot->mechanismList != NULL ) {
++ xmlFree( keySlot->mechanismList ) ;
++ keySlot->mechanismList = NULL ;
++ }
++
++ keySlot->slot = PK11_ReferenceSlot( slot ) ;
++ }
++
++ return(0);
++}
++
++int
++xmlSecNssKeySlotInitialize(
++ xmlSecNssKeySlotPtr keySlot ,
++ PK11SlotInfo* slot
++) {
++ xmlSecAssert2( keySlot != NULL , -1 ) ;
++ xmlSecAssert2( keySlot->slot == NULL , -1 ) ;
++ xmlSecAssert2( keySlot->mechanismList == NULL , -1 ) ;
++
++ if( slot != NULL ) {
++ keySlot->slot = PK11_ReferenceSlot( slot ) ;
++ }
++
++ return(0);
++}
++
++void
++xmlSecNssKeySlotFinalize(
++ xmlSecNssKeySlotPtr keySlot
++) {
++ xmlSecAssert( keySlot != NULL ) ;
++
++ if( keySlot->mechanismList != NULL ) {
++ xmlFree( keySlot->mechanismList ) ;
++ keySlot->mechanismList = NULL ;
++ }
++
++ if( keySlot->slot != NULL ) {
++ PK11_FreeSlot( keySlot->slot ) ;
++ keySlot->slot = NULL ;
++ }
++
++}
++
++PK11SlotInfo*
++xmlSecNssKeySlotGetSlot(
++ xmlSecNssKeySlotPtr keySlot
++) {
++ if( keySlot != NULL )
++ return keySlot->slot ;
++ else
++ return NULL ;
++}
++
++xmlSecNssKeySlotPtr
++xmlSecNssKeySlotCreate() {
++ xmlSecNssKeySlotPtr keySlot ;
++
++ /* Allocates a new xmlSecNssKeySlot and fill the fields */
++ keySlot = ( xmlSecNssKeySlotPtr )xmlMalloc( sizeof( xmlSecNssKeySlot ) ) ;
++ if( keySlot == NULL ) {
++ xmlSecError( XMLSEC_ERRORS_HERE ,
++ NULL ,
++ NULL ,
++ XMLSEC_ERRORS_R_XMLSEC_FAILED ,
++ XMLSEC_ERRORS_NO_MESSAGE ) ;
++ return( NULL );
++ }
++ memset( keySlot, 0, sizeof( xmlSecNssKeySlot ) ) ;
++
++ return( keySlot ) ;
++}
++
++int
++xmlSecNssKeySlotCopy(
++ xmlSecNssKeySlotPtr newKeySlot ,
++ xmlSecNssKeySlotPtr keySlot
++) {
++ CK_MECHANISM_TYPE_PTR mech ;
++ int counter ;
++
++ xmlSecAssert2( newKeySlot != NULL , -1 ) ;
++ xmlSecAssert2( keySlot != NULL , -1 ) ;
++
++ if( keySlot->slot != NULL && newKeySlot->slot != keySlot->slot ) {
++ if( newKeySlot->slot != NULL )
++ PK11_FreeSlot( newKeySlot->slot ) ;
++
++ newKeySlot->slot = PK11_ReferenceSlot( keySlot->slot ) ;
++ }
++
++ if( keySlot->mechanismList != CK_NULL_PTR ) {
++ xmlFree( newKeySlot->mechanismList ) ;
++
++ for( counter = 0 ; *( keySlot->mechanismList + counter ) != CKM_INVALID_MECHANISM ; counter ++ ) ;
++ newKeySlot->mechanismList = ( CK_MECHANISM_TYPE_PTR )xmlMalloc( ( counter + 1 ) * sizeof( CK_MECHANISM_TYPE ) ) ;
++ if( newKeySlot->mechanismList == NULL ) {
++ xmlSecError( XMLSEC_ERRORS_HERE ,
++ NULL ,
++ NULL ,
++ XMLSEC_ERRORS_R_XMLSEC_FAILED ,
++ XMLSEC_ERRORS_NO_MESSAGE ) ;
++ return( -1 );
++ }
++ for( ; counter >= 0 ; counter -- )
++ *( newKeySlot->mechanismList + counter ) = *( keySlot->mechanismList + counter ) ;
++ }
++
++ return( 0 );
++}
++
++xmlSecNssKeySlotPtr
++xmlSecNssKeySlotDuplicate(
++ xmlSecNssKeySlotPtr keySlot
++) {
++ xmlSecNssKeySlotPtr newKeySlot ;
++ int ret ;
++
++ xmlSecAssert2( keySlot != NULL , NULL ) ;
++
++ newKeySlot = xmlSecNssKeySlotCreate() ;
++ if( newKeySlot == NULL ) {
++ xmlSecError( XMLSEC_ERRORS_HERE ,
++ NULL ,
++ NULL ,
++ XMLSEC_ERRORS_R_XMLSEC_FAILED ,
++ XMLSEC_ERRORS_NO_MESSAGE ) ;
++ return( NULL );
++ }
++
++ if( xmlSecNssKeySlotCopy( newKeySlot, keySlot ) < 0 ) {
++ xmlSecError( XMLSEC_ERRORS_HERE ,
++ NULL ,
++ NULL ,
++ XMLSEC_ERRORS_R_XMLSEC_FAILED ,
++ XMLSEC_ERRORS_NO_MESSAGE ) ;
++ return( NULL );
++ }
++
++ return( newKeySlot );
++}
++
++void
++xmlSecNssKeySlotDestroy(
++ xmlSecNssKeySlotPtr keySlot
++) {
++ xmlSecAssert( keySlot != NULL ) ;
++
++ if( keySlot->mechanismList != NULL )
++ xmlFree( keySlot->mechanismList ) ;
++
++ if( keySlot->slot != NULL )
++ PK11_FreeSlot( keySlot->slot ) ;
++
++ xmlFree( keySlot ) ;
++}
++
++int
++xmlSecNssKeySlotBindMech(
++ xmlSecNssKeySlotPtr keySlot ,
++ CK_MECHANISM_TYPE type
++) {
++ int counter ;
++
++ xmlSecAssert2( keySlot != NULL , 0 ) ;
++ xmlSecAssert2( keySlot->slot != NULL , 0 ) ;
++ xmlSecAssert2( type != CKM_INVALID_MECHANISM , 0 ) ;
++
++ for( counter = 0 ; *( keySlot->mechanismList + counter ) != CKM_INVALID_MECHANISM ; counter ++ ) {
++ if( *( keySlot->mechanismList + counter ) == type )
++ return(1) ;
++ }
++
++ return( 0 ) ;
++}
++
++int
++xmlSecNssKeySlotSupportMech(
++ xmlSecNssKeySlotPtr keySlot ,
++ CK_MECHANISM_TYPE type
++) {
++ xmlSecAssert2( keySlot != NULL , 0 ) ;
++ xmlSecAssert2( keySlot->slot != NULL , 0 ) ;
++ xmlSecAssert2( type != CKM_INVALID_MECHANISM , 0 ) ;
++
++ if( PK11_DoesMechanism( keySlot->slot , type ) == PR_TRUE ) {
++ return(1);
++ } else
++ return(0);
++}
++
++void
++xmlSecNssKeySlotDebugDump(
++ xmlSecNssKeySlotPtr keySlot ,
++ FILE* output
++) {
++ xmlSecAssert( keySlot != NULL ) ;
++ xmlSecAssert( output != NULL ) ;
++
++ fprintf( output, "== KEY SLOT\n" );
++}
++
++void
++xmlSecNssKeySlotDebugXmlDump(
++ xmlSecNssKeySlotPtr keySlot ,
++ FILE* output
++) {
++}
++
++/**
++ * Key Slot List
++ */
++#ifdef __MINGW32__ // for runtime-pseudo-reloc
++static struct _xmlSecPtrListKlass xmlSecNssKeySlotPtrListKlass = {
++#else
++static xmlSecPtrListKlass xmlSecNssKeySlotPtrListKlass = {
++#endif
++ BAD_CAST "mechanism-list",
++ (xmlSecPtrDuplicateItemMethod)xmlSecNssKeySlotDuplicate,
++ (xmlSecPtrDestroyItemMethod)xmlSecNssKeySlotDestroy,
++ (xmlSecPtrDebugDumpItemMethod)xmlSecNssKeySlotDebugDump,
++ (xmlSecPtrDebugDumpItemMethod)xmlSecNssKeySlotDebugXmlDump,
++};
++
++xmlSecPtrListId
++xmlSecNssKeySlotListGetKlass(void) {
++ return(&xmlSecNssKeySlotPtrListKlass);
++}
++
++
++/*-
++ * Global PKCS#11 crypto token repository -- Key slot list
++ */
++static xmlSecPtrListPtr _xmlSecNssKeySlotList = NULL ;
++
++PK11SlotInfo*
++xmlSecNssSlotGet(
++ CK_MECHANISM_TYPE type
++) {
++ PK11SlotInfo* slot = NULL ;
++ xmlSecNssKeySlotPtr keySlot ;
++ xmlSecSize ksSize ;
++ xmlSecSize ksPos ;
++ char flag ;
++
++ if( _xmlSecNssKeySlotList == NULL ) {
++ slot = PK11_GetBestSlot( type , NULL ) ;
++ } else {
++ ksSize = xmlSecPtrListGetSize( _xmlSecNssKeySlotList ) ;
++
++ /*-
++ * Firstly, checking whether the mechanism is bound with a special slot.
++ * If no bound slot, we try to find the first eligible slot in the list.
++ */
++ for( flag = 0, ksPos = 0 ; ksPos < ksSize ; ksPos ++ ) {
++ keySlot = ( xmlSecNssKeySlotPtr )xmlSecPtrListGetItem( _xmlSecNssKeySlotList, ksPos ) ;
++ if( keySlot != NULL && xmlSecNssKeySlotBindMech( keySlot, type ) ) {
++ slot = xmlSecNssKeySlotGetSlot( keySlot ) ;
++ flag = 2 ;
++ } else if( flag == 0 && xmlSecNssKeySlotSupportMech( keySlot, type ) ) {
++ slot = xmlSecNssKeySlotGetSlot( keySlot ) ;
++ flag = 1 ;
++ }
++
++ if( flag == 2 )
++ break ;
++ }
++ if( slot != NULL )
++ slot = PK11_ReferenceSlot( slot ) ;
++ }
++
++ if( slot != NULL && PK11_NeedLogin( slot ) ) {
++ if( PK11_Authenticate( slot , PR_TRUE , NULL ) != SECSuccess ) {
++ xmlSecError( XMLSEC_ERRORS_HERE ,
++ NULL ,
++ NULL ,
++ XMLSEC_ERRORS_R_XMLSEC_FAILED ,
++ XMLSEC_ERRORS_NO_MESSAGE ) ;
++ PK11_FreeSlot( slot ) ;
++ return( NULL );
++ }
++ }
++
++ return slot ;
++}
++
++int
++xmlSecNssSlotInitialize(
++ void
++) {
++ if( _xmlSecNssKeySlotList != NULL ) {
++ xmlSecPtrListDestroy( _xmlSecNssKeySlotList ) ;
++ _xmlSecNssKeySlotList = NULL ;
++ }
++
++ _xmlSecNssKeySlotList = xmlSecPtrListCreate( xmlSecNssKeySlotListId ) ;
++ if( _xmlSecNssKeySlotList == NULL ) {
++ xmlSecError( XMLSEC_ERRORS_HERE ,
++ NULL ,
++ NULL ,
++ XMLSEC_ERRORS_R_XMLSEC_FAILED ,
++ XMLSEC_ERRORS_NO_MESSAGE ) ;
++ return( -1 );
++ }
++
++ return(0);
++}
++
++void
++xmlSecNssSlotShutdown(
++ void
++) {
++ if( _xmlSecNssKeySlotList != NULL ) {
++ xmlSecPtrListDestroy( _xmlSecNssKeySlotList ) ;
++ _xmlSecNssKeySlotList = NULL ;
++ }
++}
++
++int
++xmlSecNssSlotAdopt(
++ PK11SlotInfo* slot,
++ CK_MECHANISM_TYPE type
++) {
++ xmlSecNssKeySlotPtr keySlot ;
++ xmlSecSize ksSize ;
++ xmlSecSize ksPos ;
++ char flag ;
++
++ xmlSecAssert2( _xmlSecNssKeySlotList != NULL, -1 ) ;
++ xmlSecAssert2( slot != NULL, -1 ) ;
++
++ ksSize = xmlSecPtrListGetSize( _xmlSecNssKeySlotList ) ;
++
++ /*-
++ * Firstly, checking whether the slot is in the repository already.
++ */
++ flag = 0 ;
++ for( ksPos = 0 ; ksPos < ksSize ; ksPos ++ ) {
++ keySlot = ( xmlSecNssKeySlotPtr )xmlSecPtrListGetItem( _xmlSecNssKeySlotList, ksPos ) ;
++ /* If find the slot in the list */
++ if( keySlot != NULL && xmlSecNssKeySlotGetSlot( keySlot ) == slot ) {
++ /* If mechnism type is valid, bind the slot with the mechanism */
++ if( type != CKM_INVALID_MECHANISM ) {
++ if( xmlSecNssKeySlotEnableMech( keySlot, type ) < 0 ) {
++ xmlSecError( XMLSEC_ERRORS_HERE ,
++ NULL ,
++ NULL ,
++ XMLSEC_ERRORS_R_XMLSEC_FAILED ,
++ XMLSEC_ERRORS_NO_MESSAGE ) ;
++ return(-1);
++ }
++ }
++
++ flag = 1 ;
++ }
++ }
++
++ /* If the slot do not in the list, add a new item to the list */
++ if( flag == 0 ) {
++ /* Create a new KeySlot */
++ keySlot = xmlSecNssKeySlotCreate() ;
++ if( keySlot == NULL ) {
++ xmlSecError( XMLSEC_ERRORS_HERE ,
++ NULL ,
++ NULL ,
++ XMLSEC_ERRORS_R_XMLSEC_FAILED ,
++ XMLSEC_ERRORS_NO_MESSAGE ) ;
++ return(-1);
++ }
++
++ /* Initialize the keySlot with a slot */
++ if( xmlSecNssKeySlotInitialize( keySlot, slot ) < 0 ) {
++ xmlSecError( XMLSEC_ERRORS_HERE ,
++ NULL ,
++ NULL ,
++ XMLSEC_ERRORS_R_XMLSEC_FAILED ,
++ XMLSEC_ERRORS_NO_MESSAGE ) ;
++ xmlSecNssKeySlotDestroy( keySlot ) ;
++ return(-1);
++ }
++
++ /* If mechnism type is valid, bind the slot with the mechanism */
++ if( type != CKM_INVALID_MECHANISM ) {
++ if( xmlSecNssKeySlotEnableMech( keySlot, type ) < 0 ) {
++ xmlSecError( XMLSEC_ERRORS_HERE ,
++ NULL ,
++ NULL ,
++ XMLSEC_ERRORS_R_XMLSEC_FAILED ,
++ XMLSEC_ERRORS_NO_MESSAGE ) ;
++ xmlSecNssKeySlotDestroy( keySlot ) ;
++ return(-1);
++ }
++ }
++
++ /* Add keySlot into the list */
++ if( xmlSecPtrListAdd( _xmlSecNssKeySlotList, keySlot ) < 0 ) {
++ xmlSecError( XMLSEC_ERRORS_HERE ,
++ NULL ,
++ NULL ,
++ XMLSEC_ERRORS_R_XMLSEC_FAILED ,
++ XMLSEC_ERRORS_NO_MESSAGE ) ;
++ xmlSecNssKeySlotDestroy( keySlot ) ;
++ return(-1);
++ }
++ }
++
++ return(0);
++}
++
+--- misc/xmlsec1-1.2.6/src/nss/x509.c 2003-09-26 05:53:09.000000000 +0200
++++ misc/build/xmlsec1-1.2.6/src/nss/x509.c 2008-06-29 23:44:19.000000000 +0200
+@@ -34,7 +34,6 @@
+ #include <xmlsec/keys.h>
+ #include <xmlsec/keyinfo.h>
+ #include <xmlsec/keysmngr.h>
+-#include <xmlsec/x509.h>
+ #include <xmlsec/base64.h>
+ #include <xmlsec/errors.h>
+
+@@ -61,37 +60,21 @@
+ static int xmlSecNssX509CertificateNodeRead (xmlSecKeyDataPtr data,
+ xmlNodePtr node,
+ xmlSecKeyInfoCtxPtr keyInfoCtx);
+-static int xmlSecNssX509CertificateNodeWrite (CERTCertificate* cert,
+- xmlNodePtr node,
+- xmlSecKeyInfoCtxPtr keyInfoCtx);
+ static int xmlSecNssX509SubjectNameNodeRead (xmlSecKeyDataPtr data,
+ xmlNodePtr node,
+ xmlSecKeyInfoCtxPtr keyInfoCtx);
+-static int xmlSecNssX509SubjectNameNodeWrite (CERTCertificate* cert,
+- xmlNodePtr node,
+- xmlSecKeyInfoCtxPtr keyInfoCtx);
+ static int xmlSecNssX509IssuerSerialNodeRead (xmlSecKeyDataPtr data,
+ xmlNodePtr node,
+ xmlSecKeyInfoCtxPtr keyInfoCtx);
+-static int xmlSecNssX509IssuerSerialNodeWrite (CERTCertificate* cert,
+- xmlNodePtr node,
+- xmlSecKeyInfoCtxPtr keyInfoCtx);
+ static int xmlSecNssX509SKINodeRead (xmlSecKeyDataPtr data,
+ xmlNodePtr node,
+ xmlSecKeyInfoCtxPtr keyInfoCtx);
+-static int xmlSecNssX509SKINodeWrite (CERTCertificate* cert,
+- xmlNodePtr node,
+- xmlSecKeyInfoCtxPtr keyInfoCtx);
+ static int xmlSecNssX509CRLNodeRead (xmlSecKeyDataPtr data,
+ xmlNodePtr node,
+ xmlSecKeyInfoCtxPtr keyInfoCtx);
+-static int xmlSecNssX509CRLNodeWrite (CERTSignedCrl* crl,
+- xmlNodePtr node,
+- xmlSecKeyInfoCtxPtr keyInfoCtx);
+ static int xmlSecNssKeyDataX509VerifyAndExtractKey(xmlSecKeyDataPtr data,
+ xmlSecKeyPtr key,
+ xmlSecKeyInfoCtxPtr keyInfoCtx);
+-
+ static CERTCertificate* xmlSecNssX509CertDerRead (const xmlSecByte* buf,
+ xmlSecSize size);
+ static CERTCertificate* xmlSecNssX509CertBase64DerRead (xmlChar* buf);
+@@ -104,9 +87,6 @@
+ xmlSecKeyInfoCtxPtr keyInfoCtx);
+ static xmlChar* xmlSecNssX509CrlBase64DerWrite (CERTSignedCrl* crl,
+ int base64LineWrap);
+-static xmlChar* xmlSecNssX509NameWrite (CERTName* nm);
+-static xmlChar* xmlSecNssASN1IntegerWrite (SECItem *num);
+-static xmlChar* xmlSecNssX509SKIWrite (CERTCertificate* cert);
+ static void xmlSecNssX509CertDebugDump (CERTCertificate* cert,
+ FILE* output);
+ static void xmlSecNssX509CertDebugXmlDump (CERTCertificate* cert,
+@@ -254,7 +234,11 @@
+
+
+
++#ifdef __MINGW32__ // for runtime-pseudo-reloc
++static struct _xmlSecKeyDataKlass xmlSecNssKeyDataX509Klass = {
++#else
+ static xmlSecKeyDataKlass xmlSecNssKeyDataX509Klass = {
++#endif
+ sizeof(xmlSecKeyDataKlass),
+ xmlSecNssX509DataSize,
+
+@@ -378,7 +362,7 @@
+ xmlSecErrorsSafeString(xmlSecKeyDataGetName(data)),
+ "CERT_NewCertList",
+ XMLSEC_ERRORS_R_CRYPTO_FAILED,
+- XMLSEC_ERRORS_NO_MESSAGE);
++ "error code=%d", PORT_GetError());
+ return(-1);
+ }
+ }
+@@ -389,7 +373,7 @@
+ xmlSecErrorsSafeString(xmlSecKeyDataGetName(data)),
+ "CERT_AddCertToListTail",
+ XMLSEC_ERRORS_R_CRYPTO_FAILED,
+- XMLSEC_ERRORS_NO_MESSAGE);
++ "error code=%d", PORT_GetError());
+ return(-1);
+ }
+ ctx->numCerts++;
+@@ -588,7 +572,7 @@
+ xmlSecErrorsSafeString(xmlSecKeyDataGetName(dst)),
+ "CERT_DupCertificate",
+ XMLSEC_ERRORS_R_CRYPTO_FAILED,
+- XMLSEC_ERRORS_NO_MESSAGE);
++ "error code=%d", PORT_GetError());
+ return(-1);
+ }
+
+@@ -627,7 +611,7 @@
+ xmlSecErrorsSafeString(xmlSecKeyDataGetName(dst)),
+ "SEC_DupCrl",
+ XMLSEC_ERRORS_R_CRYPTO_FAILED,
+- XMLSEC_ERRORS_NO_MESSAGE);
++ "error code=%d", PORT_GetError());
+ return(-1);
+ }
+
+@@ -652,7 +636,7 @@
+ xmlSecErrorsSafeString(xmlSecKeyDataGetName(dst)),
+ "CERT_DupCertificate",
+ XMLSEC_ERRORS_R_CRYPTO_FAILED,
+- XMLSEC_ERRORS_NO_MESSAGE);
++ "error code=%d", PORT_GetError());
+ return(-1);
+ }
+ ret = xmlSecNssKeyDataX509AdoptKeyCert(dst, certDst);
+@@ -752,31 +736,22 @@
+ xmlSecNssKeyDataX509XmlWrite(xmlSecKeyDataId id, xmlSecKeyPtr key,
+ xmlNodePtr node, xmlSecKeyInfoCtxPtr keyInfoCtx) {
+ xmlSecKeyDataPtr data;
++ xmlNodePtr cur;
++ xmlChar* buf;
+ CERTCertificate* cert;
+ CERTSignedCrl* crl;
+ xmlSecSize size, pos;
+- int content = 0;
+- int ret;
+
+ xmlSecAssert2(id == xmlSecNssKeyDataX509Id, -1);
+ xmlSecAssert2(key != NULL, -1);
+ xmlSecAssert2(node != NULL, -1);
+ xmlSecAssert2(keyInfoCtx != NULL, -1);
+
+- content = xmlSecX509DataGetNodeContent (node, 1, keyInfoCtx);
+- if (content < 0) {
+- xmlSecError(XMLSEC_ERRORS_HERE,
+- xmlSecErrorsSafeString(xmlSecKeyDataKlassGetName(id)),
+- "xmlSecX509DataGetNodeContent",
+- XMLSEC_ERRORS_R_XMLSEC_FAILED,
+- "content=%d", content);
+- return(-1);
+- } else if(content == 0) {
+- /* by default we are writing certificates and crls */
+- content = XMLSEC_X509DATA_DEFAULT;
++ /* todo: flag in ctx remove all existing content */
++ if(0) {
++ xmlNodeSetContent(node, NULL);
+ }
+
+- /* get x509 data */
+ data = xmlSecKeyGetData(key, id);
+ if(data == NULL) {
+ /* no x509 data in the key */
+@@ -795,80 +770,75 @@
+ "pos=%d", pos);
+ return(-1);
+ }
+-
+- if((content & XMLSEC_X509DATA_CERTIFICATE_NODE) != 0) {
+- ret = xmlSecNssX509CertificateNodeWrite(cert, node, keyInfoCtx);
+- if(ret < 0) {
+- xmlSecError(XMLSEC_ERRORS_HERE,
+- xmlSecErrorsSafeString(xmlSecKeyDataKlassGetName(id)),
+- "xmlSecNssX509CertificateNodeWrite",
+- XMLSEC_ERRORS_R_XMLSEC_FAILED,
+- "pos=%d", pos);
+- return(-1);
+- }
++
++ /* set base64 lines size from context */
++ buf = xmlSecNssX509CertBase64DerWrite(cert, keyInfoCtx->base64LineSize);
++ if(buf == NULL) {
++ xmlSecError(XMLSEC_ERRORS_HERE,
++ xmlSecErrorsSafeString(xmlSecKeyDataKlassGetName(id)),
++ "xmlSecNssX509CertBase64DerWrite",
++ XMLSEC_ERRORS_R_XMLSEC_FAILED,
++ XMLSEC_ERRORS_NO_MESSAGE);
++ return(-1);
+ }
+-
+- if((content & XMLSEC_X509DATA_SUBJECTNAME_NODE) != 0) {
+- ret = xmlSecNssX509SubjectNameNodeWrite(cert, node, keyInfoCtx);
+- if(ret < 0) {
+- xmlSecError(XMLSEC_ERRORS_HERE,
+- xmlSecErrorsSafeString(xmlSecKeyDataKlassGetName(id)),
+- "xmlSecNssX509SubjectNameNodeWrite",
+- XMLSEC_ERRORS_R_XMLSEC_FAILED,
+- "pos=%d", pos);
+- return(-1);
+- }
++
++ cur = xmlSecAddChild(node, xmlSecNodeX509Certificate, xmlSecDSigNs);
++ if(cur == NULL) {
++ xmlSecError(XMLSEC_ERRORS_HERE,
++ xmlSecErrorsSafeString(xmlSecKeyDataKlassGetName(id)),
++ "xmlSecAddChild",
++ XMLSEC_ERRORS_R_XMLSEC_FAILED,
++ "node=%s",
++ xmlSecErrorsSafeString(xmlSecNodeX509Certificate));
++ xmlFree(buf);
++ return(-1);
+ }
++ /* todo: add \n around base64 data - from context */
++ /* todo: add errors check */
++ xmlNodeSetContent(cur, xmlSecStringCR);
++ xmlNodeSetContent(cur, buf);
++ xmlFree(buf);
++ }
+
+- if((content & XMLSEC_X509DATA_ISSUERSERIAL_NODE) != 0) {
+- ret = xmlSecNssX509IssuerSerialNodeWrite(cert, node, keyInfoCtx);
+- if(ret < 0) {
+- xmlSecError(XMLSEC_ERRORS_HERE,
+- xmlSecErrorsSafeString(xmlSecKeyDataKlassGetName(id)),
+- "xmlSecNssX509IssuerSerialNodeWrite",
+- XMLSEC_ERRORS_R_XMLSEC_FAILED,
+- "pos=%d", pos);
+- return(-1);
+- }
+- }
++ /* write crls */
++ size = xmlSecNssKeyDataX509GetCrlsSize(data);
++ for(pos = 0; pos < size; ++pos) {
++ crl = xmlSecNssKeyDataX509GetCrl(data, pos);
++ if(crl == NULL) {
++ xmlSecError(XMLSEC_ERRORS_HERE,
++ xmlSecErrorsSafeString(xmlSecKeyDataKlassGetName(id)),
++ "xmlSecNssKeyDataX509GetCrl",
++ XMLSEC_ERRORS_R_XMLSEC_FAILED,
++ "pos=%d", pos);
++ return(-1);
++ }
+
+- if((content & XMLSEC_X509DATA_SKI_NODE) != 0) {
+- ret = xmlSecNssX509SKINodeWrite(cert, node, keyInfoCtx);
+- if(ret < 0) {
+- xmlSecError(XMLSEC_ERRORS_HERE,
+- xmlSecErrorsSafeString(xmlSecKeyDataKlassGetName(id)),
+- "xmlSecNssX509SKINodeWrite",
+- XMLSEC_ERRORS_R_XMLSEC_FAILED,
+- "pos=%d", pos);
+- return(-1);
+- }
+- }
+- }
++ /* set base64 lines size from context */
++ buf = xmlSecNssX509CrlBase64DerWrite(crl, keyInfoCtx->base64LineSize);
++ if(buf == NULL) {
++ xmlSecError(XMLSEC_ERRORS_HERE,
++ xmlSecErrorsSafeString(xmlSecKeyDataKlassGetName(id)),
++ "xmlSecNssX509CrlBase64DerWrite",
++ XMLSEC_ERRORS_R_XMLSEC_FAILED,
++ XMLSEC_ERRORS_NO_MESSAGE);
++ return(-1);
++ }
+
+- /* write crls if needed */
+- if((content & XMLSEC_X509DATA_CRL_NODE) != 0) {
+- size = xmlSecNssKeyDataX509GetCrlsSize(data);
+- for(pos = 0; pos < size; ++pos) {
+- crl = xmlSecNssKeyDataX509GetCrl(data, pos);
+- if(crl == NULL) {
+- xmlSecError(XMLSEC_ERRORS_HERE,
+- xmlSecErrorsSafeString(xmlSecKeyDataKlassGetName(id)),
+- "xmlSecNssKeyDataX509GetCrl",
+- XMLSEC_ERRORS_R_XMLSEC_FAILED,
+- "pos=%d", pos);
+- return(-1);
+- }
+-
+- ret = xmlSecNssX509CRLNodeWrite(crl, node, keyInfoCtx);
+- if(ret < 0) {
+- xmlSecError(XMLSEC_ERRORS_HERE,
+- xmlSecErrorsSafeString(xmlSecKeyDataKlassGetName(id)),
+- "xmlSecNssX509CRLNodeWrite",
+- XMLSEC_ERRORS_R_XMLSEC_FAILED,
+- "pos=%d", pos);
+- return(-1);
+- }
+- }
++ cur = xmlSecAddChild(node, xmlSecNodeX509CRL, xmlSecDSigNs);
++ if(cur == NULL) {
++ xmlSecError(XMLSEC_ERRORS_HERE,
++ xmlSecErrorsSafeString(xmlSecKeyDataKlassGetName(id)),
++ "xmlSecAddChild",
++ XMLSEC_ERRORS_R_XMLSEC_FAILED,
++ "new_node=%s",
++ xmlSecErrorsSafeString(xmlSecNodeX509CRL));
++ xmlFree(buf);
++ return(-1);
++ }
++ /* todo: add \n around base64 data - from context */
++ /* todo: add errors check */
++ xmlNodeSetContent(cur, xmlSecStringCR);
++ xmlNodeSetContent(cur, buf);
+ }
+
+ return(0);
+@@ -1015,19 +985,13 @@
+ xmlSecAssert2(keyInfoCtx != NULL, -1);
+
+ content = xmlNodeGetContent(node);
+- if((content == NULL) || (xmlSecIsEmptyString(content) == 1)) {
+- if(content != NULL) {
+- xmlFree(content);
+- }
+- if((keyInfoCtx->flags & XMLSEC_KEYINFO_FLAGS_STOP_ON_EMPTY_NODE) != 0) {
+- xmlSecError(XMLSEC_ERRORS_HERE,
+- xmlSecErrorsSafeString(xmlSecKeyDataGetName(data)),
+- xmlSecErrorsSafeString(xmlSecNodeGetName(node)),
+- XMLSEC_ERRORS_R_INVALID_NODE_CONTENT,
+- XMLSEC_ERRORS_NO_MESSAGE);
+- return(-1);
+- }
+- return(0);
++ if(content == NULL){
++ xmlSecError(XMLSEC_ERRORS_HERE,
++ xmlSecErrorsSafeString(xmlSecKeyDataGetName(data)),
++ xmlSecErrorsSafeString(xmlSecNodeGetName(node)),
++ XMLSEC_ERRORS_R_INVALID_NODE_CONTENT,
++ XMLSEC_ERRORS_NO_MESSAGE);
++ return(-1);
+ }
+
+ cert = xmlSecNssX509CertBase64DerRead(content);
+@@ -1057,46 +1021,6 @@
+ return(0);
+ }
+
+-static int
+-xmlSecNssX509CertificateNodeWrite(CERTCertificate* cert, xmlNodePtr node, xmlSecKeyInfoCtxPtr keyInfoCtx) {
+- xmlChar* buf;
+- xmlNodePtr cur;
+-
+- xmlSecAssert2(cert != NULL, -1);
+- xmlSecAssert2(node != NULL, -1);
+- xmlSecAssert2(keyInfoCtx != NULL, -1);
+-
+- /* set base64 lines size from context */
+- buf = xmlSecNssX509CertBase64DerWrite(cert, keyInfoCtx->base64LineSize);
+- if(buf == NULL) {
+- xmlSecError(XMLSEC_ERRORS_HERE,
+- NULL,
+- "xmlSecNssX509CertBase64DerWrite",
+- XMLSEC_ERRORS_R_XMLSEC_FAILED,
+- XMLSEC_ERRORS_NO_MESSAGE);
+- return(-1);
+- }
+-
+- cur = xmlSecAddChild(node, xmlSecNodeX509Certificate, xmlSecDSigNs);
+- if(cur == NULL) {
+- xmlSecError(XMLSEC_ERRORS_HERE,
+- NULL,
+- "xmlSecAddChild",
+- XMLSEC_ERRORS_R_XMLSEC_FAILED,
+- "node=%s",
+- xmlSecErrorsSafeString(xmlSecNodeX509Certificate));
+- xmlFree(buf);
+- return(-1);
+- }
+-
+- /* todo: add \n around base64 data - from context */
+- /* todo: add errors check */
+- xmlNodeSetContent(cur, xmlSecStringCR);
+- xmlNodeSetContent(cur, buf);
+- xmlFree(buf);
+- return(0);
+-}
+-
+ static int
+ xmlSecNssX509SubjectNameNodeRead(xmlSecKeyDataPtr data, xmlNodePtr node, xmlSecKeyInfoCtxPtr keyInfoCtx) {
+ xmlSecKeyDataStorePtr x509Store;
+@@ -1120,19 +1044,13 @@
+ }
+
+ subject = xmlNodeGetContent(node);
+- if((subject == NULL) || (xmlSecIsEmptyString(subject) == 1)) {
+- if(subject != NULL) {
+- xmlFree(subject);
+- }
+- if((keyInfoCtx->flags & XMLSEC_KEYINFO_FLAGS_STOP_ON_EMPTY_NODE) != 0) {
+- xmlSecError(XMLSEC_ERRORS_HERE,
+- xmlSecErrorsSafeString(xmlSecKeyDataGetName(data)),
+- xmlSecErrorsSafeString(xmlSecNodeGetName(node)),
+- XMLSEC_ERRORS_R_INVALID_NODE_CONTENT,
+- XMLSEC_ERRORS_NO_MESSAGE);
+- return(-1);
+- }
+- return(0);
++ if(subject == NULL) {
++ xmlSecError(XMLSEC_ERRORS_HERE,
++ xmlSecErrorsSafeString(xmlSecKeyDataGetName(data)),
++ xmlSecErrorsSafeString(xmlSecNodeGetName(node)),
++ XMLSEC_ERRORS_R_INVALID_NODE_CONTENT,
++ XMLSEC_ERRORS_NO_MESSAGE);
++ return(-1);
+ }
+
+ cert = xmlSecNssX509StoreFindCert(x509Store, subject, NULL, NULL, NULL, keyInfoCtx);
+@@ -1167,40 +1085,6 @@
+ return(0);
+ }
+
+-static int
+-xmlSecNssX509SubjectNameNodeWrite(CERTCertificate* cert, xmlNodePtr node, xmlSecKeyInfoCtxPtr keyInfoCtx ATTRIBUTE_UNUSED) {
+- xmlChar* buf = NULL;
+- xmlNodePtr cur = NULL;
+-
+- xmlSecAssert2(cert != NULL, -1);
+- xmlSecAssert2(node != NULL, -1);
+-
+- buf = xmlSecNssX509NameWrite(&(cert->subject));
+- if(buf == NULL) {
+- xmlSecError(XMLSEC_ERRORS_HERE,
+- NULL,
+- "xmlSecNssX509NameWrite(&(cert->subject))",
+- XMLSEC_ERRORS_R_XMLSEC_FAILED,
+- XMLSEC_ERRORS_NO_MESSAGE);
+- return(-1);
+- }
+-
+- cur = xmlSecAddChild(node, xmlSecNodeX509SubjectName, xmlSecDSigNs);
+- if(cur == NULL) {
+- xmlSecError(XMLSEC_ERRORS_HERE,
+- NULL,
+- "xmlSecAddChild",
+- XMLSEC_ERRORS_R_XMLSEC_FAILED,
+- "node=%s",
+- xmlSecErrorsSafeString(xmlSecNodeX509SubjectName));
+- xmlFree(buf);
+- return(-1);
+- }
+- xmlNodeSetContent(cur, buf);
+- xmlFree(buf);
+- return(0);
+-}
+-
+ static int
+ xmlSecNssX509IssuerSerialNodeRead(xmlSecKeyDataPtr data, xmlNodePtr node, xmlSecKeyInfoCtxPtr keyInfoCtx) {
+ xmlSecKeyDataStorePtr x509Store;
+@@ -1226,21 +1110,9 @@
+ }
+
+ cur = xmlSecGetNextElementNode(node->children);
+- if(cur == NULL) {
+- if((keyInfoCtx->flags & XMLSEC_KEYINFO_FLAGS_STOP_ON_EMPTY_NODE) != 0) {
+- xmlSecError(XMLSEC_ERRORS_HERE,
+- xmlSecErrorsSafeString(xmlSecKeyDataGetName(data)),
+- xmlSecErrorsSafeString(xmlSecNodeX509IssuerName),
+- XMLSEC_ERRORS_R_NODE_NOT_FOUND,
+- "node=%s",
+- xmlSecErrorsSafeString(xmlSecNodeGetName(cur)));
+- return(-1);
+- }
+- return(0);
+- }
+-
++
+ /* the first is required node X509IssuerName */
+- if(!xmlSecCheckNodeName(cur, xmlSecNodeX509IssuerName, xmlSecDSigNs)) {
++ if((cur == NULL) || !xmlSecCheckNodeName(cur, xmlSecNodeX509IssuerName, xmlSecDSigNs)) {
+ xmlSecError(XMLSEC_ERRORS_HERE,
+ xmlSecErrorsSafeString(xmlSecKeyDataGetName(data)),
+ xmlSecErrorsSafeString(xmlSecNodeX509IssuerName),
+@@ -1332,78 +1204,6 @@
+ return(0);
+ }
+
+-static int
+-xmlSecNssX509IssuerSerialNodeWrite(CERTCertificate* cert, xmlNodePtr node, xmlSecKeyInfoCtxPtr keyInfoCtx ATTRIBUTE_UNUSED) {
+- xmlNodePtr cur;
+- xmlNodePtr issuerNameNode;
+- xmlNodePtr issuerNumberNode;
+- xmlChar* buf;
+-
+- xmlSecAssert2(cert != NULL, -1);
+- xmlSecAssert2(node != NULL, -1);
+-
+- /* create xml nodes */
+- cur = xmlSecAddChild(node, xmlSecNodeX509IssuerSerial, xmlSecDSigNs);
+- if(cur == NULL) {
+- xmlSecError(XMLSEC_ERRORS_HERE,
+- NULL,
+- "xmlSecAddChild",
+- XMLSEC_ERRORS_R_XMLSEC_FAILED,
+- "node=%s",
+- xmlSecErrorsSafeString(xmlSecNodeX509IssuerSerial));
+- return(-1);
+- }
+-
+- issuerNameNode = xmlSecAddChild(cur, xmlSecNodeX509IssuerName, xmlSecDSigNs);
+- if(issuerNameNode == NULL) {
+- xmlSecError(XMLSEC_ERRORS_HERE,
+- NULL,
+- "xmlSecAddChild",
+- XMLSEC_ERRORS_R_XMLSEC_FAILED,
+- "node=%s",
+- xmlSecErrorsSafeString(xmlSecNodeX509IssuerName));
+- return(-1);
+- }
+-
+- issuerNumberNode = xmlSecAddChild(cur, xmlSecNodeX509SerialNumber, xmlSecDSigNs);
+- if(issuerNumberNode == NULL) {
+- xmlSecError(XMLSEC_ERRORS_HERE,
+- NULL,
+- "xmlSecAddChild",
+- XMLSEC_ERRORS_R_XMLSEC_FAILED,
+- "node=%s",
+- xmlSecErrorsSafeString(xmlSecNodeX509SerialNumber));
+- return(-1);
+- }
+-
+- /* write data */
+- buf = xmlSecNssX509NameWrite(&(cert->issuer));
+- if(buf == NULL) {
+- xmlSecError(XMLSEC_ERRORS_HERE,
+- NULL,
+- "xmlSecNssX509NameWrite(&(cert->issuer))",
+- XMLSEC_ERRORS_R_XMLSEC_FAILED,
+- XMLSEC_ERRORS_NO_MESSAGE);
+- return(-1);
+- }
+- xmlNodeSetContent(issuerNameNode, buf);
+- xmlFree(buf);
+-
+- buf = xmlSecNssASN1IntegerWrite(&(cert->serialNumber));
+- if(buf == NULL) {
+- xmlSecError(XMLSEC_ERRORS_HERE,
+- NULL,
+- "xmlSecNssASN1IntegerWrite(&(cert->serialNumber))",
+- XMLSEC_ERRORS_R_XMLSEC_FAILED,
+- XMLSEC_ERRORS_NO_MESSAGE);
+- return(-1);
+- }
+- xmlNodeSetContent(issuerNumberNode, buf);
+- xmlFree(buf);
+-
+- return(0);
+-}
+-
+ static int
+ xmlSecNssX509SKINodeRead(xmlSecKeyDataPtr data, xmlNodePtr node, xmlSecKeyInfoCtxPtr keyInfoCtx) {
+ xmlSecKeyDataStorePtr x509Store;
+@@ -1427,20 +1227,14 @@
+ }
+
+ ski = xmlNodeGetContent(node);
+- if((ski == NULL) || (xmlSecIsEmptyString(ski) == 1)) {
+- if(ski != NULL) {
+- xmlFree(ski);
+- }
+- if((keyInfoCtx->flags & XMLSEC_KEYINFO_FLAGS_STOP_ON_EMPTY_NODE) != 0) {
+- xmlSecError(XMLSEC_ERRORS_HERE,
+- xmlSecErrorsSafeString(xmlSecKeyDataGetName(data)),
+- xmlSecErrorsSafeString(xmlSecNodeGetName(node)),
+- XMLSEC_ERRORS_R_INVALID_NODE_CONTENT,
+- "node=%s",
+- xmlSecErrorsSafeString(xmlSecNodeX509SKI));
+- return(-1);
+- }
+- return(0);
++ if(ski == NULL) {
++ xmlSecError(XMLSEC_ERRORS_HERE,
++ xmlSecErrorsSafeString(xmlSecKeyDataGetName(data)),
++ xmlSecErrorsSafeString(xmlSecNodeGetName(node)),
++ XMLSEC_ERRORS_R_INVALID_NODE_CONTENT,
++ "node=%s",
++ xmlSecErrorsSafeString(xmlSecNodeX509SKI));
++ return(-1);
+ }
+
+ cert = xmlSecNssX509StoreFindCert(x509Store, NULL, NULL, NULL, ski, keyInfoCtx);
+@@ -1475,41 +1269,6 @@
+ return(0);
+ }
+
+-static int
+-xmlSecNssX509SKINodeWrite(CERTCertificate* cert, xmlNodePtr node, xmlSecKeyInfoCtxPtr keyInfoCtx ATTRIBUTE_UNUSED) {
+- xmlChar *buf = NULL;
+- xmlNodePtr cur = NULL;
+-
+- xmlSecAssert2(cert != NULL, -1);
+- xmlSecAssert2(node != NULL, -1);
+-
+- buf = xmlSecNssX509SKIWrite(cert);
+- if(buf == NULL) {
+- xmlSecError(XMLSEC_ERRORS_HERE,
+- NULL,
+- "xmlSecNssX509SKIWrite",
+- XMLSEC_ERRORS_R_XMLSEC_FAILED,
+- XMLSEC_ERRORS_NO_MESSAGE);
+- return(-1);
+- }
+-
+- cur = xmlSecAddChild(node, xmlSecNodeX509SKI, xmlSecDSigNs);
+- if(cur == NULL) {
+- xmlSecError(XMLSEC_ERRORS_HERE,
+- NULL,
+- "xmlSecAddChild",
+- XMLSEC_ERRORS_R_XMLSEC_FAILED,
+- "new_node=%s",
+- xmlSecErrorsSafeString(xmlSecNodeX509SKI));
+- xmlFree(buf);
+- return(-1);
+- }
+- xmlNodeSetContent(cur, buf);
+- xmlFree(buf);
+-
+- return(0);
+-}
+-
+ static int
+ xmlSecNssX509CRLNodeRead(xmlSecKeyDataPtr data, xmlNodePtr node, xmlSecKeyInfoCtxPtr keyInfoCtx) {
+ xmlChar *content;
+@@ -1520,19 +1279,13 @@
+ xmlSecAssert2(keyInfoCtx != NULL, -1);
+
+ content = xmlNodeGetContent(node);
+- if((content == NULL) || (xmlSecIsEmptyString(content) == 1)) {
+- if(content != NULL) {
+- xmlFree(content);
+- }
+- if((keyInfoCtx->flags & XMLSEC_KEYINFO_FLAGS_STOP_ON_EMPTY_NODE) != 0) {
+- xmlSecError(XMLSEC_ERRORS_HERE,
+- xmlSecErrorsSafeString(xmlSecKeyDataGetName(data)),
+- xmlSecErrorsSafeString(xmlSecNodeGetName(node)),
+- XMLSEC_ERRORS_R_INVALID_NODE_CONTENT,
+- XMLSEC_ERRORS_NO_MESSAGE);
+- return(-1);
+- }
+- return(0);
++ if(content == NULL){
++ xmlSecError(XMLSEC_ERRORS_HERE,
++ xmlSecErrorsSafeString(xmlSecKeyDataGetName(data)),
++ xmlSecErrorsSafeString(xmlSecNodeGetName(node)),
++ XMLSEC_ERRORS_R_INVALID_NODE_CONTENT,
++ XMLSEC_ERRORS_NO_MESSAGE);
++ return(-1);
+ }
+
+ crl = xmlSecNssX509CrlBase64DerRead(content, keyInfoCtx);
+@@ -1552,47 +1305,6 @@
+ }
+
+ static int
+-xmlSecNssX509CRLNodeWrite(CERTSignedCrl* crl, xmlNodePtr node, xmlSecKeyInfoCtxPtr keyInfoCtx) {
+- xmlChar* buf = NULL;
+- xmlNodePtr cur = NULL;
+-
+- xmlSecAssert2(crl != NULL, -1);
+- xmlSecAssert2(node != NULL, -1);
+- xmlSecAssert2(keyInfoCtx != NULL, -1);
+-
+- /* set base64 lines size from context */
+- buf = xmlSecNssX509CrlBase64DerWrite(crl, keyInfoCtx->base64LineSize);
+- if(buf == NULL) {
+- xmlSecError(XMLSEC_ERRORS_HERE,
+- NULL,
+- "xmlSecNssX509CrlBase64DerWrite",
+- XMLSEC_ERRORS_R_XMLSEC_FAILED,
+- XMLSEC_ERRORS_NO_MESSAGE);
+- return(-1);
+- }
+-
+- cur = xmlSecAddChild(node, xmlSecNodeX509CRL, xmlSecDSigNs);
+- if(cur == NULL) {
+- xmlSecError(XMLSEC_ERRORS_HERE,
+- NULL,
+- "xmlSecAddChild",
+- XMLSEC_ERRORS_R_XMLSEC_FAILED,
+- "new_node=%s",
+- xmlSecErrorsSafeString(xmlSecNodeX509CRL));
+- xmlFree(buf);
+- return(-1);
+- }
+- /* todo: add \n around base64 data - from context */
+- /* todo: add errors check */
+- xmlNodeSetContent(cur, xmlSecStringCR);
+- xmlNodeSetContent(cur, buf);
+- xmlFree(buf);
+-
+- return(0);
+-}
+-
+-
+-static int
+ xmlSecNssKeyDataX509VerifyAndExtractKey(xmlSecKeyDataPtr data, xmlSecKeyPtr key,
+ xmlSecKeyInfoCtxPtr keyInfoCtx) {
+ xmlSecNssX509DataCtxPtr ctx;
+@@ -1600,6 +1312,10 @@
+ int ret;
+ SECStatus status;
+ PRTime notBefore, notAfter;
++
++ PK11SlotInfo* slot ;
++ SECKEYPublicKey *pubKey = NULL;
++ SECKEYPrivateKey *priKey = NULL;
+
+ xmlSecAssert2(xmlSecKeyDataCheckId(data, xmlSecNssKeyDataX509Id), -1);
+ xmlSecAssert2(key != NULL, -1);
+@@ -1632,10 +1348,13 @@
+ xmlSecErrorsSafeString(xmlSecKeyDataGetName(data)),
+ "CERT_DupCertificate",
+ XMLSEC_ERRORS_R_CRYPTO_FAILED,
+- XMLSEC_ERRORS_NO_MESSAGE);
++ "error code=%d", PORT_GetError());
+ return(-1);
+ }
+
++ /*-
++ * Get Public key from cert, which does not always work for sign action.
++ *
+ keyValue = xmlSecNssX509CertGetKey(ctx->keyCert);
+ if(keyValue == NULL) {
+ xmlSecError(XMLSEC_ERRORS_HERE,
+@@ -1645,6 +1364,54 @@
+ XMLSEC_ERRORS_NO_MESSAGE);
+ return(-1);
+ }
++ */
++
++ /*-
++ * I'll search key according to KeyReq.
++ */
++ slot = cert->slot ;
++ if( ( keyInfoCtx->keyReq.keyType & xmlSecKeyDataTypePrivate ) == xmlSecKeyDataTypePrivate ) {
++ if( ( priKey = PK11_FindPrivateKeyFromCert( slot , cert , NULL ) ) == NULL ) {
++ xmlSecError( XMLSEC_ERRORS_HERE ,
++ xmlSecErrorsSafeString( xmlSecKeyDataGetName( data ) ) ,
++ "PK11_FindPrivateKeyFromCert" ,
++ XMLSEC_ERRORS_R_CRYPTO_FAILED ,
++ XMLSEC_ERRORS_NO_MESSAGE ) ;
++ return -1 ;
++ }
++ }
++
++ if( ( keyInfoCtx->keyReq.keyType & xmlSecKeyDataTypePublic ) == xmlSecKeyDataTypePublic ) {
++ if( ( pubKey = CERT_ExtractPublicKey( cert ) ) == NULL ) {
++ xmlSecError( XMLSEC_ERRORS_HERE ,
++ xmlSecErrorsSafeString( xmlSecKeyDataGetName( data ) ) ,
++ "CERT_ExtractPublicKey" ,
++ XMLSEC_ERRORS_R_CRYPTO_FAILED ,
++ XMLSEC_ERRORS_NO_MESSAGE ) ;
++
++ if( priKey != NULL )
++ SECKEY_DestroyPrivateKey( priKey ) ;
++ return -1 ;
++ }
++ }
++
++ keyValue = xmlSecNssPKIAdoptKey(priKey, pubKey);
++ if( keyValue == NULL ) {
++ xmlSecError( XMLSEC_ERRORS_HERE ,
++ xmlSecErrorsSafeString( xmlSecKeyDataGetName( data ) ) ,
++ "xmlSecNssPKIAdoptKey" ,
++ XMLSEC_ERRORS_R_CRYPTO_FAILED ,
++ XMLSEC_ERRORS_NO_MESSAGE ) ;
++
++ if( priKey != NULL )
++ SECKEY_DestroyPrivateKey( priKey ) ;
++
++ if( pubKey != NULL )
++ SECKEY_DestroyPublicKey( pubKey ) ;
++
++ return -1 ;
++ }
++ /* Modify keyValue get Done */
+
+ /* verify that the key matches our expectations */
+ if(xmlSecKeyReqMatchKeyValue(&(keyInfoCtx->keyReq), keyValue) != 1) {
+@@ -1725,14 +1492,6 @@
+ return(0);
+ }
+
+-/**
+- * xmlSecNssX509CertGetKey:
+- * @cert: the certificate.
+- *
+- * Extracts public key from the @cert.
+- *
+- * Returns public key value or NULL if an error occurs.
+- */
+ xmlSecKeyDataPtr
+ xmlSecNssX509CertGetKey(CERTCertificate* cert) {
+ xmlSecKeyDataPtr data;
+@@ -1746,7 +1505,7 @@
+ NULL,
+ "CERT_ExtractPublicKey",
+ XMLSEC_ERRORS_R_CRYPTO_FAILED,
+- XMLSEC_ERRORS_NO_MESSAGE);
++ "error code=%d", PORT_GetError());
+ return(NULL);
+ }
+
+@@ -1804,7 +1563,7 @@
+ NULL,
+ "__CERT_NewTempCertificate",
+ XMLSEC_ERRORS_R_CRYPTO_FAILED,
+- XMLSEC_ERRORS_NO_MESSAGE);
++ "error code=%d", PORT_GetError());
+ return(NULL);
+ }
+
+@@ -1827,7 +1586,7 @@
+ NULL,
+ "cert->derCert",
+ XMLSEC_ERRORS_R_CRYPTO_FAILED,
+- XMLSEC_ERRORS_NO_MESSAGE);
++ "error code=%d", PORT_GetError());
+ return(NULL);
+ }
+
+@@ -1890,7 +1649,7 @@
+ NULL,
+ "PK11_GetInternalKeySlot",
+ XMLSEC_ERRORS_R_CRYPTO_FAILED,
+- XMLSEC_ERRORS_NO_MESSAGE);
++ "error code=%d", PORT_GetError());
+ return NULL;
+ }
+
+@@ -1905,7 +1664,7 @@
+ NULL,
+ "PK11_ImportCRL",
+ XMLSEC_ERRORS_R_CRYPTO_FAILED,
+- XMLSEC_ERRORS_NO_MESSAGE);
++ "error code=%d", PORT_GetError());
+ PK11_FreeSlot(slot);
+ return(NULL);
+ }
+@@ -1929,7 +1688,7 @@
+ NULL,
+ "crl->derCrl",
+ XMLSEC_ERRORS_R_CRYPTO_FAILED,
+- XMLSEC_ERRORS_NO_MESSAGE);
++ "error code=%d", PORT_GetError());
+ return(NULL);
+ }
+
+@@ -1946,86 +1705,6 @@
+ return(res);
+ }
+
+-static xmlChar*
+-xmlSecNssX509NameWrite(CERTName* nm) {
+- xmlChar *res = NULL;
+- char *str;
+-
+- xmlSecAssert2(nm != NULL, NULL);
+-
+- str = CERT_NameToAscii(nm);
+- if (str == NULL) {
+- xmlSecError(XMLSEC_ERRORS_HERE,
+- NULL,
+- "CERT_NameToAscii",
+- XMLSEC_ERRORS_R_CRYPTO_FAILED,
+- XMLSEC_ERRORS_NO_MESSAGE);
+- return(NULL);
+- }
+-
+- res = xmlStrdup(BAD_CAST str);
+- if(res == NULL) {
+- xmlSecError(XMLSEC_ERRORS_HERE,
+- NULL,
+- "xmlStrdup",
+- XMLSEC_ERRORS_R_MALLOC_FAILED,
+- XMLSEC_ERRORS_NO_MESSAGE);
+- PORT_Free(str);
+- return(NULL);
+- }
+- PORT_Free(str);
+- return(res);
+-}
+-
+-static xmlChar*
+-xmlSecNssASN1IntegerWrite(SECItem *num) {
+- xmlChar *res = NULL;
+-
+- xmlSecAssert2(num != NULL, NULL);
+-
+- /* TODO : to be implemented after
+- * NSS bug http://bugzilla.mozilla.org/show_bug.cgi?id=212864 is fixed
+- */
+- return(res);
+-}
+-
+-static xmlChar*
+-xmlSecNssX509SKIWrite(CERTCertificate* cert) {
+- xmlChar *res = NULL;
+- SECItem ski;
+- SECStatus rv;
+-
+- xmlSecAssert2(cert != NULL, NULL);
+-
+- memset(&ski, 0, sizeof(ski));
+-
+- rv = CERT_FindSubjectKeyIDExtension(cert, &ski);
+- if (rv != SECSuccess) {
+- xmlSecError(XMLSEC_ERRORS_HERE,
+- NULL,
+- "CERT_FindSubjectKeyIDExtension",
+- XMLSEC_ERRORS_R_CRYPTO_FAILED,
+- XMLSEC_ERRORS_NO_MESSAGE);
+- SECITEM_FreeItem(&ski, PR_FALSE);
+- return(NULL);
+- }
+-
+- res = xmlSecBase64Encode(ski.data, ski.len, 0);
+- if(res == NULL) {
+- xmlSecError(XMLSEC_ERRORS_HERE,
+- NULL,
+- "xmlSecBase64Encode",
+- XMLSEC_ERRORS_R_XMLSEC_FAILED,
+- XMLSEC_ERRORS_NO_MESSAGE);
+- SECITEM_FreeItem(&ski, PR_FALSE);
+- return(NULL);
+- }
+- SECITEM_FreeItem(&ski, PR_FALSE);
+-
+- return(res);
+-}
+-
+-
+ static void
+ xmlSecNssX509CertDebugDump(CERTCertificate* cert, FILE* output) {
+ SECItem *sn;
+@@ -2084,7 +1763,11 @@
+ xmlSecSize bufSize,
+ xmlSecKeyInfoCtxPtr keyInfoCtx);
+
++#ifdef __MINGW32__ // for runtime-pseudo-reloc
++static struct _xmlSecKeyDataKlass xmlSecNssKeyDataRawX509CertKlass = {
++#else
+ static xmlSecKeyDataKlass xmlSecNssKeyDataRawX509CertKlass = {
++#endif
+ sizeof(xmlSecKeyDataKlass),
+ sizeof(xmlSecKeyData),
+
+--- misc/xmlsec1-1.2.6/src/nss/x509vfy.c 2003-09-26 02:58:15.000000000 +0200
++++ misc/build/xmlsec1-1.2.6/src/nss/x509vfy.c 2008-06-29 23:44:19.000000000 +0200
+@@ -30,6 +30,7 @@
+ #include <xmlsec/keyinfo.h>
+ #include <xmlsec/keysmngr.h>
+ #include <xmlsec/base64.h>
++#include <xmlsec/bn.h>
+ #include <xmlsec/errors.h>
+
+ #include <xmlsec/nss/crypto.h>
+@@ -43,8 +44,8 @@
+ typedef struct _xmlSecNssX509StoreCtx xmlSecNssX509StoreCtx,
+ *xmlSecNssX509StoreCtxPtr;
+ struct _xmlSecNssX509StoreCtx {
+- CERTCertList* certsList; /* just keeping a reference to destroy later */
+-};
++ CERTCertList* certsList; /* just keeping a reference to destroy later */
++};
+
+ /****************************************************************************
+ *
+@@ -54,45 +55,40 @@
+ *
+ ***************************************************************************/
+ #define xmlSecNssX509StoreGetCtx(store) \
+- ((xmlSecNssX509StoreCtxPtr)(((xmlSecByte*)(store)) + \
+- sizeof(xmlSecKeyDataStoreKlass)))
++ ((xmlSecNssX509StoreCtxPtr)(((xmlSecByte*)(store)) + \
++ sizeof(xmlSecKeyDataStoreKlass)))
+ #define xmlSecNssX509StoreSize \
+- (sizeof(xmlSecKeyDataStoreKlass) + sizeof(xmlSecNssX509StoreCtx))
++ (sizeof(xmlSecKeyDataStoreKlass) + sizeof(xmlSecNssX509StoreCtx))
+
+ static int xmlSecNssX509StoreInitialize (xmlSecKeyDataStorePtr store);
+ static void xmlSecNssX509StoreFinalize (xmlSecKeyDataStorePtr store);
+-static int xmlSecNssX509NameStringRead (xmlSecByte **str,
+- int *strLen,
+- xmlSecByte *res,
+- int resLen,
+- xmlSecByte delim,
+- int ingoreTrailingSpaces);
+-static xmlSecByte * xmlSecNssX509NameRead (xmlSecByte *str,
+- int len);
+-
+-static void xmlSecNssNumToItem(SECItem *it, unsigned long num);
+
++static int xmlSecNssIntegerToItem( const xmlChar* integer , SECItem *it ) ;
+
++#ifdef __MINGW32__ // for runtime-pseudo-reloc
++static struct _xmlSecKeyDataStoreKlass xmlSecNssX509StoreKlass = {
++#else
+ static xmlSecKeyDataStoreKlass xmlSecNssX509StoreKlass = {
+- sizeof(xmlSecKeyDataStoreKlass),
+- xmlSecNssX509StoreSize,
+-
+- /* data */
+- xmlSecNameX509Store, /* const xmlChar* name; */
+-
+- /* constructors/destructor */
+- xmlSecNssX509StoreInitialize, /* xmlSecKeyDataStoreInitializeMethod initialize; */
+- xmlSecNssX509StoreFinalize, /* xmlSecKeyDataStoreFinalizeMethod finalize; */
+-
+- /* reserved for the future */
+- NULL, /* void* reserved0; */
+- NULL, /* void* reserved1; */
++#endif
++ sizeof(xmlSecKeyDataStoreKlass),
++ xmlSecNssX509StoreSize,
++
++ /* data */
++ xmlSecNameX509Store, /* const xmlChar* name; */
++
++ /* constructors/destructor */
++ xmlSecNssX509StoreInitialize, /* xmlSecKeyDataStoreInitializeMethod initialize; */
++ xmlSecNssX509StoreFinalize, /* xmlSecKeyDataStoreFinalizeMethod finalize; */
++
++ /* reserved for the future */
++ NULL, /* void* reserved0; */
++ NULL, /* void* reserved1; */
+ };
+
+ static CERTCertificate* xmlSecNssX509FindCert(xmlChar *subjectName,
+- xmlChar *issuerName,
+- xmlChar *issuerSerial,
+- xmlChar *ski);
++ xmlChar *issuerName,
++ xmlChar *issuerSerial,
++ xmlChar *ski);
+
+
+ /**
+@@ -104,7 +100,7 @@
+ */
+ xmlSecKeyDataStoreId
+ xmlSecNssX509StoreGetKlass(void) {
+- return(&xmlSecNssX509StoreKlass);
++ return(&xmlSecNssX509StoreKlass);
+ }
+
+ /**
+@@ -125,15 +121,15 @@
+ xmlSecNssX509StoreFindCert(xmlSecKeyDataStorePtr store, xmlChar *subjectName,
+ xmlChar *issuerName, xmlChar *issuerSerial,
+ xmlChar *ski, xmlSecKeyInfoCtx* keyInfoCtx) {
+- xmlSecNssX509StoreCtxPtr ctx;
+-
+- xmlSecAssert2(xmlSecKeyDataStoreCheckId(store, xmlSecNssX509StoreId), NULL);
+- xmlSecAssert2(keyInfoCtx != NULL, NULL);
++ xmlSecNssX509StoreCtxPtr ctx;
++
++ xmlSecAssert2(xmlSecKeyDataStoreCheckId(store, xmlSecNssX509StoreId), NULL);
++ xmlSecAssert2(keyInfoCtx != NULL, NULL);
+
+- ctx = xmlSecNssX509StoreGetCtx(store);
+- xmlSecAssert2(ctx != NULL, NULL);
++ ctx = xmlSecNssX509StoreGetCtx(store);
++ xmlSecAssert2(ctx != NULL, NULL);
+
+- return(xmlSecNssX509FindCert(subjectName, issuerName, issuerSerial, ski));
++ return(xmlSecNssX509FindCert(subjectName, issuerName, issuerSerial, ski));
+ }
+
+ /**
+@@ -148,116 +144,130 @@
+ */
+ CERTCertificate *
+ xmlSecNssX509StoreVerify(xmlSecKeyDataStorePtr store, CERTCertList* certs,
+- xmlSecKeyInfoCtx* keyInfoCtx) {
+- xmlSecNssX509StoreCtxPtr ctx;
+- CERTCertListNode* head;
+- CERTCertificate* cert = NULL;
+- CERTCertListNode* head1;
+- CERTCertificate* cert1 = NULL;
+- SECStatus status = SECFailure;
+- int64 timeboundary;
+- int64 tmp1, tmp2;
+-
+- xmlSecAssert2(xmlSecKeyDataStoreCheckId(store, xmlSecNssX509StoreId), NULL);
+- xmlSecAssert2(certs != NULL, NULL);
+- xmlSecAssert2(keyInfoCtx != NULL, NULL);
+-
+- ctx = xmlSecNssX509StoreGetCtx(store);
+- xmlSecAssert2(ctx != NULL, NULL);
+-
+- for (head = CERT_LIST_HEAD(certs);
+- !CERT_LIST_END(head, certs);
+- head = CERT_LIST_NEXT(head)) {
+- cert = head->cert;
++ xmlSecKeyInfoCtx* keyInfoCtx) {
++ xmlSecNssX509StoreCtxPtr ctx;
++ CERTCertListNode* head;
++ CERTCertificate* cert = NULL;
++ CERTCertListNode* head1;
++ CERTCertificate* cert1 = NULL;
++ SECStatus status = SECFailure;
++ int64 timeboundary;
++ int64 tmp1, tmp2;
++
++ xmlSecAssert2(xmlSecKeyDataStoreCheckId(store, xmlSecNssX509StoreId), NULL);
++ xmlSecAssert2(certs != NULL, NULL);
++ xmlSecAssert2(keyInfoCtx != NULL, NULL);
++
++ ctx = xmlSecNssX509StoreGetCtx(store);
++ xmlSecAssert2(ctx != NULL, NULL);
++
++ for (head = CERT_LIST_HEAD(certs);
++ !CERT_LIST_END(head, certs);
++ head = CERT_LIST_NEXT(head)) {
++ cert = head->cert;
+ if(keyInfoCtx->certsVerificationTime > 0) {
+- /* convert the time since epoch in seconds to microseconds */
+- LL_UI2L(timeboundary, keyInfoCtx->certsVerificationTime);
+- tmp1 = (int64)PR_USEC_PER_SEC;
+- tmp2 = timeboundary;
+- LL_MUL(timeboundary, tmp1, tmp2);
++ /* convert the time since epoch in seconds to microseconds */
++ LL_UI2L(timeboundary, keyInfoCtx->certsVerificationTime);
++ tmp1 = (int64)PR_USEC_PER_SEC;
++ tmp2 = timeboundary;
++ LL_MUL(timeboundary, tmp1, tmp2);
+ } else {
+- timeboundary = PR_Now();
++ timeboundary = PR_Now();
+ }
+
+ /* if cert is the issuer of any other cert in the list, then it is
+ * to be skipped */
+ for (head1 = CERT_LIST_HEAD(certs);
+- !CERT_LIST_END(head1, certs);
+- head1 = CERT_LIST_NEXT(head1)) {
++ !CERT_LIST_END(head1, certs);
++ head1 = CERT_LIST_NEXT(head1)) {
+
+- cert1 = head1->cert;
+- if (cert1 == cert) {
++ cert1 = head1->cert;
++ if (cert1 == cert) {
+ continue;
+- }
++ }
+
+- if (SECITEM_CompareItem(&cert1->derIssuer, &cert->derSubject)
+- == SECEqual) {
++ if (SECITEM_CompareItem(&cert1->derIssuer, &cert->derSubject)
++ == SECEqual) {
+ break;
+- }
++ }
+ }
+
+ if (!CERT_LIST_END(head1, certs)) {
+- continue;
++ continue;
+ }
+-
+- status = CERT_VerifyCertificate(CERT_GetDefaultCertDB(),
+- cert, PR_FALSE,
+- (SECCertificateUsage)0,
+- timeboundary , NULL, NULL, NULL);
+- if (status == SECSuccess) {
+- break;
++ /* JL: OpenOffice.org implements its own certificate verification routine.
++ The goal is to seperate validation of the signature
++ and the certificate. For example, OOo could show that the document signature is valid,
++ but the certificate could not be verified. If we do not prevent the verification of
++ the certificate by libxmlsec and the verification fails, then the XML signature may not be
++ verified. This would happen, for example, if the root certificate is not installed.
++
++ In the store schould only be the certificate from the X509Certificate element
++ and the X509IssuerSerial element. The latter is only there
++ if the certificate is installed. Both certificates must be the same!
++ In case of writing the signature, the store contains only the certificate that
++ was created based on the information from the X509IssuerSerial element. */
++ status = SECSuccess;
++ break;
++/* status = CERT_VerifyCertificate(CERT_GetDefaultCertDB(),
++ cert, PR_FALSE,
++ (SECCertificateUsage)0,
++ timeboundary , NULL, NULL, NULL);
++ if (status == SECSuccess) {
++ break;
++ } */
+ }
+- }
+
+- if (status == SECSuccess) {
++ if (status == SECSuccess) {
+ return (cert);
+- }
+-
+- switch(PORT_GetError()) {
++ }
++
++ switch(PORT_GetError()) {
+ case SEC_ERROR_EXPIRED_ISSUER_CERTIFICATE:
+ case SEC_ERROR_CA_CERT_INVALID:
+ case SEC_ERROR_UNKNOWN_SIGNER:
+- xmlSecError(XMLSEC_ERRORS_HERE,
+- xmlSecErrorsSafeString(xmlSecKeyDataStoreGetName(store)),
+- NULL,
+- XMLSEC_ERRORS_R_CERT_ISSUER_FAILED,
+- "cert with subject name %s could not be verified because the issuer's cert is expired/invalid or not found",
+- cert->subjectName);
+- break;
++ xmlSecError(XMLSEC_ERRORS_HERE,
++ xmlSecErrorsSafeString(xmlSecKeyDataStoreGetName(store)),
++ NULL,
++ XMLSEC_ERRORS_R_CERT_ISSUER_FAILED,
++ "cert with subject name %s could not be verified because the issuer's cert is expired/invalid or not found",
++ cert->subjectName);
++ break;
+ case SEC_ERROR_EXPIRED_CERTIFICATE:
+- xmlSecError(XMLSEC_ERRORS_HERE,
+- xmlSecErrorsSafeString(xmlSecKeyDataStoreGetName(store)),
+- NULL,
+- XMLSEC_ERRORS_R_CERT_HAS_EXPIRED,
+- "cert with subject name %s has expired",
+- cert->subjectName);
+- break;
++ xmlSecError(XMLSEC_ERRORS_HERE,
++ xmlSecErrorsSafeString(xmlSecKeyDataStoreGetName(store)),
++ NULL,
++ XMLSEC_ERRORS_R_CERT_HAS_EXPIRED,
++ "cert with subject name %s has expired",
++ cert->subjectName);
++ break;
+ case SEC_ERROR_REVOKED_CERTIFICATE:
+- xmlSecError(XMLSEC_ERRORS_HERE,
+- xmlSecErrorsSafeString(xmlSecKeyDataStoreGetName(store)),
+- NULL,
+- XMLSEC_ERRORS_R_CERT_REVOKED,
+- "cert with subject name %s has been revoked",
+- cert->subjectName);
+- break;
++ xmlSecError(XMLSEC_ERRORS_HERE,
++ xmlSecErrorsSafeString(xmlSecKeyDataStoreGetName(store)),
++ NULL,
++ XMLSEC_ERRORS_R_CERT_REVOKED,
++ "cert with subject name %s has been revoked",
++ cert->subjectName);
++ break;
+ default:
+- xmlSecError(XMLSEC_ERRORS_HERE,
+- xmlSecErrorsSafeString(xmlSecKeyDataStoreGetName(store)),
+- NULL,
+- XMLSEC_ERRORS_R_CERT_VERIFY_FAILED,
+- "cert with subject name %s could not be verified",
+- cert->subjectName);
+- break;
+- }
++ xmlSecError(XMLSEC_ERRORS_HERE,
++ xmlSecErrorsSafeString(xmlSecKeyDataStoreGetName(store)),
++ NULL,
++ XMLSEC_ERRORS_R_CERT_VERIFY_FAILED,
++ "cert with subject name %s could not be verified, errcode %d",
++ cert->subjectName,
++ PORT_GetError());
++ break;
++ }
+
+- return (NULL);
++ return (NULL);
+ }
+
+ /**
+ * xmlSecNssX509StoreAdoptCert:
+- * @store: the pointer to X509 key data store klass.
+- * @cert: the pointer to NSS X509 certificate.
+- * @type: the certificate type (trusted/untrusted).
++ * @store: the pointer to X509 key data store klass.
++ * @cert: the pointer to NSS X509 certificate.
++ * @type: the certificate type (trusted/untrusted).
+ *
+ * Adds trusted (root) or untrusted certificate to the store.
+ *
+@@ -265,67 +275,67 @@
+ */
+ int
+ xmlSecNssX509StoreAdoptCert(xmlSecKeyDataStorePtr store, CERTCertificate* cert, xmlSecKeyDataType type ATTRIBUTE_UNUSED) {
+- xmlSecNssX509StoreCtxPtr ctx;
+- int ret;
++ xmlSecNssX509StoreCtxPtr ctx;
++ int ret;
+
+- xmlSecAssert2(xmlSecKeyDataStoreCheckId(store, xmlSecNssX509StoreId), -1);
+- xmlSecAssert2(cert != NULL, -1);
++ xmlSecAssert2(xmlSecKeyDataStoreCheckId(store, xmlSecNssX509StoreId), -1);
++ xmlSecAssert2(cert != NULL, -1);
+
+- ctx = xmlSecNssX509StoreGetCtx(store);
+- xmlSecAssert2(ctx != NULL, -1);
++ ctx = xmlSecNssX509StoreGetCtx(store);
++ xmlSecAssert2(ctx != NULL, -1);
+
+- if(ctx->certsList == NULL) {
+- ctx->certsList = CERT_NewCertList();
+- if(ctx->certsList == NULL) {
+- xmlSecError(XMLSEC_ERRORS_HERE,
+- xmlSecErrorsSafeString(xmlSecKeyDataStoreGetName(store)),
+- "CERT_NewCertList",
+- XMLSEC_ERRORS_R_CRYPTO_FAILED,
+- XMLSEC_ERRORS_NO_MESSAGE);
+- return(-1);
+- }
+- }
+-
+- ret = CERT_AddCertToListTail(ctx->certsList, cert);
+- if(ret != SECSuccess) {
+- xmlSecError(XMLSEC_ERRORS_HERE,
+- xmlSecErrorsSafeString(xmlSecKeyDataStoreGetName(store)),
+- "CERT_AddCertToListTail",
+- XMLSEC_ERRORS_R_CRYPTO_FAILED,
+- XMLSEC_ERRORS_NO_MESSAGE);
+- return(-1);
+- }
++ if(ctx->certsList == NULL) {
++ ctx->certsList = CERT_NewCertList();
++ if(ctx->certsList == NULL) {
++ xmlSecError(XMLSEC_ERRORS_HERE,
++ xmlSecErrorsSafeString(xmlSecKeyDataStoreGetName(store)),
++ "CERT_NewCertList",
++ XMLSEC_ERRORS_R_CRYPTO_FAILED,
++ "error code=%d", PORT_GetError());
++ return(-1);
++ }
++ }
+
+- return(0);
++ ret = CERT_AddCertToListTail(ctx->certsList, cert);
++ if(ret != SECSuccess) {
++ xmlSecError(XMLSEC_ERRORS_HERE,
++ xmlSecErrorsSafeString(xmlSecKeyDataStoreGetName(store)),
++ "CERT_AddCertToListTail",
++ XMLSEC_ERRORS_R_CRYPTO_FAILED,
++ "error code=%d", PORT_GetError());
++ return(-1);
++ }
++
++ return(0);
+ }
+
+ static int
+ xmlSecNssX509StoreInitialize(xmlSecKeyDataStorePtr store) {
+- xmlSecNssX509StoreCtxPtr ctx;
+- xmlSecAssert2(xmlSecKeyDataStoreCheckId(store, xmlSecNssX509StoreId), -1);
++ xmlSecNssX509StoreCtxPtr ctx;
++ xmlSecAssert2(xmlSecKeyDataStoreCheckId(store, xmlSecNssX509StoreId), -1);
+
+- ctx = xmlSecNssX509StoreGetCtx(store);
+- xmlSecAssert2(ctx != NULL, -1);
++ ctx = xmlSecNssX509StoreGetCtx(store);
++ xmlSecAssert2(ctx != NULL, -1);
+
+- memset(ctx, 0, sizeof(xmlSecNssX509StoreCtx));
++ memset(ctx, 0, sizeof(xmlSecNssX509StoreCtx));
+
+- return(0);
++ return(0);
+ }
+
+ static void
+ xmlSecNssX509StoreFinalize(xmlSecKeyDataStorePtr store) {
+- xmlSecNssX509StoreCtxPtr ctx;
+- xmlSecAssert(xmlSecKeyDataStoreCheckId(store, xmlSecNssX509StoreId));
++ xmlSecNssX509StoreCtxPtr ctx;
++ xmlSecAssert(xmlSecKeyDataStoreCheckId(store, xmlSecNssX509StoreId));
+
+- ctx = xmlSecNssX509StoreGetCtx(store);
+- xmlSecAssert(ctx != NULL);
+-
+- if (ctx->certsList) {
++ ctx = xmlSecNssX509StoreGetCtx(store);
++ xmlSecAssert(ctx != NULL);
++
++ if (ctx->certsList) {
+ CERT_DestroyCertList(ctx->certsList);
+ ctx->certsList = NULL;
+- }
++ }
+
+- memset(ctx, 0, sizeof(xmlSecNssX509StoreCtx));
++ memset(ctx, 0, sizeof(xmlSecNssX509StoreCtx));
+ }
+
+
+@@ -340,376 +350,213 @@
+ */
+ static CERTCertificate*
+ xmlSecNssX509FindCert(xmlChar *subjectName, xmlChar *issuerName,
+- xmlChar *issuerSerial, xmlChar *ski) {
+- CERTCertificate *cert = NULL;
+- xmlChar *p = NULL;
+- CERTName *name = NULL;
+- SECItem *nameitem = NULL;
+- PRArenaPool *arena = NULL;
+-
+- if (subjectName != NULL) {
+- p = xmlSecNssX509NameRead(subjectName, xmlStrlen(subjectName));
+- if (p == NULL) {
+- xmlSecError(XMLSEC_ERRORS_HERE,
+- NULL,
+- "xmlSecNssX509NameRead",
+- XMLSEC_ERRORS_R_XMLSEC_FAILED,
+- "subject=%s",
+- xmlSecErrorsSafeString(subjectName));
+- goto done;
+- }
+-
+- arena = PORT_NewArena(DER_DEFAULT_CHUNKSIZE);
+- if (arena == NULL) {
+- xmlSecError(XMLSEC_ERRORS_HERE,
+- NULL,
+- "PORT_NewArena",
+- XMLSEC_ERRORS_R_CRYPTO_FAILED,
+- XMLSEC_ERRORS_NO_MESSAGE);
+- goto done;
+- }
+-
+- name = CERT_AsciiToName((char*)p);
+- if (name == NULL) {
+- xmlSecError(XMLSEC_ERRORS_HERE,
+- NULL,
+- "CERT_AsciiToName",
+- XMLSEC_ERRORS_R_XMLSEC_FAILED,
+- XMLSEC_ERRORS_NO_MESSAGE);
+- goto done;
+- }
+-
+- nameitem = SEC_ASN1EncodeItem(arena, NULL, (void *)name,
+- SEC_ASN1_GET(CERT_NameTemplate));
+- if (nameitem == NULL) {
+- xmlSecError(XMLSEC_ERRORS_HERE,
+- NULL,
+- "SEC_ASN1EncodeItem",
+- XMLSEC_ERRORS_R_XMLSEC_FAILED,
+- XMLSEC_ERRORS_NO_MESSAGE);
+- goto done;
+- }
+-
+- cert = CERT_FindCertByName(CERT_GetDefaultCertDB(), nameitem);
+- goto done;
+- }
+-
+- if((issuerName != NULL) && (issuerSerial != NULL)) {
+- CERTIssuerAndSN issuerAndSN;
+-
+- p = xmlSecNssX509NameRead(issuerName, xmlStrlen(issuerName));
+- if (p == NULL) {
+- xmlSecError(XMLSEC_ERRORS_HERE,
+- NULL,
+- "xmlSecNssX509NameRead",
+- XMLSEC_ERRORS_R_XMLSEC_FAILED,
+- "issuer=%s",
+- xmlSecErrorsSafeString(issuerName));
+- goto done;
+- }
+-
+- arena = PORT_NewArena(DER_DEFAULT_CHUNKSIZE);
+- if (arena == NULL) {
+- xmlSecError(XMLSEC_ERRORS_HERE,
+- NULL,
+- "PORT_NewArena",
+- XMLSEC_ERRORS_R_CRYPTO_FAILED,
+- XMLSEC_ERRORS_NO_MESSAGE);
+- goto done;
+- }
+-
+- name = CERT_AsciiToName((char*)p);
+- if (name == NULL) {
+- xmlSecError(XMLSEC_ERRORS_HERE,
+- NULL,
+- "CERT_AsciiToName",
+- XMLSEC_ERRORS_R_XMLSEC_FAILED,
+- XMLSEC_ERRORS_NO_MESSAGE);
+- goto done;
+- }
+-
+- nameitem = SEC_ASN1EncodeItem(arena, NULL, (void *)name,
+- SEC_ASN1_GET(CERT_NameTemplate));
+- if (nameitem == NULL) {
+- xmlSecError(XMLSEC_ERRORS_HERE,
+- NULL,
+- "SEC_ASN1EncodeItem",
+- XMLSEC_ERRORS_R_XMLSEC_FAILED,
+- XMLSEC_ERRORS_NO_MESSAGE);
+- goto done;
+- }
+-
+- memset(&issuerAndSN, 0, sizeof(issuerAndSN));
++ xmlChar *issuerSerial, xmlChar *ski) {
++ CERTCertificate *cert = NULL;
++ CERTName *name = NULL;
++ SECItem *nameitem = NULL;
++ PRArenaPool *arena = NULL;
++
++ if (subjectName != NULL) {
++ arena = PORT_NewArena(DER_DEFAULT_CHUNKSIZE);
++ if (arena == NULL) {
++ xmlSecError(XMLSEC_ERRORS_HERE,
++ NULL,
++ "PORT_NewArena",
++ XMLSEC_ERRORS_R_CRYPTO_FAILED,
++ "error code=%d", PORT_GetError());
++ goto done;
++ }
+
+- issuerAndSN.derIssuer.data = nameitem->data;
+- issuerAndSN.derIssuer.len = nameitem->len;
++ name = CERT_AsciiToName((char*)subjectName);
++ if (name == NULL) {
++ xmlSecError(XMLSEC_ERRORS_HERE,
++ NULL,
++ "CERT_AsciiToName",
++ XMLSEC_ERRORS_R_XMLSEC_FAILED,
++ "error code=%d", PORT_GetError());
++ goto done;
++ }
+
+- /* TBD: serial num can be arbitrarily long */
+- xmlSecNssNumToItem(&issuerAndSN.serialNumber, PORT_Atoi((char *)issuerSerial));
++ nameitem = SEC_ASN1EncodeItem(arena, NULL, (void *)name,
++ SEC_ASN1_GET(CERT_NameTemplate));
++ if (nameitem == NULL) {
++ xmlSecError(XMLSEC_ERRORS_HERE,
++ NULL,
++ "SEC_ASN1EncodeItem",
++ XMLSEC_ERRORS_R_XMLSEC_FAILED,
++ "error code=%d", PORT_GetError());
++ goto done;
++ }
+
+- cert = CERT_FindCertByIssuerAndSN(CERT_GetDefaultCertDB(),
+- &issuerAndSN);
+- SECITEM_FreeItem(&issuerAndSN.serialNumber, PR_FALSE);
+- goto done;
+- }
+-
+- if(ski != NULL) {
+- SECItem subjKeyID;
+- int len;
+-
+- len = xmlSecBase64Decode(ski, (xmlSecByte*)ski, xmlStrlen(ski));
+- if(len < 0) {
+- xmlSecError(XMLSEC_ERRORS_HERE,
+- NULL,
+- "xmlSecBase64Decode",
+- XMLSEC_ERRORS_R_XMLSEC_FAILED,
+- "ski=%s",
+- xmlSecErrorsSafeString(ski));
+- goto done;
+- }
+-
+- memset(&subjKeyID, 0, sizeof(subjKeyID));
+- subjKeyID.data = ski;
+- subjKeyID.len = xmlStrlen(ski);
+- cert = CERT_FindCertBySubjectKeyID(CERT_GetDefaultCertDB(),
+- &subjKeyID);
+- }
++ cert = CERT_FindCertByName(CERT_GetDefaultCertDB(), nameitem);
++ goto done;
++ }
+
+-done:
+- if (p != NULL) {
+- PORT_Free(p);
+- }
+- if (arena != NULL) {
+- PORT_FreeArena(arena, PR_FALSE);
+- }
+- if (name != NULL) {
+- CERT_DestroyName(name);
+- }
++ if((issuerName != NULL) && (issuerSerial != NULL)) {
++ CERTIssuerAndSN issuerAndSN;
+
+- return(cert);
+-}
++ arena = PORT_NewArena(DER_DEFAULT_CHUNKSIZE);
++ if (arena == NULL) {
++ xmlSecError(XMLSEC_ERRORS_HERE,
++ NULL,
++ "PORT_NewArena",
++ XMLSEC_ERRORS_R_CRYPTO_FAILED,
++ "error code=%d", PORT_GetError());
++ goto done;
++ }
+
+-/**
+- * xmlSecNssX509NameRead:
+- */
+-static xmlSecByte *
+-xmlSecNssX509NameRead(xmlSecByte *str, int len) {
+- xmlSecByte name[256];
+- xmlSecByte value[256];
+- xmlSecByte *retval = NULL;
+- xmlSecByte *p = NULL;
+- int nameLen, valueLen;
+-
+- xmlSecAssert2(str != NULL, NULL);
+-
+- /* return string should be no longer than input string */
+- retval = (xmlSecByte *)PORT_Alloc(len+1);
+- if(retval == NULL) {
+- xmlSecError(XMLSEC_ERRORS_HERE,
+- NULL,
+- "PORT_Alloc",
+- XMLSEC_ERRORS_R_MALLOC_FAILED,
+- XMLSEC_ERRORS_NO_MESSAGE);
+- return(NULL);
+- }
+- p = retval;
+-
+- while(len > 0) {
+- /* skip spaces after comma or semicolon */
+- while((len > 0) && isspace(*str)) {
+- ++str; --len;
+- }
+-
+- nameLen = xmlSecNssX509NameStringRead(&str, &len, name, sizeof(name), '=', 0);
+- if(nameLen < 0) {
+- xmlSecError(XMLSEC_ERRORS_HERE,
+- NULL,
+- "xmlSecNssX509NameStringRead",
+- XMLSEC_ERRORS_R_XMLSEC_FAILED,
+- XMLSEC_ERRORS_NO_MESSAGE);
+- goto done;
+- }
+- memcpy(p, name, nameLen);
+- p+=nameLen;
+- *p++='=';
+- if(len > 0) {
+- ++str; --len;
+- if((*str) == '\"') {
+- valueLen = xmlSecNssX509NameStringRead(&str, &len,
+- value, sizeof(value), '"', 1);
+- if(valueLen < 0) {
+- xmlSecError(XMLSEC_ERRORS_HERE,
++ name = CERT_AsciiToName((char*)issuerName);
++ if (name == NULL) {
++ xmlSecError(XMLSEC_ERRORS_HERE,
+ NULL,
+- "xmlSecNssX509NameStringRead",
++ "CERT_AsciiToName",
+ XMLSEC_ERRORS_R_XMLSEC_FAILED,
+- XMLSEC_ERRORS_NO_MESSAGE);
+- goto done;
+- }
+- /* skip spaces before comma or semicolon */
+- while((len > 0) && isspace(*str)) {
+- ++str; --len;
++ "error code=%d", PORT_GetError());
++ goto done;
+ }
+- if((len > 0) && ((*str) != ',')) {
+- xmlSecError(XMLSEC_ERRORS_HERE,
+- NULL,
+- NULL,
+- XMLSEC_ERRORS_R_INVALID_DATA,
+- "comma is expected");
+- goto done;
+- }
+- if(len > 0) {
+- ++str; --len;
++
++ nameitem = SEC_ASN1EncodeItem(arena, NULL, (void *)name,
++ SEC_ASN1_GET(CERT_NameTemplate));
++ if (nameitem == NULL) {
++ xmlSecError(XMLSEC_ERRORS_HERE,
++ NULL,
++ "SEC_ASN1EncodeItem",
++ XMLSEC_ERRORS_R_XMLSEC_FAILED,
++ "error code=%d", PORT_GetError());
++ goto done;
+ }
+- *p++='\"';
+- memcpy(p, value, valueLen);
+- p+=valueLen;
+- *p++='\"';
+- } else if((*str) == '#') {
+- /* TODO: read octect values */
+- xmlSecError(XMLSEC_ERRORS_HERE,
+- NULL,
+- NULL,
+- XMLSEC_ERRORS_R_INVALID_DATA,
+- "reading octect values is not implemented yet");
+- goto done;
+- } else {
+- valueLen = xmlSecNssX509NameStringRead(&str, &len,
+- value, sizeof(value), ',', 1);
+- if(valueLen < 0) {
+- xmlSecError(XMLSEC_ERRORS_HERE,
++
++ memset(&issuerAndSN, 0, sizeof(issuerAndSN));
++
++ issuerAndSN.derIssuer.data = nameitem->data;
++ issuerAndSN.derIssuer.len = nameitem->len;
++
++ if( xmlSecNssIntegerToItem( issuerSerial, &issuerAndSN.serialNumber ) < 0 ) {
++ xmlSecError(XMLSEC_ERRORS_HERE,
+ NULL,
+- "xmlSecNssX509NameStringRead",
++ "xmlSecNssIntegerToItem",
+ XMLSEC_ERRORS_R_XMLSEC_FAILED,
+- XMLSEC_ERRORS_NO_MESSAGE);
+- goto done;
+- }
+- memcpy(p, value, valueLen);
+- p+=valueLen;
+- if (len > 0)
+- *p++=',';
+- }
+- } else {
+- valueLen = 0;
++ "serial number=%s",
++ xmlSecErrorsSafeString(issuerSerial));
++ goto done;
++ }
++
++ cert = CERT_FindCertByIssuerAndSN(CERT_GetDefaultCertDB(),
++ &issuerAndSN);
++ SECITEM_FreeItem(&issuerAndSN.serialNumber, PR_FALSE);
++ goto done;
++ }
++
++ if(ski != NULL) {
++ SECItem subjKeyID;
++ int len;
++
++ len = xmlSecBase64Decode(ski, (xmlSecByte*)ski, xmlStrlen(ski));
++ if(len < 0) {
++ xmlSecError(XMLSEC_ERRORS_HERE,
++ NULL,
++ "xmlSecBase64Decode",
++ XMLSEC_ERRORS_R_XMLSEC_FAILED,
++ "ski=%s",
++ xmlSecErrorsSafeString(ski));
++ goto done;
++ }
++
++ memset(&subjKeyID, 0, sizeof(subjKeyID));
++ subjKeyID.data = ski;
++ subjKeyID.len = xmlStrlen(ski);
++ cert = CERT_FindCertBySubjectKeyID(CERT_GetDefaultCertDB(),
++ &subjKeyID);
+ }
+- if(len > 0) {
+- ++str; --len;
+- }
+- }
+-
+- *p = 0;
+- return(retval);
+-
++
+ done:
+- PORT_Free(retval);
+- return (NULL);
++ if (arena != NULL) {
++ PORT_FreeArena(arena, PR_FALSE);
++ }
++ if (name != NULL) {
++ CERT_DestroyName(name);
++ }
++
++ return(cert);
+ }
+
++static int
++xmlSecNssIntegerToItem(
++ const xmlChar* integer ,
++ SECItem *item
++) {
++ xmlSecBn bn ;
++ xmlSecSize i, length ;
++ const xmlSecByte* bnInteger ;
+
++ xmlSecAssert2( integer != NULL, -1 ) ;
++ xmlSecAssert2( item != NULL, -1 ) ;
+
+-/**
+- * xmlSecNssX509NameStringRead:
+- */
+-static int
+-xmlSecNssX509NameStringRead(xmlSecByte **str, int *strLen,
+- xmlSecByte *res, int resLen,
+- xmlSecByte delim, int ingoreTrailingSpaces) {
+- xmlSecByte *p, *q, *nonSpace;
+-
+- xmlSecAssert2(str != NULL, -1);
+- xmlSecAssert2(strLen != NULL, -1);
+- xmlSecAssert2(res != NULL, -1);
+-
+- p = (*str);
+- nonSpace = q = res;
+- while(((p - (*str)) < (*strLen)) && ((*p) != delim) && ((q - res) < resLen)) {
+- if((*p) != '\\') {
+- if(ingoreTrailingSpaces && !isspace(*p)) {
+- nonSpace = q;
+- }
+- *(q++) = *(p++);
+- } else {
+- ++p;
+- nonSpace = q;
+- if(xmlSecIsHex((*p))) {
+- if((p - (*str) + 1) >= (*strLen)) {
+- xmlSecError(XMLSEC_ERRORS_HERE,
+- NULL,
+- NULL,
+- XMLSEC_ERRORS_R_INVALID_DATA,
+- "two hex digits expected");
+- return(-1);
+- }
+- *(q++) = xmlSecGetHex(p[0]) * 16 + xmlSecGetHex(p[1]);
+- p += 2;
+- } else {
+- if(((++p) - (*str)) >= (*strLen)) {
+- xmlSecError(XMLSEC_ERRORS_HERE,
+- NULL,
+- NULL,
+- XMLSEC_ERRORS_R_INVALID_DATA,
+- "escaped symbol missed");
+- return(-1);
+- }
+- *(q++) = *(p++);
+- }
+- }
+- }
+- if(((p - (*str)) < (*strLen)) && ((*p) != delim)) {
+- xmlSecError(XMLSEC_ERRORS_HERE,
+- NULL,
+- NULL,
+- XMLSEC_ERRORS_R_INVALID_SIZE,
+- "buffer is too small");
+- return(-1);
+- }
+- (*strLen) -= (p - (*str));
+- (*str) = p;
+- return((ingoreTrailingSpaces) ? nonSpace - res + 1 : q - res);
+-}
++ if( xmlSecBnInitialize( &bn, 0 ) < 0 ) {
++ xmlSecError( XMLSEC_ERRORS_HERE,
++ NULL,
++ "xmlSecBnInitialize",
++ XMLSEC_ERRORS_R_INVALID_DATA,
++ XMLSEC_ERRORS_NO_MESSAGE ) ;
++ return -1 ;
++ }
+
+-/* code lifted from NSS */
+-static void
+-xmlSecNssNumToItem(SECItem *it, unsigned long ui)
+-{
+- unsigned char bb[5];
+- int len;
+-
+- bb[0] = 0;
+- bb[1] = (unsigned char) (ui >> 24);
+- bb[2] = (unsigned char) (ui >> 16);
+- bb[3] = (unsigned char) (ui >> 8);
+- bb[4] = (unsigned char) (ui);
+-
+- /*
+- ** Small integers are encoded in a single byte. Larger integers
+- ** require progressively more space.
+- */
+- if (ui > 0x7f) {
+- if (ui > 0x7fff) {
+- if (ui > 0x7fffffL) {
+- if (ui >= 0x80000000L) {
+- len = 5;
+- } else {
+- len = 4;
+- }
+- } else {
+- len = 3;
+- }
+- } else {
+- len = 2;
+- }
+- } else {
+- len = 1;
+- }
+-
+- it->data = (unsigned char *)PORT_Alloc(len);
+- if (it->data == NULL) {
+- return;
+- }
++ if( xmlSecBnFromDecString( &bn, integer ) < 0 ) {
++ xmlSecError( XMLSEC_ERRORS_HERE,
++ NULL,
++ "xmlSecBnFromDecString",
++ XMLSEC_ERRORS_R_INVALID_DATA,
++ XMLSEC_ERRORS_NO_MESSAGE ) ;
++
++ xmlSecBnFinalize( &bn ) ;
++ return -1 ;
++ }
++
++ length = xmlSecBnGetSize( &bn ) ;
++ if( length <= 0 ) {
++ xmlSecError( XMLSEC_ERRORS_HERE,
++ NULL,
++ "xmlSecBnGetSize",
++ XMLSEC_ERRORS_R_INVALID_DATA,
++ XMLSEC_ERRORS_NO_MESSAGE ) ;
++
++ xmlSecBnFinalize( &bn ) ;
++ return -1 ;
++ }
++
++ bnInteger = xmlSecBnGetData( &bn ) ;
++ if( bnInteger == NULL ) {
++ xmlSecError( XMLSEC_ERRORS_HERE,
++ NULL,
++ "xmlSecBnGetData",
++ XMLSEC_ERRORS_R_INVALID_DATA,
++ XMLSEC_ERRORS_NO_MESSAGE ) ;
+
+- it->len = len;
+- PORT_Memcpy(it->data, bb + (sizeof(bb) - len), len);
++ xmlSecBnFinalize( &bn ) ;
++ return -1 ;
++ }
++
++ item->data = ( unsigned char * )PORT_Alloc( length );
++ if( item->data == NULL ) {
++ xmlSecError( XMLSEC_ERRORS_HERE,
++ NULL,
++ "PORT_Alloc",
++ XMLSEC_ERRORS_R_INVALID_DATA,
++ XMLSEC_ERRORS_NO_MESSAGE ) ;
++
++ xmlSecBnFinalize( &bn ) ;
++ return -1 ;
++ }
++
++ item->len = length;
++
++ for( i = 0 ; i < length ; i ++ )
++ item->data[i] = *( bnInteger + i ) ;
++
++ xmlSecBnFinalize( &bn ) ;
++
++ return 0 ;
+ }
+-#endif /* XMLSEC_NO_X509 */
+
++#endif /* XMLSEC_NO_X509 */
+
+--- misc/xmlsec1-1.2.6/win32/Makefile.msvc 2004-06-09 16:35:12.000000000 +0200
++++ misc/build/xmlsec1-1.2.6/win32/Makefile.msvc 2008-06-29 23:44:19.000000000 +0200
+@@ -223,6 +223,10 @@
+ $(XMLSEC_OPENSSL_INTDIR_A)\x509vfy.obj
+
+ XMLSEC_NSS_OBJS = \
++ $(XMLSEC_NSS_INTDIR)\akmngr.obj\
++ $(XMLSEC_NSS_INTDIR)\keytrans.obj\
++ $(XMLSEC_NSS_INTDIR)\keywrapers.obj\
++ $(XMLSEC_NSS_INTDIR)\tokens.obj\
+ $(XMLSEC_NSS_INTDIR)\app.obj\
+ $(XMLSEC_NSS_INTDIR)\bignum.obj\
+ $(XMLSEC_NSS_INTDIR)\ciphers.obj \
+@@ -235,9 +239,6 @@
+ $(XMLSEC_NSS_INTDIR)\x509.obj\
+ $(XMLSEC_NSS_INTDIR)\x509vfy.obj\
+ $(XMLSEC_NSS_INTDIR)\keysstore.obj\
+- $(XMLSEC_NSS_INTDIR)\kt_rsa.obj\
+- $(XMLSEC_NSS_INTDIR)\kw_des.obj\
+- $(XMLSEC_NSS_INTDIR)\kw_aes.obj\
+ $(XMLSEC_NSS_INTDIR)\strings.obj
+ XMLSEC_NSS_OBJS_A = \
+ $(XMLSEC_NSS_INTDIR_A)\app.obj\
+@@ -258,6 +259,7 @@
+ $(XMLSEC_NSS_INTDIR_A)\strings.obj
+
+ XMLSEC_MSCRYPTO_OBJS = \
++ $(XMLSEC_MSCRYPTO_INTDIR)\akmngr.obj\
+ $(XMLSEC_MSCRYPTO_INTDIR)\app.obj\
+ $(XMLSEC_MSCRYPTO_INTDIR)\crypto.obj \
+ $(XMLSEC_MSCRYPTO_INTDIR)\ciphers.obj \
+@@ -376,7 +378,7 @@
+ XMLSEC_OPENSSL_SOLIBS = libeay32.lib wsock32.lib kernel32.lib user32.lib gdi32.lib
+ XMLSEC_OPENSSL_ALIBS = libeay32.lib wsock32.lib kernel32.lib user32.lib gdi32.lib
+
+-XMLSEC_NSS_SOLIBS = smime3.lib ssl3.lib nss3.lib libnspr4.lib libplds4.lib libplc4.lib kernel32.lib user32.lib gdi32.lib
++XMLSEC_NSS_SOLIBS = smime3.lib nss3.lib nspr4.lib kernel32.lib user32.lib gdi32.lib
+ XMLSEC_NSS_ALIBS = smime3.lib ssl3.lib nss3.lib libnspr4_s.lib libplds4_s.lib libplc4_s.lib kernel32.lib user32.lib gdi32.lib
+
+ XMLSEC_MSCRYPTO_SOLIBS = kernel32.lib user32.lib gdi32.lib Crypt32.lib Advapi32.lib