XML Security v1.4.3 Released
---------------------
  We are proud to announce the 1.4.3 final
  release of the XML Security package.

About XML Security
------------------
  The XML Security project is an implementation of
  security related XML standards. Currently, it includes
  implementations of W3C recommendations "Canonical XML",
  "Canonical XML 1.1", "XML Signature Syntax and Processing",
  and "XML Encryption Syntax and Processing".

  Basically, this means that you can use this software
  for creating and verifying digital signatures which
  are expressed in XML and sign both XML and/or arbitrary
  contents. You can use the standard JSR 105 (Java XML
  Digital Signature) API or the non-standard Apache XMLSec API.

  You can also use the library to encrypt and decrypt
  portions of XML documents. Only the non-standard Apache
  XMLSec API is supported, as the JSR 106 (Java XML Digital Encryption) 
  API is still in development.

For more information about the XML Security project, please go to
http://santuario.apache.org/

For more information about XML Signature, go to
http://www.w3.org/Signature/

For more information about XML Encryption, go to
http://www.w3.org/Encryption/

---------------------------------------------------------

Downloads for XML Security v1.4.3 are available at
http://santuario.apache.org/dist/java-library/

The source distibution is available at
http://santuario.apache.org/dist/java-library/xml-security-src-1_4_3.zip
http://santuario.apache.org/dist/java-library/xml-security-src-1_4_3.zip.asc

The binary distibution is available at
http://santuario.apache.org/dist/java-library/xml-security-bin-1_4_3.zip
http://santuario.apache.org/dist/java-library/xml-security-bin-1_4_3.zip.asc

---------------------------------------------------------

The source distibution includes
 - JAVA source code for the library itself
 - JAVA unit test code for the library
 - JAVA sample code for the library
 - test vectors for the unit tests

The source distibution does _not_ include
 - JavaDocs
 - the required (binary JAR) libraries.
   It requires
   - JDK 1.4.2 or above
   - ANT (1.6 or above) as build/make tool (http://ant.apache.org)
   - Apache commons logging (v1.0.4 or above recommended):
     http://commons.apache.org
   - Apache Xerces (v2.7.1 or above receommended): http://xerces.apache.org
   - Apache Xalan (v2.7 or above recommended): http://xalan.apache.org
   - JUnit 3.7 or above

Copy the required jars into the "libs" directory.
If necessary, modify the ant properties in build.xml to the locations of 
the jar files.
Set JAVA_HOME to the JDK root directory.
To build the binaries and run all of the tests, run "ant test".

---------------------------------------------------------

The binary distibution includes
 - JAVA sample code for the library
 - JAVA code for the unit tests
 - test vectors for the unit tests
 - Generated JavaDocs
 - The complete library compiled
 - All required libaries 

---------------------------------------------------------

Questions and comments about the software:
mailto:security-dev@xml.apache.org

---------------------------------------------------------
