You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@turbine.apache.org by gk...@apache.org on 2021/09/08 08:27:23 UTC

[turbine-fulcrum-yaafi-crypto] tag fulcrum-yaafi-crypto-1.0.7 created (now da5a3be)

This is an automated email from the ASF dual-hosted git repository.

gk pushed a change to tag fulcrum-yaafi-crypto-1.0.7
in repository https://gitbox.apache.org/repos/asf/turbine-fulcrum-yaafi-crypto.git.


      at da5a3be  (commit)
This tag includes the following new commits:

     new a8a2fae  [maven-release-plugin] copy for tag fulcrum-yaafi-crypto-1.0.7
     new 6a8a607  [maven-release-plugin] copy for tag fulcrum-yaafi-crypto-1.0.7
     new 38cf1d1  Tag 1.0.7 release
     new 39cd490  [maven-release-plugin] copy for tag fulcrum-yaafi-crypto-1.0.7
     new 645030c  Tag 1.0.7 release
     new b3fa186  [maven-release-plugin] copy for tag fulcrum-yaafi-crypto-1.0.7
     new d4f107c  Not sure why the code got duplicated within the tagged version, but I am deleting it.  Hopefully this won't impact our vote
     new e7c6c27  Update notice in the tag version
     new 864ea59  Update tagged fulcrum component poms for publishing to website
     new 586496b  Removing spaces from dev connect links introduced by script to update all poms
     new da5a3be  Duplicated properties tag

The 11 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


[turbine-fulcrum-yaafi-crypto] 03/11: Tag 1.0.7 release

Posted by gk...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

gk pushed a commit to tag fulcrum-yaafi-crypto-1.0.7
in repository https://gitbox.apache.org/repos/asf/turbine-fulcrum-yaafi-crypto.git

commit 38cf1d16e280f6d28921b2daebf1aacd19598402
Merge: 6a8a607 c003b52
Author: Jeffery Painter <pa...@apache.org>
AuthorDate: Thu Nov 8 14:17:00 2018 +0000

    Tag 1.0.7 release
    
    git-svn-id: https://svn.apache.org/repos/asf/turbine/fulcrum/tags/fulcrum-yaafi-crypto-1.0.7@1846152 13f79535-47bb-0310-9956-ffa450edef68

 pom.xml                                            |  30 +-
 .../apache/fulcrum/jce/crypto/HexConverter.java    | 138 +---
 xdocs/changes.xml                                  |   8 +-
 yaafi-crypto/LICENSE.txt                           | 202 ------
 yaafi-crypto/NOTICE.txt                            |   6 -
 yaafi-crypto/pom.xml                               |  73 ---
 .../fulcrum/jce/crypto/CryptoParameters.java       |  42 --
 .../fulcrum/jce/crypto/CryptoStreamFactory.java    | 136 ----
 .../jce/crypto/CryptoStreamFactoryImpl.java        | 326 ----------
 .../org/apache/fulcrum/jce/crypto/CryptoUtil.java  | 225 -------
 .../apache/fulcrum/jce/crypto/HexConverter.java    |  72 ---
 .../apache/fulcrum/jce/crypto/PasswordFactory.java | 181 ------
 .../fulcrum/jce/crypto/PasswordParameters.java     |  46 --
 .../jce/crypto/SmartDecryptingInputStream.java     | 381 -----------
 .../org/apache/fulcrum/jce/crypto/StreamUtil.java  | 186 ------
 .../resources/announcements/announcement-1.0.6.txt |   1 -
 yaafi-crypto/src/site/site.xml                     |  31 -
 yaafi-crypto/src/test/data/empty.txt               |   0
 yaafi-crypto/src/test/data/plain-iso-8859-1.xml    |  56 --
 yaafi-crypto/src/test/data/plain-utf16.xml         | Bin 4372 -> 0 bytes
 yaafi-crypto/src/test/data/plain-utf8.xml          |  56 --
 yaafi-crypto/src/test/data/plain.groovy            |  44 --
 yaafi-crypto/src/test/data/plain.pdf               | 716 ---------------------
 yaafi-crypto/src/test/data/plain.txt               | 254 --------
 yaafi-crypto/src/test/data/plain.xml               |  56 --
 yaafi-crypto/src/test/data/plain.zip               | Bin 38862 -> 0 bytes
 .../apache/fulcrum/jce/crypto/CryptoUtilTest.java  | 302 ---------
 .../test/org/apache/fulcrum/jce/crypto/Main.java   | 181 ------
 .../org/apache/fulcrum/jce/crypto/MainTest.java    |  81 ---
 .../jce/crypto/SmartDecryptingInputStreamTest.java | 231 -------
 yaafi-crypto/xdocs/changes.xml                     |  51 --
 yaafi-crypto/xdocs/downloads.xml                   |  43 --
 yaafi-crypto/xdocs/index.xml                       | 123 ----
 33 files changed, 28 insertions(+), 4250 deletions(-)

[turbine-fulcrum-yaafi-crypto] 01/11: [maven-release-plugin] copy for tag fulcrum-yaafi-crypto-1.0.7

Posted by gk...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

gk pushed a commit to tag fulcrum-yaafi-crypto-1.0.7
in repository https://gitbox.apache.org/repos/asf/turbine-fulcrum-yaafi-crypto.git

commit a8a2faeb4763c46ab18cb8a97a021e529811e757
Author: Jeffery Painter <pa...@apache.org>
AuthorDate: Tue Nov 6 19:01:26 2018 +0000

    [maven-release-plugin] copy for tag fulcrum-yaafi-crypto-1.0.7
    
    git-svn-id: https://svn.apache.org/repos/asf/turbine/fulcrum/tags/fulcrum-yaafi-crypto-1.0.7@1845957 13f79535-47bb-0310-9956-ffa450edef68

[turbine-fulcrum-yaafi-crypto] 08/11: Update notice in the tag version

Posted by gk...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

gk pushed a commit to tag fulcrum-yaafi-crypto-1.0.7
in repository https://gitbox.apache.org/repos/asf/turbine-fulcrum-yaafi-crypto.git

commit e7c6c271f1a483504e6ccb3d9f2810cb7da2d5c7
Author: Jeffery Painter <pa...@apache.org>
AuthorDate: Wed Nov 28 19:31:46 2018 +0000

    Update notice in the tag version
    
    git-svn-id: https://svn.apache.org/repos/asf/turbine/fulcrum/tags/fulcrum-yaafi-crypto-1.0.7@1847672 13f79535-47bb-0310-9956-ffa450edef68
---
 NOTICE.txt | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/NOTICE.txt b/NOTICE.txt
index 0a2d75a..ef3d1c2 100644
--- a/NOTICE.txt
+++ b/NOTICE.txt
@@ -1,4 +1,4 @@
-Turbine Fulcrum ServiceManager
+Turbine Fulcrum YAAFI-Cypto Component
 Copyright 2002-2007 The Apache Software Foundation.
 
 This product includes software developed at

[turbine-fulcrum-yaafi-crypto] 11/11: Duplicated properties tag

Posted by gk...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

gk pushed a commit to tag fulcrum-yaafi-crypto-1.0.7
in repository https://gitbox.apache.org/repos/asf/turbine-fulcrum-yaafi-crypto.git

commit da5a3bea4c3cecd06732ed32fa0fb724b49f9434
Author: Jeffery Painter <pa...@apache.org>
AuthorDate: Tue May 21 03:57:22 2019 +0000

    Duplicated properties tag
    
    git-svn-id: https://svn.apache.org/repos/asf/turbine/fulcrum/tags/fulcrum-yaafi-crypto-1.0.7@1859604 13f79535-47bb-0310-9956-ffa450edef68
---
 pom.xml | 4 ----
 1 file changed, 4 deletions(-)

diff --git a/pom.xml b/pom.xml
index 1b50b05..279265f 100644
--- a/pom.xml
+++ b/pom.xml
@@ -80,9 +80,5 @@
     <turbine.site.cache>${project.build.directory}/turbine-sites</turbine.site.cache>
     <siteContent.path>${project.build.directory}/staging</siteContent.path><!-- default stagingSiteURL -->
   </properties>  
-  
-  <properties>
-    <turbine.site.path>fulcrum/fulcrum-yaafi-crypto</turbine.site.path>
-  </properties>  
 	
 </project>

[turbine-fulcrum-yaafi-crypto] 06/11: [maven-release-plugin] copy for tag fulcrum-yaafi-crypto-1.0.7

Posted by gk...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

gk pushed a commit to tag fulcrum-yaafi-crypto-1.0.7
in repository https://gitbox.apache.org/repos/asf/turbine-fulcrum-yaafi-crypto.git

commit b3fa18652742041eb132f1c4c6e2a03e1b6869f6
Author: Jeffery Painter <pa...@apache.org>
AuthorDate: Thu Nov 8 20:16:54 2018 +0000

    [maven-release-plugin] copy for tag fulcrum-yaafi-crypto-1.0.7
    
    git-svn-id: https://svn.apache.org/repos/asf/turbine/fulcrum/tags/fulcrum-yaafi-crypto-1.0.7@1846192 13f79535-47bb-0310-9956-ffa450edef68
---
 fulcrum-yaafi-crypto-1.0.7/LICENSE.txt             | 202 ++++++
 fulcrum-yaafi-crypto-1.0.7/NOTICE.txt              |   6 +
 fulcrum-yaafi-crypto-1.0.7/pom.xml                 |  73 +++
 .../fulcrum/jce/crypto/CryptoParameters.java       |  42 ++
 .../fulcrum/jce/crypto/CryptoStreamFactory.java    | 136 ++++
 .../jce/crypto/CryptoStreamFactoryImpl.java        | 326 ++++++++++
 .../org/apache/fulcrum/jce/crypto/CryptoUtil.java  | 225 +++++++
 .../apache/fulcrum/jce/crypto/HexConverter.java    |  72 +++
 .../apache/fulcrum/jce/crypto/PasswordFactory.java | 181 ++++++
 .../fulcrum/jce/crypto/PasswordParameters.java     |  46 ++
 .../jce/crypto/SmartDecryptingInputStream.java     | 381 +++++++++++
 .../org/apache/fulcrum/jce/crypto/StreamUtil.java  | 186 ++++++
 .../resources/announcements/announcement-1.0.6.txt |   1 +
 fulcrum-yaafi-crypto-1.0.7/src/site/site.xml       |  31 +
 fulcrum-yaafi-crypto-1.0.7/src/test/data/empty.txt |   0
 .../src/test/data/plain-iso-8859-1.xml             |  56 ++
 .../src/test/data/plain-utf16.xml                  | Bin 0 -> 4372 bytes
 .../src/test/data/plain-utf8.xml                   |  56 ++
 .../src/test/data/plain.groovy                     |  44 ++
 fulcrum-yaafi-crypto-1.0.7/src/test/data/plain.pdf | 716 +++++++++++++++++++++
 fulcrum-yaafi-crypto-1.0.7/src/test/data/plain.txt | 254 ++++++++
 fulcrum-yaafi-crypto-1.0.7/src/test/data/plain.xml |  56 ++
 fulcrum-yaafi-crypto-1.0.7/src/test/data/plain.zip | Bin 0 -> 38862 bytes
 .../apache/fulcrum/jce/crypto/CryptoUtilTest.java  | 302 +++++++++
 .../test/org/apache/fulcrum/jce/crypto/Main.java   | 181 ++++++
 .../org/apache/fulcrum/jce/crypto/MainTest.java    |  81 +++
 .../jce/crypto/SmartDecryptingInputStreamTest.java | 231 +++++++
 fulcrum-yaafi-crypto-1.0.7/xdocs/changes.xml       |  51 ++
 fulcrum-yaafi-crypto-1.0.7/xdocs/downloads.xml     |  43 ++
 fulcrum-yaafi-crypto-1.0.7/xdocs/index.xml         | 123 ++++
 30 files changed, 4102 insertions(+)

diff --git a/fulcrum-yaafi-crypto-1.0.7/LICENSE.txt b/fulcrum-yaafi-crypto-1.0.7/LICENSE.txt
new file mode 100644
index 0000000..d645695
--- /dev/null
+++ b/fulcrum-yaafi-crypto-1.0.7/LICENSE.txt
@@ -0,0 +1,202 @@
+
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "[]"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright [yyyy] [name of copyright owner]
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
diff --git a/fulcrum-yaafi-crypto-1.0.7/NOTICE.txt b/fulcrum-yaafi-crypto-1.0.7/NOTICE.txt
new file mode 100644
index 0000000..0a2d75a
--- /dev/null
+++ b/fulcrum-yaafi-crypto-1.0.7/NOTICE.txt
@@ -0,0 +1,6 @@
+Turbine Fulcrum ServiceManager
+Copyright 2002-2007 The Apache Software Foundation.
+
+This product includes software developed at
+The Apache Software Foundation (http://www.apache.org/).
+
diff --git a/fulcrum-yaafi-crypto-1.0.7/pom.xml b/fulcrum-yaafi-crypto-1.0.7/pom.xml
new file mode 100644
index 0000000..f3a50ae
--- /dev/null
+++ b/fulcrum-yaafi-crypto-1.0.7/pom.xml
@@ -0,0 +1,73 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+   Licensed to the Apache Software Foundation (ASF) under one or more
+   contributor license agreements.  See the NOTICE file distributed with
+   this work for additional information regarding copyright ownership.
+   The ASF licenses this file to You under the Apache License, Version 2.0
+   (the "License"); you may not use this file except in compliance with
+   the License.  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+  <parent>
+    <artifactId>turbine-parent</artifactId>
+       <groupId>org.apache.turbine</groupId>
+       <version>5</version>
+  </parent>
+
+  <modelVersion>4.0.0</modelVersion>
+  <artifactId>fulcrum-yaafi-crypto</artifactId>
+  <groupId>org.apache.fulcrum</groupId>
+  <version>1.0.7</version>
+  <name>Fulcrum YAAFI Crypto</name>
+  <inceptionYear>2008</inceptionYear>
+  <description>Fulcrum YAAFI Crypto Library</description>
+  <url>http://turbine.apache.org/fulcrum/fulcrum-yaafi-crytpo</url>
+		
+  <scm>
+    <connection>scm:svn:http://svn.apache.org/repos/asf/turbine/fulcrum/tags/fulcrum-yaafi-crypto-1.0.7</connection>
+    <developerConnection>scm:svn:https://svn.apache.org/repos/asf/turbine/fulcrum/tags/fulcrum-yaafi-crypto-1.0.7</developerConnection>
+    <url>http://svn.apache.org/viewvc/turbine/fulcrum/tags/fulcrum-yaafi-crypto-1.0.7</url>
+  </scm>
+	
+  <developers>
+    <developer>
+      <name>Siegfried Goeschl</name>
+      <id>sgoeschl</id>
+      <email>sgoeschl@apache.org</email>
+      <organization />
+      <roles>
+        <role>Java Developer</role>
+      </roles>
+    </developer>
+  </developers>
+
+  <dependencies>
+    <!-- testing dependencies -->
+    <dependency>
+      <groupId>junit</groupId>
+      <artifactId>junit</artifactId>
+      <version>4.12</version>
+      <scope>test</scope>
+    </dependency>
+  </dependencies>
+
+  <build>
+    <sourceDirectory>${basedir}/src/java</sourceDirectory>
+    <testSourceDirectory>${basedir}/src/test</testSourceDirectory>
+  </build>
+  
+  <properties>
+    <turbine.site.path>fulcrum/fulcrum-yaafi-crypto</turbine.site.path>
+  </properties>  
+	
+</project>
diff --git a/fulcrum-yaafi-crypto-1.0.7/src/java/org/apache/fulcrum/jce/crypto/CryptoParameters.java b/fulcrum-yaafi-crypto-1.0.7/src/java/org/apache/fulcrum/jce/crypto/CryptoParameters.java
new file mode 100644
index 0000000..9ee3eb3
--- /dev/null
+++ b/fulcrum-yaafi-crypto-1.0.7/src/java/org/apache/fulcrum/jce/crypto/CryptoParameters.java
@@ -0,0 +1,42 @@
+package org.apache.fulcrum.jce.crypto;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+
+/**
+ * CryptoParameters used for encryption/decrytpion.
+ *
+ * @author <a href="mailto:siegfried.goeschl@it20one.at">Siegfried Goeschl</a>
+ */
+
+public interface CryptoParameters
+{
+    /** Parameter for PBEParameterSpec */
+    int COUNT = 20;
+
+    /** The password salt */
+    byte[] SALT = {
+        (byte)0xc7, (byte)0x73, (byte)0x21, (byte)0x8c,
+        (byte)0x7e, (byte)0xc8, (byte)0xee, (byte)0x99
+        };
+
+    /** The crypto algorithm being used */
+    String ALGORITHM = "PBEWithMD5AndDES";
+}
diff --git a/fulcrum-yaafi-crypto-1.0.7/src/java/org/apache/fulcrum/jce/crypto/CryptoStreamFactory.java b/fulcrum-yaafi-crypto-1.0.7/src/java/org/apache/fulcrum/jce/crypto/CryptoStreamFactory.java
new file mode 100644
index 0000000..34e55a3
--- /dev/null
+++ b/fulcrum-yaafi-crypto-1.0.7/src/java/org/apache/fulcrum/jce/crypto/CryptoStreamFactory.java
@@ -0,0 +1,136 @@
+package org.apache.fulcrum.jce.crypto;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.security.GeneralSecurityException;
+
+/**
+ * Interface for creating encrypting/decrypting streams. 
+ *
+ * @author <a href="mailto:siegfried.goeschl@it20one.at">Siegfried Goeschl </a>
+ */
+
+public interface CryptoStreamFactory
+{
+    /**
+     * Creates input stream based on the decryption mode
+     * using the default password.
+     *
+     * @param is the input stream to be wrapped
+     * @param decryptionMode the decryption mode (true|false|auto)
+     * @return an decrypting input stream
+     * @throws GeneralSecurityException creating the input stream failed
+     * @throws IOException creating the input stream failed
+     */
+    InputStream getInputStream(InputStream is, String decryptionMode)
+        throws GeneralSecurityException, IOException;
+
+    /**
+     * Creates input stream based on the decryption mode
+     * using the given password.
+     *
+     * @param is the input stream to be wrapped
+     * @param decryptionMode the decryption mode (true|false|auto)
+     * @param password the password to be used
+     * @return an decrypting input stream
+     * @throws GeneralSecurityException creating the input stream failed
+     * @throws IOException creating the input stream failed
+     */
+    InputStream getInputStream(InputStream is, String decryptionMode, char[] password)
+        throws GeneralSecurityException, IOException;
+
+    /**
+     * Creates a decrypting input stream using the default password.
+     *
+     * @param is the input stream to be wrapped
+     * @return an decrypting input stream
+     * @throws GeneralSecurityException creating the input stream failed
+     * @throws IOException creating the input stream failed
+     */
+    InputStream getInputStream(InputStream is)
+        throws GeneralSecurityException, IOException;
+
+    /**
+     * Creates an decrypting input stream using a given password.
+     *
+     * @param is the input stream to be wrapped
+     * @param password the password to be used
+     * @return an decrypting input stream
+     * @throws GeneralSecurityException creating the input stream failed
+     * @throws IOException creating the input stream failed
+     */
+    InputStream getInputStream(InputStream is, char[] password)
+        throws GeneralSecurityException, IOException;
+
+    /**
+     * Creates a smart decrypting input stream using the default
+     * password. The implementation looks at the binary content
+     * to decide if it was encrypted or not thereby providing
+     * transparent access to encrypted/unencrypted files.
+     *
+     * @param is the input stream to be wrapped
+     * @return an decrypting input stream
+     * @throws GeneralSecurityException creating the input stream failed
+     * @throws IOException creating the input stream failed
+     */
+    InputStream getSmartInputStream(InputStream is)
+        throws GeneralSecurityException, IOException;
+
+    /**
+     * Creates a smart decrypting input stream using a given
+     * password. The implementation looks at the binary content
+     * to decide if it was encrypted or not thereby providing
+     * transparent access to encrypted/unencrypted files.
+     *
+     * @param is the input stream to be wrapped
+     * @param password the password to be used
+     * @return an decrypting input stream
+     * @throws GeneralSecurityException creating the input stream failed
+     * @throws IOException creating the input stream failed
+     */
+    InputStream getSmartInputStream(InputStream is, char[] password)
+        throws GeneralSecurityException, IOException;
+
+    /**
+     * Creates an encrypting output stream using the default password.
+     *
+     * @param os the output stream to be wrapped
+     * @return an decrypting input stream
+     * @throws GeneralSecurityException creating the ouptut stream failed
+     * @throws IOException creating the ouptut stream failed
+     */
+    OutputStream getOutputStream(OutputStream os)
+        throws GeneralSecurityException, IOException;
+
+    /**
+     * Creates an encrypting output stream using the given password.
+     *
+     * @param os the output stream to be wrapped
+     * @param password the password to be used
+     * @return an decrypting input stream
+     * @throws GeneralSecurityException creating the ouptut stream failed
+     * @throws IOException creating the ouptut stream failed
+     */
+    OutputStream getOutputStream(OutputStream os, char[] password)
+        throws GeneralSecurityException, IOException;
+}
diff --git a/fulcrum-yaafi-crypto-1.0.7/src/java/org/apache/fulcrum/jce/crypto/CryptoStreamFactoryImpl.java b/fulcrum-yaafi-crypto-1.0.7/src/java/org/apache/fulcrum/jce/crypto/CryptoStreamFactoryImpl.java
new file mode 100644
index 0000000..2449cf4
--- /dev/null
+++ b/fulcrum-yaafi-crypto-1.0.7/src/java/org/apache/fulcrum/jce/crypto/CryptoStreamFactoryImpl.java
@@ -0,0 +1,326 @@
+package org.apache.fulcrum.jce.crypto;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.security.GeneralSecurityException;
+import java.security.Key;
+
+import javax.crypto.Cipher;
+import javax.crypto.CipherInputStream;
+import javax.crypto.CipherOutputStream;
+import javax.crypto.SecretKeyFactory;
+import javax.crypto.spec.PBEKeySpec;
+import javax.crypto.spec.PBEParameterSpec;
+
+/**
+ * Concrete factory for creating encrypting/decrypting streams. The
+ * implementation uses the JCA (Java Crypto Extension) supplied
+ * by SUN (using SunJCE 1.42).
+ *
+ * The implementation uses as PBEWithMD5AndDES for encryption which
+ * should be sufficent for most applications.
+ *
+ * The implementation also supplies a default password in the case that
+ * the programmer don't want to have additional hassles. It is easy to
+ * reengineer the password being used but much better than a hard-coded
+ * password in the application.
+ *
+ * The code uses parts from Markus Hahn's Blowfish library found at
+ * http://blowfishj.sourceforge.net/
+ *
+ * @author <a href="mailto:siegfried.goeschl@it20one.at">Siegfried Goeschl </a>
+ * @author <a href="mailto:maakus@earthlink.net">Markus Hahn</a>
+ */
+
+public final class CryptoStreamFactoryImpl implements CryptoStreamFactory
+{
+    /** the salt for the PBE algorithm */
+    private byte[] salt;
+
+    /** the count paramter for the PBE algorithm */
+    private int count;
+
+    /** the name of the JCE provider */
+    private String providerName;
+
+    /** the algorithm to use */
+    private String algorithm;
+
+    /** the default instance */
+    private static CryptoStreamFactory instance;
+
+    /**
+     * The JCE provider name known to work. If the value
+     * is set to null an appropriate provider will be
+     * used.
+     */
+    private static final String PROVIDERNAME = null;
+
+    /**
+     * Factory method to get a default instance
+     * @return an instance of the CryptoStreamFactory
+     */
+    public synchronized static CryptoStreamFactory getInstance()
+    {
+        if( CryptoStreamFactoryImpl.instance == null )
+        {
+            CryptoStreamFactoryImpl.instance = new CryptoStreamFactoryImpl();
+        }
+
+        return CryptoStreamFactoryImpl.instance;
+    }
+
+    /**
+     * Set the default instance from an external application.
+     * @param instance the new default instance
+     */
+    public static void setInstance( CryptoStreamFactory instance )
+    {
+        CryptoStreamFactoryImpl.instance = instance;
+    }
+
+    /**
+     * Constructor
+     */
+    public CryptoStreamFactoryImpl()
+    {
+        this.salt = CryptoParameters.SALT;
+        this.count = CryptoParameters.COUNT;
+        this.providerName = PROVIDERNAME;
+        this.algorithm = CryptoParameters.ALGORITHM;
+    }
+
+    /**
+     * Constructor
+     *
+     * @param salt the salt for the PBE algorithm
+     * @param count the iteration for PBEParameterSpec
+     */
+    public CryptoStreamFactoryImpl( byte[] salt, int count)
+    {
+        this.salt = salt;
+        this.count = count;
+        this.providerName = PROVIDERNAME;
+        this.algorithm = CryptoParameters.ALGORITHM;
+    }
+
+
+    /**
+     * @see org.apache.fulcrum.jce.crypto.CryptoStreamFactory#getInputStream(java.io.InputStream, String)
+     */
+    public InputStream getInputStream(InputStream is, String decryptionMode) throws GeneralSecurityException, IOException {
+
+        InputStream result = null;
+
+        if( "auto".equalsIgnoreCase(decryptionMode) )
+        {
+            result = CryptoStreamFactoryImpl.getInstance().getSmartInputStream(is);
+        }
+        else if( "true".equalsIgnoreCase(decryptionMode) )
+        {
+            result = CryptoStreamFactoryImpl.getInstance().getInputStream(is);
+        }
+        else
+        {
+            result = is;
+        }
+        return result;
+    }
+
+    /**
+     * @see org.apache.fulcrum.jce.crypto.CryptoStreamFactory#getInputStream(java.io.InputStream, String, char[])
+     */
+    public InputStream getInputStream(InputStream is, String decryptionMode, char[] password) throws GeneralSecurityException, IOException {
+
+        InputStream result = null;
+
+        if( "auto".equalsIgnoreCase(decryptionMode) )
+        {
+            result = CryptoStreamFactoryImpl.getInstance().getSmartInputStream(is, password);
+        }
+        else if( "true".equalsIgnoreCase(decryptionMode) )
+        {
+            result = CryptoStreamFactoryImpl.getInstance().getInputStream(is, password);
+        }
+        else
+        {
+            result = is;
+        }
+        return result;
+    }
+
+    /**
+     * @see org.apache.fulcrum.jce.crypto.CryptoStreamFactory#getInputStream(java.io.InputStream)
+     */
+    public InputStream getInputStream( InputStream is )
+        throws GeneralSecurityException, IOException
+    {
+        Cipher cipher = this.createCipher( Cipher.DECRYPT_MODE, PasswordFactory.create() );
+        return new CipherInputStream( is, cipher );
+    }
+
+    /**
+     * @see org.apache.fulcrum.jce.crypto.CryptoStreamFactory#getInputStream(java.io.InputStream,char[])
+     */
+    public InputStream getInputStream( InputStream is, char[] password )
+        throws GeneralSecurityException, IOException
+    {
+        Cipher cipher = this.createCipher( Cipher.DECRYPT_MODE, password );
+        return new CipherInputStream( is, cipher );
+    }
+
+    /**
+     * @see org.apache.fulcrum.jce.crypto.CryptoStreamFactory#getSmartInputStream(java.io.InputStream)
+     */
+    public InputStream getSmartInputStream(InputStream is)
+        throws GeneralSecurityException, IOException
+    {
+        return this.getSmartInputStream(
+            is,
+            PasswordFactory.create()
+            );
+    }
+
+    /**
+     * @see org.apache.fulcrum.jce.crypto.CryptoStreamFactory#getSmartInputStream(java.io.InputStream,char[])
+     */
+    public InputStream getSmartInputStream(InputStream is, char[] password )
+        throws GeneralSecurityException, IOException
+    {
+        SmartDecryptingInputStream result;
+
+        result = new SmartDecryptingInputStream(
+            getInstance(),
+            is,
+            password
+            );
+
+        return result;
+    }
+
+    /**
+     * @see org.apache.fulcrum.jce.crypto.CryptoStreamFactory#getOutputStream(java.io.OutputStream)
+     */
+    public OutputStream getOutputStream( OutputStream os )
+        throws GeneralSecurityException, IOException
+    {
+        Cipher cipher = this.createCipher( Cipher.ENCRYPT_MODE, PasswordFactory.create() );
+        return new CipherOutputStream( os, cipher );    }
+
+    /**
+     * @see org.apache.fulcrum.jce.crypto.CryptoStreamFactory#getOutputStream(java.io.OutputStream, char[])
+     */
+    public OutputStream getOutputStream( OutputStream os, char[] password )
+        throws GeneralSecurityException, IOException
+    {
+        Cipher cipher = this.createCipher( Cipher.ENCRYPT_MODE, password );
+        return new CipherOutputStream( os, cipher );
+    }
+
+    /**
+     * @return Returns the algorithm.
+     */
+    private String getAlgorithm()
+    {
+        return algorithm;
+    }
+
+    /**
+     * @return Returns the count.
+     */
+    private int getCount()
+    {
+        return count;
+    }
+
+    /**
+     * @return Returns the providerName.
+     */
+    private String getProviderName()
+    {
+        return providerName;
+    }
+
+    /**
+     * @return Returns the salt.
+     */
+    private byte [] getSalt()
+    {
+        return salt;
+    }
+
+    /**
+     * Create a PBE key.
+     *
+     * @param password the password to use.
+     * @return the key
+     * @throws GeneralSecurityException creating the key failed
+     */
+    private Key createKey( char[] password )
+        throws GeneralSecurityException
+    {
+        SecretKeyFactory keyFactory;
+        String algorithm = this.getAlgorithm();
+        PBEKeySpec keySpec =  new PBEKeySpec(password);
+
+        if( this.getProviderName() == null )
+        {
+            keyFactory = SecretKeyFactory.getInstance( algorithm );
+        }
+        else
+        {
+            keyFactory = SecretKeyFactory.getInstance( algorithm, this.getProviderName() );
+        }
+
+        return keyFactory.generateSecret(keySpec);
+    }
+
+    /**
+     * Create a Cipher.
+     *
+     * @param mode the cipher mode
+     * @param password the password
+     * @return an instance of a cipher
+     * @throws GeneralSecurityException creating a cipher failed
+     * @throws IOException creating a cipher failed
+     */
+    private Cipher createCipher( int mode, char[] password )
+        throws GeneralSecurityException, IOException
+    {
+        Cipher cipher;
+        PBEParameterSpec paramSpec = new PBEParameterSpec( this.getSalt(), this.getCount() );
+        Key key = this.createKey( password );
+
+        if( this.getProviderName() == null )
+        {
+            cipher = Cipher.getInstance( this.getAlgorithm() );
+        }
+        else
+        {
+            cipher = Cipher.getInstance( this.getAlgorithm(), this.getProviderName() );
+        }
+
+        cipher.init( mode, key, paramSpec );
+        return cipher;
+    }
+}
diff --git a/fulcrum-yaafi-crypto-1.0.7/src/java/org/apache/fulcrum/jce/crypto/CryptoUtil.java b/fulcrum-yaafi-crypto-1.0.7/src/java/org/apache/fulcrum/jce/crypto/CryptoUtil.java
new file mode 100644
index 0000000..153d905
--- /dev/null
+++ b/fulcrum-yaafi-crypto-1.0.7/src/java/org/apache/fulcrum/jce/crypto/CryptoUtil.java
@@ -0,0 +1,225 @@
+package org.apache.fulcrum.jce.crypto;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.security.GeneralSecurityException;
+
+/**
+ * Helper class to provde generic functions to work with CryptoStreams.
+ *
+ * The code uses parts from Markus Hahn's Blowfish library found at
+ * http://blowfishj.sourceforge.net/
+ *
+ * @author <a href="mailto:siegfried.goeschl@it20one.at">Siegfried Goeschl </a>
+ * @author <a href="mailto:maakus@earthlink.net">Markus Hahn</a>
+ */
+
+public final class CryptoUtil
+{
+    /**
+     * Copies from a source to a target object using encryption
+     *
+     * @param source the source object
+     * @param target the target object
+     * @param password the password to use for encryption
+     * @throws GeneralSecurityException accessing JCE failed
+     * @throws IOException accessing the souce failed
+     *
+     */
+    public static void encrypt( Object source, Object target, char[] password )
+        throws GeneralSecurityException, IOException
+    {
+        CryptoUtil.encrypt(
+            CryptoUtil.getCryptoStreamFactory(),
+            source,
+            target,
+            password
+            );
+    }
+
+    /**
+     * Copies from a source to a target object using encryption and a
+     * caller supplied CryptoStreamFactory.
+     *
+     * @param factory the factory to create the crypto streams
+     * @param source the source object
+     * @param target the target object
+     * @param password the password to use for encryption
+     * @throws GeneralSecurityException accessing JCE failed
+     * @throws IOException accessing the souce failed
+     */
+    public static void encrypt(
+        CryptoStreamFactory factory, Object source, Object target, char[] password )
+        throws GeneralSecurityException, IOException
+    {
+        InputStream is = StreamUtil.createInputStream( source );
+        OutputStream os = StreamUtil.createOutputStream( target );
+        OutputStream eos = factory.getOutputStream( os, password );
+        StreamUtil.copy( is, eos );
+    }
+
+    /**
+     * Copies from a source to a target object using decryption.
+     *
+     * @param source the source object
+     * @param target the target object
+     * @param password the password to use for decryption
+     * @throws GeneralSecurityException accessing JCE failed
+     * @throws IOException accessing the souce failed
+     */
+    public static void decrypt( Object source, Object target, char[] password )
+        throws GeneralSecurityException, IOException
+    {
+        CryptoUtil.decrypt(
+            CryptoUtil.getCryptoStreamFactory(),
+            source,
+            target,
+            password
+            );
+    }
+
+    /**
+     * Copies from a source to a target object using decryption and a
+     * caller-suppier CryptoStreamFactory.
+     *
+     * @param factory the factory to create the crypto streams
+     * @param source the source object
+     * @param target the target object
+     * @param password the password to use for decryption
+     * @throws GeneralSecurityException accessing JCE failed
+     * @throws IOException accessing the souce failed
+     */
+    public static void decrypt(
+        CryptoStreamFactory factory, Object source, Object target, char[] password )
+        throws GeneralSecurityException, IOException
+    {
+        InputStream is = StreamUtil.createInputStream( source );
+        OutputStream os = StreamUtil.createOutputStream( target );
+        InputStream dis = factory.getInputStream( is, password );
+        StreamUtil.copy( dis, os );
+    }
+
+    /**
+     * Encrypts a string into a hex string.
+     *
+     * @param plainText the plain text to be encrypted
+     * @param password the password for encryption
+     * @return the encrypted string
+     * @throws GeneralSecurityException accessing JCE failed
+     * @throws IOException accessing the souce failed
+     */
+    public static String encryptString( String plainText, char[] password )
+        throws GeneralSecurityException, IOException
+    {
+        return CryptoUtil.encryptString(
+            CryptoUtil.getCryptoStreamFactory(),
+            plainText,
+            password
+            );
+    }
+
+    /**
+     * Encrypts a string into a hex string.
+     *
+     * @param factory the factory to create the crypto streams
+     * @param plainText the plain text to be encrypted
+     * @param password the password for encryption
+     * @return the encrypted string
+     * @throws GeneralSecurityException accessing JCE failed
+     * @throws IOException accessing the souce failed
+     */
+    public static String encryptString(
+        CryptoStreamFactory factory, String plainText, char[] password )
+        throws GeneralSecurityException, IOException
+    {
+        ByteArrayOutputStream bais = new ByteArrayOutputStream();
+        CryptoUtil.encrypt( factory, plainText, bais, password );
+        return HexConverter.toString( bais.toByteArray() );
+    }
+
+    /**
+     * Decrypts an encrypted string into the plain text. The encrypted
+     * string must be a hex string created by encryptString.
+     *
+     * @param cipherText the encrypted text to be decrypted
+     * @param password the password for decryption
+     * @return the decrypted string
+     * @throws GeneralSecurityException accessing JCE failed
+     * @throws IOException accessing the souce failed
+     */
+    public static String decryptString( String cipherText, char[] password )
+        throws GeneralSecurityException, IOException
+    {
+        return CryptoUtil.decryptString(
+            CryptoUtil.getCryptoStreamFactory(),
+            cipherText,
+            password
+            );
+    }
+
+    /**
+     * Decrypts an encrypted string into the plain text. The encrypted
+     * string must be a hex string created by encryptString.
+     *
+     * @param factory the factory to create the crypto streams
+     * @param cipherText the encrypted text to be decrypted
+     * @param password the password for decryption
+     * @return the decrypted string
+     * @throws GeneralSecurityException accessing JCE failed
+     * @throws IOException accessing the souce failed
+     */
+    public static String decryptString(
+        CryptoStreamFactory factory, String cipherText, char[] password )
+        throws GeneralSecurityException, IOException
+    {
+        byte[] buffer = HexConverter.toBytes( cipherText );
+        ByteArrayOutputStream bais = new ByteArrayOutputStream();
+        CryptoUtil.decrypt( factory, buffer, bais, password );
+        return new String( bais.toByteArray(), "utf-8" );
+    }
+
+    /**
+     * Pumps the input stream to the output stream.
+     *
+     * @param is the source input stream
+     * @param os the target output stream
+     * @return the number of bytes copied
+     * @throws IOException the copying failed
+     * @deprecated use StreamUtil instead
+     */
+    public static long copy( InputStream is, OutputStream os )
+        throws IOException
+    {
+        return StreamUtil.copy(is, os);
+    }
+
+    /**
+     * @return the CryptoStreamFactory to be used
+     */
+    public static CryptoStreamFactory getCryptoStreamFactory()
+    {
+        return CryptoStreamFactoryImpl.getInstance();
+    }
+}
diff --git a/fulcrum-yaafi-crypto-1.0.7/src/java/org/apache/fulcrum/jce/crypto/HexConverter.java b/fulcrum-yaafi-crypto-1.0.7/src/java/org/apache/fulcrum/jce/crypto/HexConverter.java
new file mode 100644
index 0000000..92aa6e1
--- /dev/null
+++ b/fulcrum-yaafi-crypto-1.0.7/src/java/org/apache/fulcrum/jce/crypto/HexConverter.java
@@ -0,0 +1,72 @@
+package org.apache.fulcrum.jce.crypto;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+/**
+ * Helper class to for HEX conversion.
+ *
+ * @author <a href="mailto:painter@apache.org">Jeffery Painter</a>
+ * @author <a href="mailto:siegfried.goeschl@it20one.at">Siegfried Goeschl</a>
+ * @author <a href="mailto:maakus@earthlink.net">Markus Hahn</a>
+ */
+
+public final class HexConverter
+{
+    /**
+     * Converts a byte array to a hex string.
+     *
+     * @param data the byte array
+     * @return the hex string
+     */
+    public static String toString( byte[] data )
+    {
+        return bytesToHexStr(data);
+    }
+
+    /**
+     * Converts a hex string into a byte[]
+     *
+     * @param sHex the hex string
+     * @return the byte[]
+     */
+    public static byte[] toBytes(String sHex) {
+        int len = sHex.length();
+        byte[] data = new byte[len / 2];
+        for (int i = 0; i < len; i += 2) {
+            data[i / 2] = (byte) ((Character.digit(sHex.charAt(i), 16) << 4)
+                                 + Character.digit(sHex.charAt(i+1), 16));
+        }
+        return data;
+    }    
+    
+    /**
+     * Converts a byte array to a hex string.
+     * @param data the byte array
+     * @return the hex string
+     */
+    private static String bytesToHexStr( byte[] data )
+    {
+        StringBuilder sbuf = new StringBuilder();
+        for ( byte b : data )
+        	sbuf.append( String.format("%02x", b ) );
+        return sbuf.toString();
+    }
+
+}
diff --git a/fulcrum-yaafi-crypto-1.0.7/src/java/org/apache/fulcrum/jce/crypto/PasswordFactory.java b/fulcrum-yaafi-crypto-1.0.7/src/java/org/apache/fulcrum/jce/crypto/PasswordFactory.java
new file mode 100644
index 0000000..c96713a
--- /dev/null
+++ b/fulcrum-yaafi-crypto-1.0.7/src/java/org/apache/fulcrum/jce/crypto/PasswordFactory.java
@@ -0,0 +1,181 @@
+package org.apache.fulcrum.jce.crypto;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.UnsupportedEncodingException;
+import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
+
+/**
+ * The implementation supplies a default password in the case that
+ * the programmer don't want to have additional hassles. It is easy to
+ * reengineer the password being used but much better than a hard-coded
+ * password in the application.
+ *
+ * The code uses parts from Markus Hahn's Blowfish library found at
+ * http://blowfishj.sourceforge.net/
+ *
+ * @author <a href="mailto:siegfried.goeschl@it20one.at">Siegfried Goeschl </a>
+ * @author <a href="mailto:maakus@earthlink.net">Markus Hahn</a>
+ */
+
+public class PasswordFactory implements PasswordParameters
+{
+
+    /**
+     * Create a new password
+     * 
+     * @return a default password using "xxxx-xxxx-xxxx-xxxxx"
+     * 
+     * @throws NoSuchAlgorithmException the encryption algorithm is not supported
+     * @throws UnsupportedEncodingException the requested encoding is not supported
+     */
+    public static char[] create()
+        throws NoSuchAlgorithmException, UnsupportedEncodingException
+    {
+        return create(
+            PasswordParameters.DEFAULTPASSWORD,
+            PasswordParameters.SALT,
+            PasswordParameters.COUNT
+            );
+    }
+
+    /**
+     * Create a new password using a seed
+     * 
+     * @param seed the default password supplied by the caller
+     * @return a password using "xxxx-xxxx-xxxx-xxxxx"
+     * 
+     * @throws NoSuchAlgorithmException the encryption algorithm is not supported
+     * @throws UnsupportedEncodingException the requested encoding is not supported
+     */
+    public static char[] create( String seed )
+        throws NoSuchAlgorithmException, UnsupportedEncodingException
+    {
+        return create(
+            seed.toCharArray()
+            );
+    }
+
+    /**
+     * @param seed the default password supplied by the caller
+     * @return a password using "xxxx-xxxx-xxxx-xxxxx"
+     * @throws NoSuchAlgorithmException the encryption algorithm is not supported
+     * @throws UnsupportedEncodingException the requested encoding is not supported
+     */
+    public static final char[] create( char[] seed )
+        throws NoSuchAlgorithmException, UnsupportedEncodingException
+    {
+        return create(
+            seed,
+            PasswordFactory.SALT,
+            PasswordFactory.COUNT
+            );
+    }
+
+    /**
+     * Creates a default password using "xxxx-xxxx-xxxx-xxxxx".
+     *
+     * @param salt the password salt
+     * @param password the default password
+     * @param count number of MessageDigest iterations
+     * @return the default password
+     * @throws NoSuchAlgorithmException the encryption algorithm is not supported
+     * @throws UnsupportedEncodingException the requested encoding is not supported
+     */
+    public static char [] create( char[] password, byte[] salt, int count )
+        throws NoSuchAlgorithmException, UnsupportedEncodingException
+    {
+        char [] result = null;
+        MessageDigest sha1 = MessageDigest.getInstance( "SHA1" );
+        byte [] passwordMask = new String( password ).getBytes( "UTF-8" );
+        byte [] temp = new byte[salt.length + passwordMask.length];
+        byte [] digest = null;
+
+        StringBuilder stringBuffer = new StringBuilder();
+
+        // combine the password with the salt string into a byte[9
+
+        System.arraycopy( passwordMask, 0, temp, 0, passwordMask.length );
+        System.arraycopy( salt, 0, temp, passwordMask.length, salt.length );
+
+        // create a hash over and over to make it a bit random
+
+        digest = temp;
+
+        for (int i = 0; i < count; i++)
+        {
+            sha1.update( digest );
+            digest = sha1.digest();
+        }
+
+        // build a well-formed password string to be usable
+        // by a human
+
+        long long1 = createLong( digest, 0 );
+        long long2 = createLong( digest, 4 );
+        long long3 = createLong( digest, 8 );
+        long long4 = createLong( digest, 12 );
+
+        stringBuffer.append( Long.toHexString( long1 ).substring( 0, 4 ) );
+        stringBuffer.append( '-' );
+        stringBuffer.append( Long.toHexString( long2 ).substring( 0, 4 ) );
+        stringBuffer.append( '-' );
+        stringBuffer.append( Long.toHexString( long3 ).substring( 0, 4 ) );
+        stringBuffer.append( '-' );
+        stringBuffer.append( Long.toHexString( long4 ).substring( 0, 5 ) );
+
+        // copy the password
+        result = new char[stringBuffer.length()];
+
+        for (int i = 0; i < stringBuffer.length(); i++)
+        {
+            result[i] = stringBuffer.charAt( i );
+        }
+
+        // wipe out the StringBuilder
+        for (int i = 0; i < stringBuffer.length(); i++)
+        {
+            stringBuffer.setCharAt( i, ' ' );
+        }
+
+        return result;
+    }
+
+    /**
+     * Gets bytes from an array into a long.
+     *
+     * @param buf where to get the bytes
+     * @param nOfs index from where to read the data
+     * @return the 64bit integer
+     */
+    private static long createLong(byte [] buf, int nOfs)
+    {
+        return
+            ((long)(( buf[nOfs    ]          << 24) |
+                    ((buf[nOfs + 1] & 0x0ff) << 16) |
+                    ((buf[nOfs + 2] & 0x0ff) <<  8) |
+                    ( buf[nOfs + 3] & 0x0ff       )) << 32) |
+            ((long)(( buf[nOfs + 4]          << 24) |
+                    ((buf[nOfs + 5] & 0x0ff) << 16) |
+                    ((buf[nOfs + 6] & 0x0ff) <<  8) |
+                    ( buf[nOfs + 7] & 0x0ff       )) & 0x0ffffffffL);
+    }
+}
diff --git a/fulcrum-yaafi-crypto-1.0.7/src/java/org/apache/fulcrum/jce/crypto/PasswordParameters.java b/fulcrum-yaafi-crypto-1.0.7/src/java/org/apache/fulcrum/jce/crypto/PasswordParameters.java
new file mode 100644
index 0000000..efb5022
--- /dev/null
+++ b/fulcrum-yaafi-crypto-1.0.7/src/java/org/apache/fulcrum/jce/crypto/PasswordParameters.java
@@ -0,0 +1,46 @@
+package org.apache.fulcrum.jce.crypto;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+/**
+ * Parameters for creating a password.
+ *
+ * @author <a href="mailto:siegfried.goeschl@it20one.at">Siegfried Goeschl</a>
+ */
+
+public interface PasswordParameters
+{
+    /** Parameter for the number of SHA1 invocation */
+    int COUNT = 20;
+
+    /** The default password used for creating the internal password */
+    char[] DEFAULTPASSWORD = {
+        (char) 'f', (char) 'u', (char) 'l', (char) 'c',
+        (char) 'r', (char) 'u', (char) 'm', (char) '-',
+        (char) 'y', (char) 'a', (char) 'a', (char) 'f',
+        (char) 'i'
+        };
+
+    /** The password salt */
+    byte[] SALT = {
+        (byte)0xc6, (byte)0x74, (byte)0x81, (byte)0x8a,
+        (byte)0x7b, (byte)0xe8, (byte)0xfe, (byte)0x99
+        };
+}
diff --git a/fulcrum-yaafi-crypto-1.0.7/src/java/org/apache/fulcrum/jce/crypto/SmartDecryptingInputStream.java b/fulcrum-yaafi-crypto-1.0.7/src/java/org/apache/fulcrum/jce/crypto/SmartDecryptingInputStream.java
new file mode 100644
index 0000000..1521134
--- /dev/null
+++ b/fulcrum-yaafi-crypto-1.0.7/src/java/org/apache/fulcrum/jce/crypto/SmartDecryptingInputStream.java
@@ -0,0 +1,381 @@
+package org.apache.fulcrum.jce.crypto;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.security.GeneralSecurityException;
+
+
+/**
+ * An input stream that determine if the originating input stream
+ * was encrypted or not. This magic only works for well-known file
+ * types though.
+ *
+ * @author <a href="mailto:siegfried.goeschl@it20one.at">Siegfried Goeschl</a>
+ */
+public class SmartDecryptingInputStream extends ByteArrayInputStream
+{
+    /** The encodings to be checked for XML */
+    private static final  String[] ENCODINGS = { "ISO-8859-1", "UTF-8", "UTF-16" };
+
+    /**
+     * Constructor
+     *
+     * @param cryptoStreamFactory the CryptoStreamFactory for creating a cipher stream
+     * @param is the input stream to be decrypted
+     * @throws IOException if file not found
+     * @throws GeneralSecurityException if security check fails
+     */
+    public SmartDecryptingInputStream(
+        CryptoStreamFactory cryptoStreamFactory,
+        InputStream is )
+        throws IOException, GeneralSecurityException
+    {
+        this( cryptoStreamFactory, is, null );
+    }
+
+    /**
+     * Constructor
+     *
+     * @param cryptoStreamFactory the CryptoStreamFactory for creating a cipher stream
+     * @param is the input stream to be decrypted
+     * @param password the password for decryption
+     * 
+     * @throws IOException if file not found
+     * @throws GeneralSecurityException if security check fails 
+     */
+    public SmartDecryptingInputStream(
+        CryptoStreamFactory cryptoStreamFactory,
+        InputStream is,
+        char[] password )
+        throws IOException, GeneralSecurityException
+    {
+        super( new byte[0] );
+
+        byte[] content = null;
+        byte[] plain = null;
+
+        // store the data from the input stream
+
+        ByteArrayOutputStream baosCipher = new ByteArrayOutputStream();
+        ByteArrayOutputStream baosPlain = new ByteArrayOutputStream();
+        this.copy( is, baosCipher );
+
+        content = baosCipher.toByteArray();
+        plain = content;
+
+        if( this.isEncrypted(content) == true )
+        {
+            InputStream cis = null;
+            ByteArrayInputStream bais = new ByteArrayInputStream(content);
+
+            if( ( password != null ) && ( password.length > 0 ) )
+            {
+                cis = cryptoStreamFactory.getInputStream( bais, password );
+            }
+            else
+            {
+                cis = cryptoStreamFactory.getInputStream( bais );
+            }
+
+            copy( cis, baosPlain );
+            plain = baosPlain.toByteArray();
+        }
+
+        // initialize the inherited instance
+
+        if( plain != null )
+        {
+            this.buf = plain;
+            this.pos = 0;
+            this.count = buf.length;
+        }
+    }
+
+    /**
+     * Determine if the content is encrypted. We are
+     * using our knowledge about block lenght, check
+     * for XML, ZIP and PDF files and at the end of
+     * the day we are just guessing.
+     *
+     * @param content the data to be examined
+     * @return true if this is an encrypted file
+     * @throws IOException unable to read the content
+     */
+    private boolean isEncrypted( byte[] content )
+        throws IOException
+    {
+        if( content.length == 0 )
+        {
+            return false;
+        }
+        else if( ( content.length % 8 ) != 0 )
+        {
+            // the block length is 8 bytes - if the length
+            // is not a multipe of 8 then the content was
+            // definitely not encrypted
+            return false;
+        }
+        else if( this.isPDF(content) )
+        {
+            return false;
+        }
+        else if( this.isXML(content) )
+        {
+            return false;
+        }
+        else if( this.isZip(content) )
+        {
+            return false;
+        }
+        else if( this.isUtf16Text(content) )
+        {
+            return false;
+        }
+        else
+        {
+            for( int i=0; i<content.length; i++ )
+            {
+                // do we have control characters in it?
+
+                char ch = (char) content[i];
+
+                if( this.isAsciiControl(ch) )
+                {
+                    return true;
+                }
+            }
+
+            return false;
+        }
+    }
+
+    /**
+     * Pumps the input stream to the output stream.
+     *
+     * @param is the source input stream
+     * @param os the target output stream
+     * @return the number of bytes copied
+     * @throws IOException the copying failed
+     */
+    public long copy( InputStream is, OutputStream os )
+        throws IOException
+    {
+        byte[] buf = new byte[1024];
+        int n = 0;
+        long total = 0;
+
+        while ((n = is.read(buf)) > 0)
+        {
+            os.write(buf, 0, n);
+            total += n;
+        }
+
+        is.close();
+        os.flush();
+        os.close();
+
+        return total;
+    }
+
+    /**
+     * Count the number of occurences for the given value
+     * @param content the content to examine
+     * @param value the value to look fo
+     * @return the number of matches
+     */
+    private int count( byte[] content, byte value )
+    {
+        int result = 0;
+
+        for( int i=0; i<content.length; i++ )
+        {
+            if( content[i] == value )
+            {
+                result++;
+            }
+        }
+
+        return result;
+    }
+
+    /**
+     * Detect the BOM of an UTF-16 (mandatory) or UTF-8 document (optional)
+     * @param content the content to examine
+     * @return true if the content contains a BOM
+     */
+    private boolean hasByteOrderMark( byte[] content )
+    {
+        if( ( (content[0] == 0xFF) && (content[1] == 0xFF) ) ||
+            ( (content[0] == 0xFF) && (content[1] == 0xFF) ) )
+        {
+            return true;
+        }
+        else
+        {
+            return false;
+        }
+    }
+
+    /**
+     * Check this is a UTF-16 text document.
+     *
+     * @param content the content to examine
+     * @return true if it is a XML document
+     * @throws IOException unable to read the content
+     */
+    private boolean isUtf16Text( byte[] content ) throws IOException
+    {
+        if( content.length < 2 )
+        {
+            return false;
+        }
+
+        if( this.hasByteOrderMark( content ) )
+        {
+            // we should have plenty of 0x00 in a text file
+
+            int estimate = (content.length-2)/3;
+
+            if( this.count(content,(byte)0) > estimate )
+            {
+                return true;
+            }
+        }
+
+        return false;
+    }
+
+    /**
+     * Check various encondings to determine if "<?xml"
+     * and "?>" appears in the data.
+     *
+     * @param content the content to examine
+     * @return true if it is a XML document
+     * @throws IOException unable to read the content
+     */
+    private boolean isXML( byte[] content ) throws IOException
+    {
+        if( content.length < 3 )
+        {
+            return false;
+        }
+
+        for( int i=0; i<ENCODINGS.length; i++ )
+        {
+            String currEncoding = ENCODINGS[i];
+
+            String temp = new String( content, currEncoding );
+
+            if( ( temp.indexOf("<?xml") >= 0 ) && ( temp.indexOf("?>") > 0 ) )
+            {
+                return true;
+            }
+        }
+
+        return false;
+    }
+
+    /**
+     * Check if this is a ZIP document
+     *
+     * @param content the content to examine
+     * @return true if it is a PDF document
+     */
+
+    private boolean isZip( byte[] content )
+    {
+        if( content.length < 64 )
+        {
+            return false;
+        }
+        else
+        {
+            // A ZIP starts with Hex: "50 4B 03 04"
+
+            if( ( content[0] == (byte) 0x50 ) &&
+                ( content[1] == (byte) 0x4B ) &&
+                ( content[2] == (byte) 0x03 ) &&
+                ( content[3] == (byte) 0x04 )  )
+            {
+                return true;
+            }
+            else
+            {
+                return false;
+            }
+        }
+    }
+
+    /**
+     * Check if this is a PDF document
+     *
+     * @param content the content to examine
+     * @return true if it is a PDF document
+     * @throws IOException unable to read the content
+     */
+    private boolean isPDF(byte[] content) throws IOException
+    {
+        if( content.length < 64 )
+        {
+            return false;
+        }
+        else
+        {
+            // A PDF starts with HEX "25 50 44 46 2D 31 2E"
+
+            if( ( content[0] == (byte) 0x25 ) &&
+                ( content[1] == (byte) 0x50 ) &&
+                ( content[2] == (byte) 0x44 ) &&
+                ( content[3] == (byte) 0x46 ) &&
+                ( content[4] == (byte) 0x2D ) &&
+                ( content[5] == (byte) 0x31 ) &&
+                ( content[6] == (byte) 0x2E )  )
+            {
+                return true;
+            }
+            else
+            {
+                return false;
+            }
+        }
+    }
+
+    /**
+     * Is this an ASCII control character?
+     * @param ch the charcter
+     * @return true is this in an ASCII character
+     */
+    private boolean isAsciiControl(char ch)
+    {
+        if( ( ch >= 0x0000 ) && ( ch <= 0x001F) )
+        {
+            return true;
+        }
+        else
+        {
+            return true;
+        }
+    }
+}
diff --git a/fulcrum-yaafi-crypto-1.0.7/src/java/org/apache/fulcrum/jce/crypto/StreamUtil.java b/fulcrum-yaafi-crypto-1.0.7/src/java/org/apache/fulcrum/jce/crypto/StreamUtil.java
new file mode 100644
index 0000000..fccd6d9
--- /dev/null
+++ b/fulcrum-yaafi-crypto-1.0.7/src/java/org/apache/fulcrum/jce/crypto/StreamUtil.java
@@ -0,0 +1,186 @@
+package org.apache.fulcrum.jce.crypto;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+
+/**
+ * Helper class to provde generic stream functions.
+ *
+ * @author <a href="mailto:siegfried.goeschl@it20one.at">Siegfried Goeschl </a>
+ */
+
+public final class StreamUtil
+{
+    /** the size of the internal buffer to copy streams */
+    private static final int BUFFER_SIZE = 1024;
+
+    /**
+     * Create an input stream supporting the following types
+     *
+     * <ul>
+     *  <li>String (using the UTF-8 encoded content)</li>
+     *  <li>File</li>
+     *  <li>byte[]</li>
+     *  <li>char[]</li>
+     *  <li>ByteArrayOutputStream</li>
+     *  <li>InputStream</li>
+     * </ul>
+     *
+     * @param source the source object
+     * @return the created input stream
+     * @throws java.io.IOException creating the input stream failed
+     */
+    public static InputStream createInputStream( Object source )
+        throws IOException
+    {
+        InputStream is;
+
+        // create an InputStream
+
+        if( source instanceof String )
+        {
+            byte[] content = ((String) source).getBytes("utf-8");
+            is = new ByteArrayInputStream( content );
+        }
+        else if( source instanceof File )
+        {
+            is = new FileInputStream( (File) source );
+        }
+        else if( source instanceof byte[] )
+        {
+            is = new ByteArrayInputStream( (byte[]) source );
+        }
+        else if( source instanceof char[] )
+        {
+            byte[] content = new String((char[])source).getBytes("utf-8");
+            is = new ByteArrayInputStream( content );
+        }
+        else if( source instanceof ByteArrayOutputStream )
+        {
+            byte[] content = ((ByteArrayOutputStream) source).toByteArray();
+            is = new ByteArrayInputStream( content );
+        }
+        else if( source instanceof InputStream )
+        {
+            is = (InputStream) source;
+        }
+        else
+        {
+            throw new IllegalArgumentException("Don't know hot to handle " + source.getClass().getName());
+        }
+
+        return is;
+    }
+
+    /**
+     * Create an output stream supporting the following types
+     *
+     * <ul>
+     *  <li>File</li>
+     *  <li>String</li>
+     *  <li>OutputStream</li>
+     * </ul>
+     *
+     * @param target the target object
+     * @return the output stream
+     * @throws java.io.IOException creating the output stream failed
+     */
+    public static OutputStream createOutputStream( Object target )
+        throws IOException
+    {
+        OutputStream os;
+
+        if( target instanceof File )
+        {
+            File currFile = (File) target;
+            createParentFile(currFile);
+            os = new FileOutputStream(currFile);
+        }
+        else if( target instanceof String )
+        {
+            File currFile = new File((String) target);
+            createParentFile(currFile);
+            os = new FileOutputStream(currFile);
+        }
+        else if( target instanceof OutputStream )
+        {
+            os = (OutputStream) target;
+        }
+        else
+        {
+            throw new IllegalArgumentException("Don't know hot to handle " + target.getClass().getName());
+        }
+
+        return os;
+    }
+
+    /**
+     * Pumps the input stream to the output stream.
+     *
+     * @param is the source input stream
+     * @param os the target output stream
+     * @return the number of bytes copied
+     * @throws java.io.IOException the copying failed
+     */
+    public static long copy( InputStream is, OutputStream os )
+        throws IOException
+    {
+        byte[] buf = new byte[BUFFER_SIZE];
+        int n = 0;
+        long total = 0;
+
+        while ((n = is.read(buf)) > 0)
+        {
+            os.write(buf, 0, n);
+            total += n;
+        }
+
+        is.close();
+
+        os.flush();
+        os.close();
+
+        return total;
+    }
+
+    /**
+     * Ensure that the parent directories exists before writing to
+     * the file.
+     * 
+     * @param currFile the file to write to
+     */
+    private static void createParentFile(File currFile)
+    {
+        File parentFile = currFile.getParentFile();
+        
+        if((parentFile != null) && !parentFile.exists())
+        {
+            parentFile.mkdirs();
+        }
+    }
+}
\ No newline at end of file
diff --git a/fulcrum-yaafi-crypto-1.0.7/src/site/resources/announcements/announcement-1.0.6.txt b/fulcrum-yaafi-crypto-1.0.7/src/site/resources/announcements/announcement-1.0.6.txt
new file mode 100644
index 0000000..271f730
--- /dev/null
+++ b/fulcrum-yaafi-crypto-1.0.7/src/site/resources/announcements/announcement-1.0.6.txt
@@ -0,0 +1 @@
+The fulcrum-yaafi-crypto-team is pleased to announce the fulcrum-yaafi-crypto-1.0.6.jar release!

Fulcrum YAAFI Crypto Library

Changes in this version include:

New features:
o Moving the code out of YAAFI and make a standalone library. 


Changes:
o Using the official fulcrum-parent-1 pom. 


Have fun!
-fulcrum-yaafi-crypto-team
\ No newline at end of file
diff --git a/fulcrum-yaafi-crypto-1.0.7/src/site/site.xml b/fulcrum-yaafi-crypto-1.0.7/src/site/site.xml
new file mode 100644
index 0000000..da3532b
--- /dev/null
+++ b/fulcrum-yaafi-crypto-1.0.7/src/site/site.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements.  See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership.  The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License.  You may obtain a copy of the License at
+
+   http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied.  See the License for the
+ specific language governing permissions and limitations
+ under the License.
+-->
+<project xmlns="http://maven.apache.org/DECORATION/1.4.0" 
+  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://maven.apache.org/DECORATION/1.4.0 http://maven.apache.org/xsd/decoration-1.4.0.xsd"
+  name="Fulcrum YAAFI Crypto Library">
+  <body>
+    <menu name="Overview">
+      <item name="Overview"            href="/index.html"/>
+      <item name="Downloads"           href="/downloads.html"/>
+    </menu>  
+    <menu ref="reports"></menu>
+  </body>
+</project>
diff --git a/fulcrum-yaafi-crypto-1.0.7/src/test/data/empty.txt b/fulcrum-yaafi-crypto-1.0.7/src/test/data/empty.txt
new file mode 100644
index 0000000..e69de29
diff --git a/fulcrum-yaafi-crypto-1.0.7/src/test/data/plain-iso-8859-1.xml b/fulcrum-yaafi-crypto-1.0.7/src/test/data/plain-iso-8859-1.xml
new file mode 100644
index 0000000..2d637b1
--- /dev/null
+++ b/fulcrum-yaafi-crypto-1.0.7/src/test/data/plain-iso-8859-1.xml
@@ -0,0 +1,56 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements.  See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership.  The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License.  You may obtain a copy of the License at
+
+   http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied.  See the License for the
+ specific language governing permissions and limitations
+ under the License.
+-->
+
+<role-list>
+  <!-- Use minimal role entry -->
+  <role
+    name="org.apache.fulcrum.yaafi.service.servicemanager.ServiceManagerService"
+    default-class="org.apache.fulcrum.yaafi.service.servicemanager.ServiceManagerServiceImpl"
+  />
+  <!-- For the rest of the services use a full-blown role entry -->
+  <role
+    name="org.apache.fulcrum.yaafi.service.systemproperty.SystemPropertyService"
+    shorthand="SystemPropertyService"
+    default-class="org.apache.fulcrum.yaafi.service.systemproperty.SystemPropertyServiceImpl"
+    early-init="true"
+    description="�������"
+  />
+  <!--
+    This ReconfigurationService is instantiated during the first access. Until
+    then it is doing nothing.
+  -->
+  <role
+    name="org.apache.fulcrum.yaafi.service.reconfiguration.ReconfigurationService"
+    shorthand="ReconfigurationService"
+    default-class="org.apache.fulcrum.yaafi.service.reconfiguration.ReconfigurationServiceImpl"
+    early-init="false"
+    component-type="avalon"
+    component-flavour="yaafi"
+    description="Monitors the componentConfiguration.xml to reconfigure YAAFI"
+  />
+  <role
+    name="org.apache.fulcrum.yaafi.TestComponent"
+    shorthand="test"
+    default-class="org.apache.fulcrum.yaafi.TestComponentImpl"
+    early-init="true"
+    component-type="merlin"
+    description="A simple test component"
+  />
+</role-list>
diff --git a/fulcrum-yaafi-crypto-1.0.7/src/test/data/plain-utf16.xml b/fulcrum-yaafi-crypto-1.0.7/src/test/data/plain-utf16.xml
new file mode 100644
index 0000000..71fe210
Binary files /dev/null and b/fulcrum-yaafi-crypto-1.0.7/src/test/data/plain-utf16.xml differ
diff --git a/fulcrum-yaafi-crypto-1.0.7/src/test/data/plain-utf8.xml b/fulcrum-yaafi-crypto-1.0.7/src/test/data/plain-utf8.xml
new file mode 100644
index 0000000..14dd45c
--- /dev/null
+++ b/fulcrum-yaafi-crypto-1.0.7/src/test/data/plain-utf8.xml
@@ -0,0 +1,56 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements.  See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership.  The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License.  You may obtain a copy of the License at
+
+   http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied.  See the License for the
+ specific language governing permissions and limitations
+ under the License.
+-->
+
+<role-list>
+  <!-- Use minimal role entry -->
+  <role
+    name="org.apache.fulcrum.yaafi.service.servicemanager.ServiceManagerService"
+    default-class="org.apache.fulcrum.yaafi.service.servicemanager.ServiceManagerServiceImpl"
+  />
+  <!-- For the rest of the services use a full-blown role entry -->
+  <role
+    name="org.apache.fulcrum.yaafi.service.systemproperty.SystemPropertyService"
+    shorthand="SystemPropertyService"
+    default-class="org.apache.fulcrum.yaafi.service.systemproperty.SystemPropertyServiceImpl"
+    early-init="true"
+    description="ÜÖÄüöäß"
+  />
+  <!--
+    This ReconfigurationService is instantiated during the first access. Until
+    then it is doing nothing.
+  -->
+  <role
+    name="org.apache.fulcrum.yaafi.service.reconfiguration.ReconfigurationService"
+    shorthand="ReconfigurationService"
+    default-class="org.apache.fulcrum.yaafi.service.reconfiguration.ReconfigurationServiceImpl"
+    early-init="false"
+    component-type="avalon"
+    component-flavour="yaafi"
+    description="Monitors the componentConfiguration.xml to reconfigure YAAFI"
+  />
+  <role
+    name="org.apache.fulcrum.yaafi.TestComponent"
+    shorthand="test"
+    default-class="org.apache.fulcrum.yaafi.TestComponentImpl"
+    early-init="true"
+    component-type="merlin"
+    description="A simple test component"
+  />
+</role-list>
diff --git a/fulcrum-yaafi-crypto-1.0.7/src/test/data/plain.groovy b/fulcrum-yaafi-crypto-1.0.7/src/test/data/plain.groovy
new file mode 100644
index 0000000..8f7243e
--- /dev/null
+++ b/fulcrum-yaafi-crypto-1.0.7/src/test/data/plain.groovy
@@ -0,0 +1,44 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+import java.io.File;
+
+def getVerse() {
+    lines= []
+    lines+= ( "Karma " * 5 ) + "Chameleon,"
+    lines+= (["you come and go"] * 2).join(", ")+"."
+    lines+= "Loving would be easy if your"+
+              " colours were like my dream"
+    lines+= (["red gold and green"]*2).join(", ")+"."
+
+    verse= lines.collect { it + "\n" }
+    return verse
+}
+
+println "Writing out to file.\n"
+myFile= new File("temp/karma.txt")
+myFile.write("Karma Chameleon\n\n")
+getVerse().each { myFile.append(it) }
+
+println "\nWith line numbering ...\n"
+count=1
+myFile.eachLine { println count++ + ": " + it }
+
+println "\nAs a single string ...\n"
+println myFile.readLines().join(" | ")
+myFile.delete();
diff --git a/fulcrum-yaafi-crypto-1.0.7/src/test/data/plain.pdf b/fulcrum-yaafi-crypto-1.0.7/src/test/data/plain.pdf
new file mode 100644
index 0000000..ba2cdb4
--- /dev/null
+++ b/fulcrum-yaafi-crypto-1.0.7/src/test/data/plain.pdf
@@ -0,0 +1,716 @@
+%PDF-1.3
+%����
+4 0 obj
+<< /Type /Info
+/Producer (FOP 0.20.5) >>
+endobj
+5 0 obj
+<< /Length 340 /Filter [ /ASCII85Decode /FlateDecode ]
+ >>
+stream
+Gb!$A0i,\@&;>?.MAt:na8+`Ep0'a.QpC4s(dd:_!@8=)/`PYt[t-@>p=dDUet)KIpMTB:eOG.$,]L/a<2s&&;dj&a,Z),d$:4ob1`?J!KuX@'hH@]/\3"]j`1*F@c;L?:(361t!b#'%U;#QZ((XlFPij/jU[f)'bSE2K.Q1rc*sFS*;r@E;h1pDWq5b';lTb78\qH$MM8(V8a@$1dWIIbP4//sIU!,RB:M1a'ZndDn1[[!&F65TY(j0B'&,hEiL5GE2YBI&:L2pu(DM4PCs(CiPi9Klc5IH2omB/qOD9K%C7%%krZ:I'l+?c."n]tWFL<o*1`B$Ha"aJOqDZ~>
+endstream
+endobj
+6 0 obj
+<< /Type /Page
+/Parent 1 0 R
+/MediaBox [ 0 0 594 842 ]
+/Resources 3 0 R
+/Contents 5 0 R
+>>
+endobj
+7 0 obj
+<< /Length 21 /Filter [ /ASCII85Decode /FlateDecode ]
+ >>
+stream
+Garg^iGoCd!WWA\!CQ~>
+endstream
+endobj
+8 0 obj
+<< /Type /Page
+/Parent 1 0 R
+/MediaBox [ 0 0 594 842 ]
+/Resources 3 0 R
+/Contents 7 0 R
+>>
+endobj
+9 0 obj
+<< /Length 997 /Filter [ /ASCII85Decode /FlateDecode ]
+ >>
+stream
+Gb"/j95iNL&:j6IMS1l-FLpq]0b;^.,,#?E022tARL#nF(!oAEpK`@[]>2GRTlNO*0)<T44pLfr]Cqh.SIZNg0Fa7WismC0*CcuW1SQ9g@Y=p(36A&YlVTS<r\Hbcn%#\er2:TRr]Vij7:%P-a5e2]55@)S@D$=g\=q(5[*1N9.p"=?l[&dkEM->Gd@)!l:;d-BQ=sV-bOfO!Cn2t4,m\Ouooi`pd!G9]LOAeLaWLP[8*POa7C8qb\>sq/]$K2]_RSpjUo4B>^(\Q&G82L@o)"[f"S8<X84Z:TK6D@7Qj#)6Q5S;c96jKWi0)\5j[kMfEEg06FX^gB-.=QKoo^IA+WW>7V&5)G2bK2?E(\YY'M0a.EP9IR+$GULl[tE:W<)1(SCW#2OH>R\%](0`C.TZkBdcfqM5J`$bH;krG7![GCdhYFUZ&9k/gb.lp8$2GKo$IIY8\)edVJJUW!V/</S,Y&b;S52\)_u2<YThKO31oo\c [...]
+endstream
+endobj
+10 0 obj
+<< /Type /Page
+/Parent 1 0 R
+/MediaBox [ 0 0 594 842 ]
+/Resources 3 0 R
+/Contents 9 0 R
+/Annots 11 0 R
+>>
+endobj
+11 0 obj
+[
+12 0 R
+14 0 R
+16 0 R
+18 0 R
+20 0 R
+22 0 R
+24 0 R
+26 0 R
+28 0 R
+30 0 R
+32 0 R
+]
+endobj
+12 0 obj
+<< /Type /Annot
+/Subtype /Link
+/Rect [ 68.4 667.35 88.986 657.85 ]
+/C [ 0 0 0 ]
+/Border [ 0 0 0 ]
+/A 13 0 R
+/H /I
+>>
+endobj
+14 0 obj
+<< /Type /Annot
+/Subtype /Link
+/Rect [ 68.4 649.063 107.986 639.563 ]
+/C [ 0 0 0 ]
+/Border [ 0 0 0 ]
+/A 15 0 R
+/H /I
+>>
+endobj
+16 0 obj
+<< /Type /Annot
+/Subtype /Link
+/Rect [ 68.4 630.776 105.355 621.276 ]
+/C [ 0 0 0 ]
+/Border [ 0 0 0 ]
+/A 17 0 R
+/H /I
+>>
+endobj
+18 0 obj
+<< /Type /Annot
+/Subtype /Link
+/Rect [ 97.2 611.489 144.196 601.989 ]
+/C [ 0 0 0 ]
+/Border [ 0 0 0 ]
+/A 19 0 R
+/H /I
+>>
+endobj
+20 0 obj
+<< /Type /Annot
+/Subtype /Link
+/Rect [ 97.2 592.202 163.728 582.702 ]
+/C [ 0 0 0 ]
+/Border [ 0 0 0 ]
+/A 21 0 R
+/H /I
+>>
+endobj
+22 0 obj
+<< /Type /Annot
+/Subtype /Link
+/Rect [ 97.2 572.915 154.731 563.415 ]
+/C [ 0 0 0 ]
+/Border [ 0 0 0 ]
+/A 23 0 R
+/H /I
+>>
+endobj
+24 0 obj
+<< /Type /Annot
+/Subtype /Link
+/Rect [ 68.4 554.628 104.822 545.128 ]
+/C [ 0 0 0 ]
+/Border [ 0 0 0 ]
+/A 25 0 R
+/H /I
+>>
+endobj
+26 0 obj
+<< /Type /Annot
+/Subtype /Link
+/Rect [ 97.2 535.341 198.03 525.841 ]
+/C [ 0 0 0 ]
+/Border [ 0 0 0 ]
+/A 27 0 R
+/H /I
+>>
+endobj
+28 0 obj
+<< /Type /Annot
+/Subtype /Link
+/Rect [ 97.2 516.054 196.443 506.554 ]
+/C [ 0 0 0 ]
+/Border [ 0 0 0 ]
+/A 29 0 R
+/H /I
+>>
+endobj
+30 0 obj
+<< /Type /Annot
+/Subtype /Link
+/Rect [ 68.4 497.767 101.127 488.267 ]
+/C [ 0 0 0 ]
+/Border [ 0 0 0 ]
+/A 31 0 R
+/H /I
+>>
+endobj
+32 0 obj
+<< /Type /Annot
+/Subtype /Link
+/Rect [ 68.4 479.48 96.614 469.98 ]
+/C [ 0 0 0 ]
+/Border [ 0 0 0 ]
+/A 33 0 R
+/H /I
+>>
+endobj
+34 0 obj
+<< /Length 223 /Filter [ /ASCII85Decode /FlateDecode ]
+ >>
+stream
+GarW30b8k$%#+HQ'cgkip<"DrNM)&9#UIj.Lm*[M_>h9-_S@J+;d]+Pqc\m2<>mV<OJa:57lH-hdQl8rY_34NB/H2GhJh4?;)TSKD5K1fe%hi]U3#5"&mFN5\:^<$nK.';5IETfXn1!MS^HA9Nu@i*@N8J+"cX>eImW1W]q4$^>KoP_JuXO(CLcd`fg\<U1sp`NO/MFgCFSo7EXdd-0SoQ*\m.Ru~>
+endstream
+endobj
+35 0 obj
+<< /Type /Page
+/Parent 1 0 R
+/MediaBox [ 0 0 594 842 ]
+/Resources 3 0 R
+/Contents 34 0 R
+>>
+endobj
+36 0 obj
+<< /Length 1077 /Filter [ /ASCII85Decode /FlateDecode ]
+ >>
+stream
+Gb!#[95bIu&AI=/pm<+;...@UD>ll-dV%Rr-P)fF$,p,i.6#7_R:$Z"X'$T/%NFKLCNQDf%<FYjnb?K^/@nOHO[#"V@?6a)BgCYa58rr9ZdiT!?$;JE:$$m36dIpK9O[!NOW5Q:#aIp+D+="jF"#R93=VUgF]8-O6E<E3OqYY/;*9>Zt?m4,STQVM^`?#.&1m[p.bf=$dpfsS<T5gntl"B8.:9)s2UJ0\k'Th_C&0*Qsoa^2#8UWJl$"<%-jn*8'Y+q;;i\X"FoY6_B&Yb4Qm4'-,'p;sK?aV[X)K<V4\AH#qEq<Xaehf]5_e(?p@iqRP9*k-Eg@<5HuG2=h_8hc,%8;T.eE"^TdlOBP0kk69I.,l0-O_f615snNq.e++?J^DJ8$=UnB"d).K??iam!ArpbSF3/eUI [...]
+endstream
+endobj
+37 0 obj
+<< /Type /Page
+/Parent 1 0 R
+/MediaBox [ 0 0 594 842 ]
+/Resources 3 0 R
+/Contents 36 0 R
+>>
+endobj
+38 0 obj
+<< /Length 1087 /Filter [ /ASCII85Decode /FlateDecode ]
+ >>
+stream
+Gb!#[95bIu&AI=/pt-X&G%T>Z#o+2;6;U+IG1?ps%XDl`#;1PLhoB&aGQ$0IKQ82tQ,K*R2rBSGYM7`g943J^eo#+8Y?8EF+/gZ_fp<S\b.`G#k$S<j[G_<!CVR,M-c#8:I:hknCS>>_SZXg^Bo.^+<_%33k]O&#]'iFUh60*V(a(7C:;&\4YBAmUq>^2H+i#*08>Wj,3S]*ir]Fb)B_O!"o(Z_mrpf"-Eq*mt7PFg\0sr>R7k2C!Wi?uLKO+0(=q[ukDHF@h]6(>olrr,NErQ8*]@M\c`idUi/P.U*$)jASQN6M5!(kW,6_-b,?4$hgPG;/#N@&$+'4gTF^T2F:7@J[2F"P@m^7p.;%h"iE[<%U"cm?H8,\%)g(W)>uOnjK\jeJ#3I+oZDm>_Wt.#orNmr=m7)HK@n@cQhW70t=25>^?13ZJjuJG"eoFO>4V\LmB0E?s;PB$cX(M+W.(bs9[t8IAnF70NdI\l!]b0ga6SQZ [...]
+endstream
+endobj
+39 0 obj
+<< /Type /Page
+/Parent 1 0 R
+/MediaBox [ 0 0 594 842 ]
+/Resources 3 0 R
+/Contents 38 0 R
+>>
+endobj
+40 0 obj
+<< /Length 873 /Filter [ /ASCII85Decode /FlateDecode ]
+ >>
+stream
+Gb!#Z95>J$&AJ$Cka3?aC8@+qJeDbG:$Z7,LmLGBHEc#5-I?(>..lCuDsLi$2<geE,.k0;UMml7Olh),G]OBd@?11u5qkV'T`<E*E/F8r5XbVQU(W+<W+?;dW_i^'ID5j-Y0dd0J(>YX!b#oQMo:Jdgh7X`3Da@pHCi.8cgZ"7Q@OL3bA(*k:FTn]EVB2-qkY:Z'-)g/@MrWWO"\8?#L1$neRF,jOhq]\o9K43!`RGF>=(lU(Y;=8C1l=4:J3tlM-bg@48l=S@48P)jM,N%[aBWQCJL-j,;ko/]o<!==dsVsRGY.:R7YEjNIq/Do9RBH5AqQc+\>WKF207t";0rPYm=H3[[TD%hq$OXIMkiOUlWnX%fF,;nTu-(kAk0M,*i8M$Aes@eMZ@0J-I<tJmS.!l3gJTa$9h6hep$qcdI<Pac:iE"TZ\a_dP`Z>b;E2=2([ClS`M>lXRF1&E-a4G!;QcTB1S'r";3()2Pp>C-\Xp\K [...]
+endstream
+endobj
+41 0 obj
+<< /Type /Page
+/Parent 1 0 R
+/MediaBox [ 0 0 594 842 ]
+/Resources 3 0 R
+/Contents 40 0 R
+/Annots 42 0 R
+>>
+endobj
+42 0 obj
+[
+43 0 R
+45 0 R
+47 0 R
+]
+endobj
+43 0 obj
+<< /Type /Annot
+/Subtype /Link
+/Rect [ 66.9 650.686 114.75 639.686 ]
+/C [ 0 0 0 ]
+/Border [ 0 0 0 ]
+/A 44 0 R
+/H /I
+>>
+endobj
+45 0 obj
+<< /Type /Annot
+/Subtype /Link
+/Rect [ 66.9 632.922 132.361 621.922 ]
+/C [ 0 0 0 ]
+/Border [ 0 0 0 ]
+/A 46 0 R
+/H /I
+>>
+endobj
+47 0 obj
+<< /Type /Annot
+/Subtype /Link
+/Rect [ 66.9 615.158 141.414 604.158 ]
+/C [ 0 0 0 ]
+/Border [ 0 0 0 ]
+/A 48 0 R
+/H /I
+>>
+endobj
+49 0 obj
+<< /Length 2056 /Filter [ /ASCII85Decode /FlateDecode ]
+ >>
+stream
+Gb"/)>Ar7S'Roe[d%g1DQ5B(c@OTT]gLVd</2=SgV@Tt#VoB]<Q0kF$Y9->5&h-\`>]db&ide7%Ob`,rST>LY=\N/77o9>$Zrg$FJC,Q>?^O21U:U_hT__"fel+Qf,QS3HU;_QQH&;S&kT]j9/UgVT8;*AeXb\t6-j6g/,lgBDgi^$LdUJ[ef"5e4(I\Va]q(?[$5`jhifXB<s*\-(i#XI(/qBm2#\no[#aLnXNKaH[Q2V/E0NNh+_-TQsQthha=iAf`WkL:^/_.qbC\(c_qb'*8ma<n)l-2b[WmKp2C3`CiSD^$1=k\/-)@;J)#kFKgb3UCGZBPQWi43%ZV<'=,,I_dp1YIc,Hm94)"J[?'['Ydnm*I:ka*<HM)Hd7ojXmkA3i]<@*HVNr&q(*9C$GRuZj!*FM&9.Y8Ppc6f&TrW8ocn21bC7O=fH,1'4L@1hcSWI)*@sMpD1F)#]!+D^fBF-(g1-ImLcp3$/Kf>,d(H*>H [...]
+endstream
+endobj
+50 0 obj
+<< /Type /Page
+/Parent 1 0 R
+/MediaBox [ 0 0 594 842 ]
+/Resources 3 0 R
+/Contents 49 0 R
+>>
+endobj
+51 0 obj
+<< /Length 1812 /Filter [ /ASCII85Decode /FlateDecode ]
+ >>
+stream
+GauHL9lo&I&A@C2i+O3aie%6QR8.@a6qQ3+S^uBa''DMXPg-2A8l9TV?XEd9#XEncWpMV\NJSqfm(RoF(>t\8jG3IDA.X=F@Y3[5C4a7M"9TqKA&&Ao5tVcW0Fh\FnG2@P=Ol$]'i$R%@?rZf2>b*fQAf5&>MdoBWbo1MZWUXf04=MFA3-4X.45$Jq><\*3sQ21"Je#2N9"@M=@+1Se%r<m#VtlN*[\WrhFJ_C8:)G,`t3l*qc.K6gWd<9G;n:DrFXMMNtS%?q,.X(*kJd_57&8p=XqupM=CCF\kQ'?rDc__2TpO3=LLZmCe)g@Q#gm#Zuso9g@*V"=kN%8cE-"`ma;M2SnET:.3oes>qWS?AQ'=,9S4Qc7C._l4F:shG2utJgWe>^?I,`bZ"`Tu/?1p@MKXHmP:VIq[b(mFb%B=K:.R$tMno5gZ>0+aa4%H&oW!1_m[V7%Yj-(0<*aq-'+>c/Qo++2(l-c;h7g#M.6_a6f` [...]
+endstream
+endobj
+52 0 obj
+<< /Type /Page
+/Parent 1 0 R
+/MediaBox [ 0 0 594 842 ]
+/Resources 3 0 R
+/Contents 51 0 R
+>>
+endobj
+53 0 obj
+<< /Length 858 /Filter [ /ASCII85Decode /FlateDecode ]
+ >>
+stream
+Gb!#Zhf%4&&:WfGn0:'FZd6C_WD_?rNi=K@A:#2@#UEA?K2+-"s4OXjiZs>Q<R[ltK7!@g]C50(InBne*[rjHTO^2.R%Ru$-W!3EoK&Y$fKY8//HJbn?ipTZ>P*>70uG\35>^pi@PC3Ho<oc!5=%!4?5a1YhJ8F\hKJ50lZ&QrhRr5*Iu5WWs46TZ"TU@'4UV2g5'810N"T$&XNMG%X:j:Tjq+L7&>e5DFqbQV&H3mtK\I[:OLOEXKM.e=?+C\:W10,sV"VEkWEV0%AAKV%6i2"E(SNgLA[IWPIo5TW.?Lic^1q\f3+OCPWZtL!'nbONpoVGQC`m\>nX.Cd#4rPO=p+@X'oH$9$>bgb'SBCFL^7m.aeacElkXSAJ7^u9.KXk[6(MgW""b=r$?g(K_9L.u,/>lK[$q>brNk.Pe%5ZlTP(F0Pd;MFJYcE9WGNADWA1Le01iZs$\qg50L@85(%[tS59>:8].@7ebjiN!?ORaGMd [...]
+endstream
+endobj
+54 0 obj
+<< /Type /Page
+/Parent 1 0 R
+/MediaBox [ 0 0 594 842 ]
+/Resources 3 0 R
+/Contents 53 0 R
+>>
+endobj
+55 0 obj
+<< /Length 926 /Filter [ /ASCII85Decode /FlateDecode ]
+ >>
+stream
+Gb!#Z9lJc?%)(h*ka3Ek8^sYhTtn+6>DBQe)Io+F#<Qp[!)6BK3UPEoOt#"gSL+M`Qik5a,Ebi`O-2]iUCT;RA5n\=4^sY<I-D\[R'PfIL_Jp"S:EO!0d<A1A0g&qT4:V"'c5pIahPG)JoL+j?'(AE@T5BA9,369lag9f[bK&UZ[6G73T5M&^!(U%!%P(O,LHJZC9mn1=O>&c)s8orJg-`:cDdSe'ThsJN%sR7j_fK8/j];r3@bAR@>lkqZZK!'\$t&el0YQcH\ISn@]A'ghU=u+53`KM/\AQ':-Tq_ju/'2LG3eVnl7gsbeYNU/l&P\6Q,LIUP!1ichVVfbVs&_RLq,3"]l!U)gl$F23Nn`=bYi(*?<ICN<M#'dNVp$*=@"WKBYWtWVCEn+^4P;)"'pe3&XgPR@Yk-XVjn&1BcAF39,/[m5bpf]m>r,/g-!iPr;S[;(I*E-sdBPq,l&C@J@DO0.p!,?TBB>Fb=S^Ai2/"P- [...]
+endstream
+endobj
+56 0 obj
+<< /Type /Page
+/Parent 1 0 R
+/MediaBox [ 0 0 594 842 ]
+/Resources 3 0 R
+/Contents 55 0 R
+>>
+endobj
+57 0 obj
+<< /Length 837 /Filter [ /ASCII85Decode /FlateDecode ]
+ >>
+stream
+Gb"/%95iQ=%)2U?kh$rV8[A!jL&u(YG1jHECQ&9]gOnN7=b,Tga6h6'5K]:/a[t)*G=Vd%(<)?1BThL\)SNbY87R\.=[Xr0BatN7KI\m?-mJ/YLac"T7l&Xt1QBg/\iZWG3CXN-r<O<N7"rU3$4k)^:&q%CVl[ms:%>U3c*ddR7%"/F(p2bUiE.B`*<1LQ56U>,&.#8>C@:S$0Xr)CUD!i*K(_Tc,>)`?Tb8t3F0U3j#a%B`-41,T:-g8:D\,ZX%]fu<p.3!!r)7'TAjCWiCA07`.21oQ5k\.XnGlp9/2iT^e2Ai%1M=JMOhn%"C#s/8+/ZF[c1cL!-!MC8heM=IhuDu-47Z?4]:!<hFC+]N0^V!1pTo3%gTcppq"\/69em%91)HLP2dp8bFJCYaV:')Vi8"h\?5&eX:+h-8?E.<i0s$LnU#*/Wb+!3]CdomHC^M7iQu0RiP`,4WA`YV*IR@:G7<]98@d4Sh`AeVQ/J1cf/D [...]
+endstream
+endobj
+58 0 obj
+<< /Type /Page
+/Parent 1 0 R
+/MediaBox [ 0 0 594 842 ]
+/Resources 3 0 R
+/Contents 57 0 R
+/Annots 59 0 R
+>>
+endobj
+59 0 obj
+[
+60 0 R
+62 0 R
+]
+endobj
+60 0 obj
+<< /Type /Annot
+/Subtype /Link
+/Rect [ 52.9 616.022 127.198 609.022 ]
+/C [ 0 0 0 ]
+/Border [ 0 0 0 ]
+/A 61 0 R
+/H /I
+>>
+endobj
+62 0 obj
+<< /Type /Annot
+/Subtype /Link
+/Rect [ 52.9 597.283 126.029 590.283 ]
+/C [ 0 0 0 ]
+/Border [ 0 0 0 ]
+/A 63 0 R
+/H /I
+>>
+endobj
+64 0 obj
+<< /Length 983 /Filter [ /ASCII85Decode /FlateDecode ]
+ >>
+stream
+Gb!#Z9lo#B&A@Zc1n;F6N?mi-RO66(.7qu[_N_RDe3+YQ.8p;I"6nn(GD5/2$774hV(`fjd_;X0HM:R?;=!_A&He1a=c3>-d24sJW=6nU`<aFI,MZ%6U&tLP)\UthY6PI=YR^IuU6!A-&>gus8SU4V5p.W[a`rBJ:%QEY35&'&aY_8uka@,:`Z<6g%g<d4&;6e9K)b:@NsFPS&#DW!b;0PJD$\Qs<<sjYX?cV1WIVV5+&PW62G#>rfYS]oEbXFfOWEBfcI+GUM6jG4b-MGFQ!KY.3G=:%nRaU9;`'4L'-<WS9&/93M(eVB?MCl1iua=*Q-5;rjW^0gf6OZj/JkgN\h*Mn;@DDT(;SmLNk*[$(gorSC&1]m-g$^m>RPp4M?@=a_JD#_#UP$8MS%pua]b<?VbmNr?]`WJ'Zc956*(^2&X$o8pOa/dQ&$cj%aPU3IMA%O6R8!0(`12eHkVOb\P&u"J0pEc#[J0@dO\PI=5EC/H$ [...]
+endstream
+endobj
+65 0 obj
+<< /Type /Page
+/Parent 1 0 R
+/MediaBox [ 0 0 594 842 ]
+/Resources 3 0 R
+/Contents 64 0 R
+>>
+endobj
+66 0 obj
+<< /Length 1163 /Filter [ /ASCII85Decode /FlateDecode ]
+ >>
+stream
+Gb!#Z95iQE&AJ$C&3dK,e)^!A&o\79Xg=Kc[n^dWJR[Ad@`sT/^K.dIjPTE&Ugc&V2KdEbg7TN%kF7lXAiOk"G5>:1=K4p'kV1.M3l<UAQnma*_[44>-fDF`,f3FeQDA<epFAubL"GB98cM$a6+D*d#Z?jbN(T<i<,qD*dtdlF?f)RP?!\KlVKq]K3QiLA38kEF)E)gk!%Ns"=S2XfWq-8;n=^L_:$':fS"h,+I\K(>cFma>V)3nArI?ULE@Jo;`asn##KfJRi;V[Kggr9Ho5MSFf$PqUF,SoVK/IU?N!u'C=RE$]D:%@JGU.4?L$a1,ZBHlBZaf,u-hie#2YT=B%%+rPO%"_$\*s$%bqL4P@7nX(YS<IFfT=__:c/GOh/d5TcpoPqNY']R<<Yl@mnbHH)ALCk5q4=N2dA-dpKBnM#;bNP@bm5!U*B>'^]N%/SeC^p8"?)ugp<+IW-P0Wp,5I$:8f8.[i+$l@[l:S.GM(8G- [...]
+endstream
+endobj
+67 0 obj
+<< /Type /Page
+/Parent 1 0 R
+/MediaBox [ 0 0 594 842 ]
+/Resources 3 0 R
+/Contents 66 0 R
+>>
+endobj
+68 0 obj
+<< /Length 1946 /Filter [ /ASCII85Decode /FlateDecode ]
+ >>
+stream
+Gb!#]hf%7-&:Vr4+lk'Q<e`_7P_^n3g+HN4F=Yo\)iA2;Z7KQ.*%SAOAc;(A'M4.GW7Z"^cif(TMKc^?r4\ruI!0OMbn<InA6,=!6BbQ/?]`Yl:Mrs16LgZoO;"M>,iab1:s&&Vq>H87oK;poRCu'!4CM.2U'a[GV*ptM:/V9ck%4.'SihQTa2qu#VNYX!""QT>gLpU14;UHpq>1*g8AIV=,eBO.+/U6u>qSH@_$P16%n(V9s8-62gf==7h5C6ro<@X9[ajN4AQaH=LHeKM1KJ_CVF2^C3!!T2pDp(QT-d@0d$`Hd.AaDIPY(eunY>R4TXi5q*1>j]6I-#,Zu_3X>o7ifNo]kl_J-G/TfuZ!B'W;W)u*57A,+H;ejb_7VS;K@I(/EUrC*Af@I/-f0GU[hjjT>Db4sM%Y%(YO7]l@(HI&*gp$n0K2J,`Z5/S)_PbaD];lECo4q*neAh`56cl+tQ_u,&#PVs@g(YtY!\CLjS\` [...]
+endstream
+endobj
+69 0 obj
+<< /Type /Page
+/Parent 1 0 R
+/MediaBox [ 0 0 594 842 ]
+/Resources 3 0 R
+/Contents 68 0 R
+>>
+endobj
+70 0 obj
+<< /Length 212 /Filter [ /ASCII85Decode /FlateDecode ]
+ >>
+stream
+GarW3Ymu@N%#4M'MN0AmgN!PSW::Q1OTZRC`5tCphg^p4%:!@(ohYQ??h\<D7tqW_oOS<),$2\:0[RH@NmL,S"g&Tf&)8s1Qc#\2`aU"1Rf8W.g?7r*4o`#5h85`Q:IAo:6!/@:<UI%*+5*sb7OO&Ks(\u/n[u4VE@aL9d:lUZ^P!l%7+*0#?'j>6HYRXrUG.G])@fUuW;-MHDEmR~>
+endstream
+endobj
+71 0 obj
+<< /Type /Page
+/Parent 1 0 R
+/MediaBox [ 0 0 594 842 ]
+/Resources 3 0 R
+/Contents 70 0 R
+>>
+endobj
+72 0 obj
+<< /Length 1223 /Filter [ /ASCII85Decode /FlateDecode ]
+ >>
+stream
+Gb!#[95i<6&AIm?pdTV/Z,^hs9;k`#b=dX`1u\QVZIu$WWD-F:p;"G`NlR/#mt1[.lmhS/4l^g9o/V8&SNVJIM5$/4h&2uH</hrl@'V&%B:L[SjTJ2uPpD&[<.Q7D"8Qu_Bmr@^Om9X:5nKV,?+i\",oOt7:.Z`:X&BJ.iRrFY`X)lL92&N#!%Q.8.b"Fd'.*\h,Tna4>.PQNRo_P"'';?CcNN>^ag[>#c*6#0OA!sT0QQ"ZgZ_Mg2qoFd9tQjkR\B3$GE:L)[iYB2D11:GH'a2*lY^MW3)uBKeI0BA`u(lMf]Z0s][`(m^Ip`PH<f0HTgo[jGCE0X8in:-b$N^<^5QYBPV[LSBVi,&5_QH`jZ,h8k`>7D*6WcY@miuU'j(67U#l!8[n\1@c005HBD,BbWbAOl1uoKAL[ILeJ6$47FeRs;Qk(fSJIEPV.2L3RA<<L<S;.)%g<4==,8fG:1Yo*#l0?U!IUcFND^]J)KaYa\"U [...]
+endstream
+endobj
+73 0 obj
+<< /Type /Page
+/Parent 1 0 R
+/MediaBox [ 0 0 594 842 ]
+/Resources 3 0 R
+/Contents 72 0 R
+>>
+endobj
+74 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F3
+/BaseFont /Helvetica-Bold
+/Encoding /WinAnsiEncoding >>
+endobj
+75 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F1
+/BaseFont /Helvetica
+/Encoding /WinAnsiEncoding >>
+endobj
+76 0 obj
+<< /Type /FontDescriptor
+/FontName /1Ef4f2Garamond
+/FontBBox  [-138 -306 1062 986] 
+/Flags 33
+/CapHeight 639
+/Ascent 986
+/Descent -306
+/ItalicAngle 0
+/StemV 0
+/FontFile2 77 0 R
+/MissingWidth 500
+
+ >>
+endobj
+77 0 obj
+<< /Length 27890 /Filter [ /ASCII85Decode /FlateDecode ]
+ /Length1 28676 >>
+stream
+Gas`*$!\Fih)@MRHgg6%h$5&/#pbT4#p^"K6d#qY#)k9+*!TmlA&gJ/)r%pFBubB0g,+"W]-ON5oLXq2Mkkc)Vm"i&D4\abT-eF'k-=O-8c,lkFe?6Zg;`X-XM@E"kC*?%^VoK_cH`S9B7@nqG:W^q!!Ei6'H#]4J"Oct5s#';!rtJHRbGLQDo\Oh!-T18Dqi"lqU*3q[;?,`\.=,+43+dHhYQLt^u?k,JP4Z5mZ9L!eH#@N/idFRpDs1"%ohT_8%;gW283Y.\-:@^@(:d[mG<4E7K47p!5RLNI8=Tu>O(7p^_m-j=7C/-1EcFH*02*65Oe6*^?X#e!tWACB6;29&TI"Nj$S`kXrcVAj"@<,!S&t+fs:'RI3/IgQ]%1Gs3BN1h#GKoRU'g(j[/ujl!rEK>gru)c6u?#6Q88oF5>7dEM!c.<qJ829:]4s67JQ;^'R2R)H=!cOMbm:q@.QO`6atrKZDd90`]OMKBTdPJpIuAd5 [...]
+endstream
+endobj
+78 0 obj
+<< /Type /Font
+/Subtype /Type0
+/Name /F15
+/BaseFont /1Ef4f2Garamond
+/Encoding /Identity-H
+/DescendantFonts [ 79 0 R ]  >>
+endobj
+79 0 obj
+<< /Type /Font
+/BaseFont /1Ef4f2Garamond 
+/Subtype /CIDFontType2
+/CIDSystemInfo << /Registry (Adobe)/Ordering (UCS)/Supplement 0 >>
+/FontDescriptor 76 0 R
+/DW 0
+/W [ 0 [750 0 250 250 614 510 416 656 291 677 510 510 333 468 406 229 562 770 666 468 354 510 229 218 364 447 312 322 416 489 416 656 458 510 218 500 833 885 354 427 218 635 291 291 572 479 562 177 760 229 697 770 781 770 625 770 468 333 468 500 614 ] ] 
+>>
+endobj
+80 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F9
+/BaseFont /Courier
+/Encoding /WinAnsiEncoding >>
+endobj
+1 0 obj
+<< /Type /Pages
+/Count 17
+/Kids [6 0 R 8 0 R 10 0 R 35 0 R 37 0 R 39 0 R 41 0 R 50 0 R 52 0 R 54 0 R 56 0 R 58 0 R 65 0 R 67 0 R 69 0 R 71 0 R 73 0 R ] >>
+endobj
+2 0 obj
+<< /Type /Catalog
+/Pages 1 0 R
+ >>
+endobj
+3 0 obj
+<< 
+/Font << /F3 74 0 R /F1 75 0 R /F15 78 0 R /F9 80 0 R >> 
+/ProcSet [ /PDF /ImageC /Text ] >> 
+endobj
+13 0 obj
+<<
+/S /GoTo
+/D [37 0 R /XYZ 45.4 711.7 null]
+>>
+endobj
+15 0 obj
+<<
+/S /GoTo
+/D [39 0 R /XYZ 45.4 711.7 null]
+>>
+endobj
+17 0 obj
+<<
+/S /GoTo
+/D [41 0 R /XYZ 45.4 711.7 null]
+>>
+endobj
+19 0 obj
+<<
+/S /GoTo
+/D [50 0 R /XYZ 45.4 711.7 null]
+>>
+endobj
+21 0 obj
+<<
+/S /GoTo
+/D [54 0 R /XYZ 45.4 711.7 null]
+>>
+endobj
+23 0 obj
+<<
+/S /GoTo
+/D [56 0 R /XYZ 45.4 711.7 null]
+>>
+endobj
+25 0 obj
+<<
+/S /GoTo
+/D [58 0 R /XYZ 45.4 711.7 null]
+>>
+endobj
+27 0 obj
+<<
+/S /GoTo
+/D [65 0 R /XYZ 45.4 711.7 null]
+>>
+endobj
+29 0 obj
+<<
+/S /GoTo
+/D [67 0 R /XYZ 45.4 711.7 null]
+>>
+endobj
+31 0 obj
+<<
+/S /GoTo
+/D [69 0 R /XYZ 45.4 711.7 null]
+>>
+endobj
+33 0 obj
+<<
+/S /GoTo
+/D [73 0 R /XYZ 45.4 711.7 null]
+>>
+endobj
+44 0 obj
+<<
+/S /GoTo
+/D [null /XYZ 0.0 0.0 null]
+>>
+endobj
+46 0 obj
+<<
+/S /GoTo
+/D [null /XYZ 0.0 0.0 null]
+>>
+endobj
+48 0 obj
+<<
+/S /GoTo
+/D [null /XYZ 0.0 0.0 null]
+>>
+endobj
+61 0 obj
+<<
+/S /GoTo
+/D [null /XYZ 0.0 0.0 null]
+>>
+endobj
+63 0 obj
+<<
+/S /GoTo
+/D [null /XYZ 0.0 0.0 null]
+>>
+endobj
+xref
+0 81
+0000000000 65535 f 
+0000051603 00000 n 
+0000051773 00000 n 
+0000051823 00000 n 
+0000000015 00000 n 
+0000000071 00000 n 
+0000000502 00000 n 
+0000000608 00000 n 
+0000000719 00000 n 
+0000000825 00000 n 
+0000001913 00000 n 
+0000002035 00000 n 
+0000002132 00000 n 
+0000051936 00000 n 
+0000002265 00000 n 
+0000052000 00000 n 
+0000002401 00000 n 
+0000052064 00000 n 
+0000002537 00000 n 
+0000052128 00000 n 
+0000002673 00000 n 
+0000052192 00000 n 
+0000002809 00000 n 
+0000052256 00000 n 
+0000002945 00000 n 
+0000052320 00000 n 
+0000003081 00000 n 
+0000052384 00000 n 
+0000003216 00000 n 
+0000052448 00000 n 
+0000003352 00000 n 
+0000052512 00000 n 
+0000003488 00000 n 
+0000052576 00000 n 
+0000003621 00000 n 
+0000003936 00000 n 
+0000004044 00000 n 
+0000005214 00000 n 
+0000005322 00000 n 
+0000006502 00000 n 
+0000006610 00000 n 
+0000007575 00000 n 
+0000007698 00000 n 
+0000007739 00000 n 
+0000052640 00000 n 
+0000007874 00000 n 
+0000052699 00000 n 
+0000008010 00000 n 
+0000052758 00000 n 
+0000008146 00000 n 
+0000010295 00000 n 
+0000010403 00000 n 
+0000012308 00000 n 
+0000012416 00000 n 
+0000013366 00000 n 
+0000013474 00000 n 
+0000014492 00000 n 
+0000014600 00000 n 
+0000015529 00000 n 
+0000015652 00000 n 
+0000015686 00000 n 
+0000052817 00000 n 
+0000015822 00000 n 
+0000052876 00000 n 
+0000015958 00000 n 
+0000017033 00000 n 
+0000017141 00000 n 
+0000018397 00000 n 
+0000018505 00000 n 
+0000020544 00000 n 
+0000020652 00000 n 
+0000020956 00000 n 
+0000021064 00000 n 
+0000022380 00000 n 
+0000022488 00000 n 
+0000022601 00000 n 
+0000022709 00000 n 
+0000022925 00000 n 
+0000050924 00000 n 
+0000051062 00000 n 
+0000051497 00000 n 
+trailer
+<<
+/Size 81
+/Root 2 0 R
+/Info 4 0 R
+>>
+startxref
+52935
+%%EOF
diff --git a/fulcrum-yaafi-crypto-1.0.7/src/test/data/plain.txt b/fulcrum-yaafi-crypto-1.0.7/src/test/data/plain.txt
new file mode 100644
index 0000000..1612967
--- /dev/null
+++ b/fulcrum-yaafi-crypto-1.0.7/src/test/data/plain.txt
@@ -0,0 +1,254 @@
+# -------------------------------------------------------------------
+# Copyright 2001-2004 The Apache Software Foundation.
+# 
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+# 
+#      http://www.apache.org/licenses/LICENSE-2.0
+#  
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+# -------------------------------------------------------------------
+
+# -------------------------------------------------------------------
+# D E F A U L T  M A V E N  P R O P E R T I E S
+# -------------------------------------------------------------------
+# These are the properties that we believe are immutable so we
+# keep them apart from the project specific properties.
+# -------------------------------------------------------------------
+
+# Properties for the dashboard reactor
+# ------------------------------------
+
+maven.dashboard.basedir=${basedir}
+maven.dashboard.includes=*/project.xml
+maven.dashboard.excludes=**/target/**/project.xml
+maven.dashboard.ignoreFailures=false
+
+# Generated dashboard xml data file
+maven.dashboard.report.xml = ${maven.build.dir}/dashboard-data.xml
+
+# Generated dashboard main report xdoc file name (without the extension). 
+# Note: The value must not include any path as the xdoc will be 
+# generated in ${maven.gen.docs}.
+maven.dashboard.report.xdoc = dashboard-report
+
+# Generated dashboard legend xdoc file name (without the extension). 
+# Note: The value must not include any path as the xdoc will be 
+# generated in ${maven.gen.docs}.
+maven.dashboard.report.legend.xdoc = dashboard-report-legend
+
+# Location of JSL template to generate the main report xdoc file
+maven.dashboard.template = ${plugin.resources}/templates/dashboard.jsl
+
+# Location of JSL template to generate the legend report xdoc file
+maven.dashboard.template.legend = ${plugin.resources}/templates/legend.jsl
+
+# Decide whether a call to dashboard:report will call the reactor
+# on the child projects to generate individual dashboard data. If you
+# already using the multiproject project or the reactor, a better option
+# is to add dashboard:report-single to the list of goals you're running.
+# In which case, you'll need to set the following property to false
+# (otherwise the reactor will be run again on your child projects).
+maven.dashboard.runreactor = true
+
+# If false, do not show projects for which gathered data is empty for all
+# aggregators.
+maven.dashboard.report.showempty = true
+
+# Images used when generating the progress bar for the dashboard HTML color
+# for left bar
+maven.dashboard.report.bar.left = green
+
+# HTML color for right bar
+maven.dashboard.report.bar.right = red
+
+# Image to set cells with (should be transparent)
+maven.dashboard.report.bar.image = images/trans.gif
+maven.dashboard.report.bar.height = 10
+maven.dashboard.report.bar.border = 0
+maven.dashboard.report.bar.displayLabel = true
+
+# Properties for gathering dashboard data for a single project
+# ------------------------------------------------------------
+
+# Location of default dashboard aggregators
+maven.dashboard.aggregators.dir = ${plugin.resources}/aggregators
+
+# Comma-separated list of aggregators to use
+maven.dashboard.aggregators = cserrors,cswarnings,clovertpc,cloverloc,cloverncloc
+
+# Generated dashboard data for a single project
+maven.dashboard.report.single = ${maven.build.dir}/dashboard-single.xml
+
+# Decide whether to call goals associated with report types or not
+maven.dashboard.rungoals = true
+
+# Default aggregators
+# -------------------
+
+# Properties for the Checkstyle files aggregator
+maven.dashboard.aggregator.csfiles.script = ${maven.dashboard.aggregators.dir}/csfiles.jelly
+maven.dashboard.aggregator.csfiles.artifact = ${maven.build.dir}/checkstyle-raw-report.xml
+maven.dashboard.aggregator.csfiles.label = CS Files
+maven.dashboard.aggregator.csfiles.goal = checkstyle
+maven.dashboard.aggregator.csfiles.description = Number of files checked with Checkstyle
+
+# Properties for the Checkstyle error/warning aggregator (all errors/warnings)
+maven.dashboard.aggregator.csall.script = ${maven.dashboard.aggregators.dir}/csall.jelly
+maven.dashboard.aggregator.csall.artifact = ${maven.build.dir}/checkstyle-raw-report.xml
+maven.dashboard.aggregator.csall.label = CS err/warn
+maven.dashboard.aggregator.csall.goal = checkstyle
+maven.dashboard.aggregator.csall.description = Number of Checkstyle errors and warnings
+
+# Properties for the Checkstyle error aggregator (only errors)
+maven.dashboard.aggregator.cserrors.script = ${maven.dashboard.aggregators.dir}/cserrors.jelly
+maven.dashboard.aggregator.cserrors.artifact = ${maven.build.dir}/checkstyle-raw-report.xml
+maven.dashboard.aggregator.cserrors.label = CS errors
+maven.dashboard.aggregator.cserrors.goal = checkstyle
+maven.dashboard.aggregator.cserrors.description = Number of Checkstyle errors
+
+# Properties for the Checkstyle warning aggregator (only warnings)
+maven.dashboard.aggregator.cswarnings.script = ${maven.dashboard.aggregators.dir}/cswarnings.jelly
+maven.dashboard.aggregator.cswarnings.artifact = ${maven.build.dir}/checkstyle-raw-report.xml
+maven.dashboard.aggregator.cswarnings.label = CS warnings
+maven.dashboard.aggregator.cswarnings.goal = checkstyle
+maven.dashboard.aggregator.cswarnings.description = Number of Checkstyle warnings
+
+# Properties for the Clover TPC aggregator (TPC = Total Percent Coverage)
+maven.dashboard.aggregator.clovertpc.script = ${maven.dashboard.aggregators.dir}/clovertpc.jelly
+maven.dashboard.aggregator.clovertpc.artifact = ${maven.build.dir}/clover.xml
+maven.dashboard.aggregator.clovertpc.label = Clover TPC
+maven.dashboard.aggregator.clovertpc.goal = clover
+maven.dashboard.aggregator.clovertpc.description = Number of test coverage percentage
+
+# Properties for the Clover LOC aggregator (LOC = Line Of Code)
+maven.dashboard.aggregator.cloverloc.script = ${maven.dashboard.aggregators.dir}/cloverloc.jelly
+maven.dashboard.aggregator.cloverloc.artifact = ${maven.build.dir}/clover.xml
+maven.dashboard.aggregator.cloverloc.label = Clover LOC
+maven.dashboard.aggregator.cloverloc.goal = clover
+maven.dashboard.aggregator.cloverloc.description = Number of line of code (including comments)
+
+# Properties for the Clover NCLOC aggregator (NCLOC = Non Comment Line Of Code)
+maven.dashboard.aggregator.cloverncloc.script = ${maven.dashboard.aggregators.dir}/cloverncloc.jelly
+maven.dashboard.aggregator.cloverncloc.artifact = ${maven.build.dir}/clover.xml
+maven.dashboard.aggregator.cloverncloc.label = Clover NCLOC
+maven.dashboard.aggregator.cloverncloc.goal = clover
+maven.dashboard.aggregator.cloverncloc.description = Number of non-commented lines of code
+
+# Properties for the JUnit Test aggregator 
+maven.dashboard.aggregator.junittests.script = ${maven.dashboard.aggregators.dir}/junittests.jelly
+maven.dashboard.aggregator.junittests.artifact = ${maven.build.dir}/TESTS-TestSuites.xml
+maven.dashboard.aggregator.junittests.label = JUnit Tests
+maven.dashboard.aggregator.junittests.goal = junit-report:report
+maven.dashboard.aggregator.junittests.description = Number of JUnit tests
+
+# Properties for the JUnit Failures aggregator 
+maven.dashboard.aggregator.junitfailures.script = ${maven.dashboard.aggregators.dir}/junitfailures.jelly
+maven.dashboard.aggregator.junitfailures.artifact = ${maven.build.dir}/TESTS-TestSuites.xml
+maven.dashboard.aggregator.junitfailures.label = JUnit Failures
+maven.dashboard.aggregator.junitfailures.goal = junit-report:report
+maven.dashboard.aggregator.junitfailures.description = Number of JUnit test failures
+
+# Properties for the JUnit Errors aggregator 
+maven.dashboard.aggregator.juniterrors.script = ${maven.dashboard.aggregators.dir}/juniterrors.jelly
+maven.dashboard.aggregator.juniterrors.artifact = ${maven.build.dir}/TESTS-TestSuites.xml
+maven.dashboard.aggregator.juniterrors.label = JUnit Errors
+maven.dashboard.aggregator.juniterrors.goal = junit-report:report
+maven.dashboard.aggregator.juniterrors.description = Number of JUnit test errors
+
+# Properties for the JUnit Pass Rate aggregator 
+maven.dashboard.aggregator.junitpassrate.script = ${maven.dashboard.aggregators.dir}/junitpassrate.jelly
+maven.dashboard.aggregator.junitpassrate.artifact = ${maven.build.dir}/TESTS-TestSuites.xml
+maven.dashboard.aggregator.junitpassrate.label = JUnit Pass Rate
+maven.dashboard.aggregator.junitpassrate.goal = junit-report:report
+maven.dashboard.aggregator.junitpassrate.description = Percentage of JUnit tests that have passed vs tests in error or failed
+
+# Properties for the PMD violations aggregator 
+maven.dashboard.aggregator.pmdfiles.script = ${maven.dashboard.aggregators.dir}/pmdfiles.jelly
+maven.dashboard.aggregator.pmdfiles.artifact = ${maven.build.dir}/pmd-raw-report.xml
+maven.dashboard.aggregator.pmdfiles.label = PMD Files with Violations
+maven.dashboard.aggregator.pmdfiles.goal = pmd:report
+maven.dashboard.aggregator.pmdfiles.description = Number of files with PMD violations
+
+# Properties for the PMD violations aggregator 
+maven.dashboard.aggregator.pmdviolations.script = ${maven.dashboard.aggregators.dir}/pmdviolations.jelly
+maven.dashboard.aggregator.pmdviolations.artifact = ${maven.build.dir}/pmd-raw-report.xml
+maven.dashboard.aggregator.pmdviolations.label = PMD Violations
+maven.dashboard.aggregator.pmdviolations.goal = pmd:report
+maven.dashboard.aggregator.pmdviolations.description = Number of PMD violations
+
+# Properties for the Simian duplicate lines aggregator 
+maven.dashboard.aggregator.simiantdl.script = ${maven.dashboard.aggregators.dir}/simiantdl.jelly
+maven.dashboard.aggregator.simiantdl.artifact = ${maven.build.dir}/generated-xdocs/simian-report.xml
+maven.dashboard.aggregator.simiantdl.label = Simian TDL
+maven.dashboard.aggregator.simiantdl.goal = maven-simian-plugin:report
+maven.dashboard.aggregator.simiantdl.description = Simian Total Duplicate Lines
+
+# Properties for the JCoverage covered lines percent aggregator 
+maven.dashboard.aggregator.jcoveragelipc.script = ${maven.dashboard.aggregators.dir}/jcoveragelipc.jelly
+maven.dashboard.aggregator.jcoveragelipc.artifact = ${maven.build.dir}/jcoverage/coverage.xml
+maven.dashboard.aggregator.jcoveragelipc.label = JCoverage %lines
+maven.dashboard.aggregator.jcoveragelipc.goal = maven-jcoverage-plugin:report
+maven.dashboard.aggregator.jcoveragelipc.description = JCoverage covered lines percentile
+
+# Properties for the JCoverage total lines aggregator 
+maven.dashboard.aggregator.jcoverageloc.script = ${maven.dashboard.aggregators.dir}/jcoverageloc.jelly
+maven.dashboard.aggregator.jcoverageloc.artifact = ${maven.build.dir}/jcoverage/coverage.xml
+maven.dashboard.aggregator.jcoverageloc.label = JCoverage LOC
+maven.dashboard.aggregator.jcoverageloc.goal = maven-jcoverage-plugin:report
+maven.dashboard.aggregator.jcoverageloc.description = JCoverage total lines of code
+
+# Properties for the FindBugs file violations aggregator 
+maven.dashboard.aggregator.fbfiles.script = ${maven.dashboard.aggregators.dir}/fbfiles.jelly
+maven.dashboard.aggregator.fbfiles.artifact = ${maven.build.dir}/findbugs-raw-report.xml
+maven.dashboard.aggregator.fbfiles.label = FindBugs Files with Violations
+maven.dashboard.aggregator.fbfiles.goal = maven-findbugs-plugin:report
+maven.dashboard.aggregator.fbfiles.description = Number of files with FindBugs violations
+
+# Properties for the FindBugs violations aggregator 
+maven.dashboard.aggregator.fbviolations.script = ${maven.dashboard.aggregators.dir}/fbviolations.jelly
+maven.dashboard.aggregator.fbviolations.artifact = ${maven.build.dir}/findbugs-raw-report.xml
+maven.dashboard.aggregator.fbviolations.label = FindBugs Violations
+maven.dashboard.aggregator.fbviolations.goal = maven-findbugs-plugin:report
+maven.dashboard.aggregator.fbviolations.description = Number of FindBugs violations
+
+# Classes Tasks aggregator
+maven.dashboard.aggregator.tasklistclass.script = ${maven.dashboard.aggregators.dir}/task-list-classes.jelly
+maven.dashboard.aggregator.tasklistclass.artifact = ${maven.build.dir}/generated-xdocs/task-list.xml
+maven.dashboard.aggregator.tasklistclass.label = Classes Tasks 
+maven.dashboard.aggregator.tasklistclass.goal = maven-tasklist-plugin:report
+maven.dashboard.aggregator.tasklistclass.description = Total number of classes with task definition (@todo tag).
+
+# Methods Tasks aggregator
+maven.dashboard.aggregator.tasklistmethod.script = ${maven.dashboard.aggregators.dir}/task-list-methods.jelly
+maven.dashboard.aggregator.tasklistmethod.artifact = ${maven.build.dir}/generated-xdocs/task-list.xml
+maven.dashboard.aggregator.tasklistmethod.label = Methods Tasks 
+maven.dashboard.aggregator.tasklistmethod.goal = maven-tasklist-plugin:report
+maven.dashboard.aggregator.tasklistmethod.description = Total number of methods with task definition (@todo tag).
+
+# All Tasks aggregator
+maven.dashboard.aggregator.tasklist.script = ${maven.dashboard.aggregators.dir}/task-list-all.jelly
+maven.dashboard.aggregator.tasklist.artifact = ${maven.build.dir}/generated-xdocs/task-list.xml
+maven.dashboard.aggregator.tasklist.label = All Tasks 
+maven.dashboard.aggregator.tasklist.goal = maven-tasklist-plugin:report
+maven.dashboard.aggregator.tasklist.description = Total number of task definition (@todo tag).
+
+# Changed log: total number of scm changed files aggregator
+maven.dashboard.aggregator.scmchangedfiles.script = ${maven.dashboard.aggregators.dir}/scmchangedfiles.jelly
+maven.dashboard.aggregator.scmchangedfiles.artifact = ${maven.build.dir}/changelog.xml
+maven.dashboard.aggregator.scmchangedfiles.label = SCM Changed Files
+maven.dashboard.aggregator.scmchangedfiles.goal = maven-changelog-plugin:report
+maven.dashboard.aggregator.scmchangedfiles.description = Total number of changed files in scm.
+
+# Changed log: total number of scm commit aggregator
+maven.dashboard.aggregator.scmchangedcommit.script = ${maven.dashboard.aggregators.dir}/scmchangedcommit.jelly
+maven.dashboard.aggregator.scmchangedcommit.artifact = ${maven.build.dir}/changelog.xml
+maven.dashboard.aggregator.scmchangedcommit.label = SCM commits
+maven.dashboard.aggregator.scmchangedcommit.goal = maven-changelog-plugin:report
+maven.dashboard.aggregator.scmchangedcommit.description = Total number of scm commit.
+
diff --git a/fulcrum-yaafi-crypto-1.0.7/src/test/data/plain.xml b/fulcrum-yaafi-crypto-1.0.7/src/test/data/plain.xml
new file mode 100644
index 0000000..8890c58
--- /dev/null
+++ b/fulcrum-yaafi-crypto-1.0.7/src/test/data/plain.xml
@@ -0,0 +1,56 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements.  See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership.  The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License.  You may obtain a copy of the License at
+ 
+ http://www.apache.org/licenses/LICENSE-2.0
+ 
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied.  See the License for the
+ specific language governing permissions and limitations
+ under the License.
+-->
+
+<role-list>
+ <!-- Use minimal role entry -->
+ <role
+  name="org.apache.fulcrum.yaafi.service.servicemanager.ServiceManagerService"
+  default-class="org.apache.fulcrum.yaafi.service.servicemanager.ServiceManagerServiceImpl"
+ />
+ <!-- For the rest of the services use a full-blown role entry -->
+ <role
+  name="org.apache.fulcrum.yaafi.service.systemproperty.SystemPropertyService"
+  shorthand="SystemPropertyService"
+  default-class="org.apache.fulcrum.yaafi.service.systemproperty.SystemPropertyServiceImpl"
+  early-init="true"
+  description="ÜÖÄüöäß"
+ />
+ <!--
+  This ReconfigurationService is instantiated during the first access. Until
+  then it is doing nothing.
+ -->
+ <role
+  name="org.apache.fulcrum.yaafi.service.reconfiguration.ReconfigurationService"
+  shorthand="ReconfigurationService"
+  default-class="org.apache.fulcrum.yaafi.service.reconfiguration.ReconfigurationServiceImpl"
+  early-init="false"
+  component-type="avalon"
+  component-flavour="yaafi"
+  description="Monitors the componentConfiguration.xml to reconfigure YAAFI"
+ />
+ <role
+  name="org.apache.fulcrum.yaafi.TestComponent"
+  shorthand="test"
+  default-class="org.apache.fulcrum.yaafi.TestComponentImpl"
+  early-init="true"
+  component-type="merlin"
+  description="A simple test component"
+ />
+</role-list>
\ No newline at end of file
diff --git a/fulcrum-yaafi-crypto-1.0.7/src/test/data/plain.zip b/fulcrum-yaafi-crypto-1.0.7/src/test/data/plain.zip
new file mode 100644
index 0000000..37ddfc5
Binary files /dev/null and b/fulcrum-yaafi-crypto-1.0.7/src/test/data/plain.zip differ
diff --git a/fulcrum-yaafi-crypto-1.0.7/src/test/org/apache/fulcrum/jce/crypto/CryptoUtilTest.java b/fulcrum-yaafi-crypto-1.0.7/src/test/org/apache/fulcrum/jce/crypto/CryptoUtilTest.java
new file mode 100644
index 0000000..2d59bc5
--- /dev/null
+++ b/fulcrum-yaafi-crypto-1.0.7/src/test/org/apache/fulcrum/jce/crypto/CryptoUtilTest.java
@@ -0,0 +1,302 @@
+package org.apache.fulcrum.jce.crypto;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+
+import junit.framework.TestCase;
+
+/**
+ * Test suite for crypto functionality
+ *
+ * @author <a href="mailto:siegfried.goeschl@it20one.at">Siegfried Goeschl</a>
+ */
+
+public class CryptoUtilTest extends TestCase
+{
+    /** the password to be used */
+    private String password;
+
+    /** the test data directory */
+    private File testDataDirectory;
+
+    /** the temp data director */
+    private File tempDataDirectory;
+
+    /**
+     * Constructor
+     * @param name the name of the test case
+     */
+    public CryptoUtilTest( String name )
+    {
+        super(name);
+
+        this.password = "mysecret";
+        this.testDataDirectory = new File( "./src/test/data" );
+        this.tempDataDirectory = new File( "./target/temp" );
+        this.tempDataDirectory.mkdirs();
+    }
+
+    /**
+     * @see junit.framework.TestCase#setUp()
+     *         byte[] salt,
+        int count,
+        String algorithm,
+        String providerName )
+
+     */
+    protected void setUp() throws Exception
+    {
+        CryptoStreamFactoryImpl factory = new CryptoStreamFactoryImpl(
+            CryptoParameters.SALT,
+            CryptoParameters.COUNT
+            );
+
+        CryptoStreamFactoryImpl.setInstance( factory );
+    }
+
+    /**
+     * @return Returns the password.
+     */
+    protected char[] getPassword()
+    {
+        return password.toCharArray();
+    }
+
+    /**
+     * @return Returns the tempDataDirectory.
+     */
+    protected File getTempDataDirectory()
+    {
+        return tempDataDirectory;
+    }
+
+    /**
+     * @return Returns the testDataDirectory.
+     */
+    protected File getTestDataDirectory()
+    {
+        return testDataDirectory;
+    }
+
+    /** Encrypt a text file */
+    public void testTextEncryption() throws Exception
+    {
+        File sourceFile = new File( this.getTestDataDirectory(), "plain.txt" );
+        File targetFile = new File( this.getTempDataDirectory(), "plain.enc.txt" );
+        CryptoUtil.encrypt( sourceFile, targetFile, this.getPassword() );
+    }
+
+    /** Decrypt a text file */
+    public void testTextDecryption() throws Exception
+    {
+        testTextEncryption();
+        File sourceFile = new File( this.getTempDataDirectory(), "plain.enc.txt" );
+        File targetFile = new File( this.getTempDataDirectory(), "plain.dec.txt" );
+        CryptoUtil.decrypt( sourceFile, targetFile.getAbsolutePath(), this.getPassword() );
+    }
+
+    /** Encrypt an empty text file */
+    public void testEmptyTextEncryption() throws Exception
+    {
+        File sourceFile = new File( this.getTestDataDirectory(), "empty.txt" );
+        File targetFile = new File( this.getTempDataDirectory(), "empty.enc.txt" );
+        CryptoUtil.encrypt( sourceFile, targetFile, this.getPassword() );
+    }
+
+    /** Decrypt a text file */
+    public void testEmptyTextDecryption() throws Exception
+    {
+        testEmptyTextEncryption();
+        File sourceFile = new File( this.getTempDataDirectory(), "empty.enc.txt" );
+        File targetFile = new File( this.getTempDataDirectory(), "empty.dec.txt" );
+        CryptoUtil.decrypt( sourceFile, targetFile, this.getPassword() );
+    }
+
+    /** Encrypt a PDF file */
+    public void testPdfEncryption() throws Exception
+    {
+        File sourceFile = new File( this.getTestDataDirectory(), "plain.pdf" );
+        File targetFile = new File( this.getTempDataDirectory(), "plain.enc.pdf" );
+        CryptoUtil.encrypt( sourceFile, targetFile, this.getPassword() );
+    }
+
+    /** Decrypt a PDF file */
+    public void testPdfDecryption() throws Exception
+    {
+        testPdfEncryption();
+        File sourceFile = new File( this.getTempDataDirectory(), "plain.enc.pdf" );
+        File targetFile = new File( this.getTempDataDirectory(), "plain.dec.pdf" );
+        CryptoUtil.decrypt( sourceFile, targetFile, this.getPassword() );
+    }
+
+    /** Encrypt a ZIP file */
+    public void testZipEncryption() throws Exception
+    {
+        File sourceFile = new File( this.getTestDataDirectory(), "plain.zip" );
+        File targetFile = new File( this.getTempDataDirectory(), "plain.enc.zip" );
+        CryptoUtil.encrypt( sourceFile, targetFile, this.getPassword() );
+    }
+
+    /** Decrypt a ZIP file */
+    public void testZipDecryption() throws Exception
+    {
+        testZipEncryption();
+        File sourceFile = new File( this.getTempDataDirectory(), "plain.enc.zip" );
+        File targetFile = new File( this.getTempDataDirectory(), "plain.dec.zip" );
+        CryptoUtil.decrypt( sourceFile, targetFile, this.getPassword() );
+    }
+
+    /** Encrypt a UTF-16 XML file */
+    public void testXmlUTF16Encryption() throws Exception
+    {
+        File sourceFile = new File( this.getTestDataDirectory(), "plain-utf16.xml" );
+        File targetFile = new File( this.getTempDataDirectory(), "plain-utf16.enc.xml" );
+        CryptoUtil.encrypt( sourceFile, targetFile, this.getPassword() );
+    }
+
+    /** Decrypt a UTF-16 XML file */
+    public void testXMLUTF16Decryption() throws Exception
+    {
+        testXmlUTF16Encryption();
+        File sourceFile = new File( this.getTempDataDirectory(), "plain-utf16.enc.xml" );
+        File targetFile = new File( this.getTempDataDirectory(), "plain-utf16.dec.xml" );
+        CryptoUtil.decrypt( sourceFile, targetFile, this.getPassword() );
+    }
+
+    /** Encrypt a UTF-8 XML file */
+    public void testXmlUTF8Encryption() throws Exception
+    {
+        File sourceFile = new File( this.getTestDataDirectory(), "plain-utf8.xml" );
+        File targetFile = new File( this.getTempDataDirectory(), "plain-utf8.enc.xml" );
+        CryptoUtil.encrypt( sourceFile, targetFile, this.getPassword() );
+    }
+
+    /** Decrypt a UTF-8 XML file */
+    public void testXMLUTF8Decryption() throws Exception
+    {
+        testXmlUTF8Encryption();
+        File sourceFile = new File( this.getTempDataDirectory(), "plain-utf8.enc.xml" );
+        File targetFile = new File( this.getTempDataDirectory(), "plain-utf8.dec.xml" );
+        CryptoUtil.decrypt( sourceFile, targetFile, this.getPassword() );
+    }
+
+    /** Encrypt a ISO-8859-1 XML file */
+    public void testXmlISO88591Encryption() throws Exception
+    {
+        File sourceFile = new File( this.getTestDataDirectory(), "plain-iso-8859-1.xml" );
+        File targetFile = new File( this.getTempDataDirectory(), "plain-iso-8859-1.enc.xml" );
+        CryptoUtil.encrypt( sourceFile, targetFile, this.getPassword() );
+    }
+
+    /** Decrypt a UTF-8 XML file */
+    public void testXmlISO88591Decryption() throws Exception
+    {
+        testXmlISO88591Encryption();
+        File sourceFile = new File( this.getTempDataDirectory(), "plain-iso-8859-1.enc.xml" );
+        File targetFile = new File( this.getTempDataDirectory(), "plain-iso-8859-1.dec.xml" );
+        CryptoUtil.decrypt( sourceFile, targetFile, this.getPassword() );
+    }
+    /** Test encryption and decryption of Strings */
+    public void testStringEncryption() throws Exception
+    {
+        char[] testVector = new char[513];
+
+        for( int i=0; i<testVector.length; i++ )
+        {
+            testVector[i] = (char) i;
+        }
+
+        String source = new String( testVector );
+        String cipherText = CryptoUtil.encryptString( source, this.getPassword() );
+        String plainText = CryptoUtil.decryptString( cipherText, this.getPassword() );
+        assertEquals( source, plainText );
+    }
+
+    /** Test encryption and decryption of Strings */
+    public void testStringHandling() throws Exception
+    {
+        String source = "Nobody knows the toubles I have seen ...";
+        String cipherText = CryptoUtil.encryptString( source, this.getPassword() );
+        String plainText = CryptoUtil.decryptString( cipherText, this.getPassword() );
+        assertEquals( source, plainText );
+    }
+
+    /** Test encryption and decryption of binary data */
+    public void testBinaryHandling() throws Exception
+    {
+        byte[] source = new byte[256];
+        byte[] result = null;
+
+        for( int i=0; i<source.length; i++ )
+        {
+            source[i] = (byte) i;
+        }
+
+        ByteArrayOutputStream cipherText = new ByteArrayOutputStream();
+        ByteArrayOutputStream plainText = new ByteArrayOutputStream();
+
+        CryptoUtil.encrypt( source, cipherText, this.getPassword() );
+        CryptoUtil.decrypt( cipherText, plainText, this.getPassword() );
+
+        result = plainText.toByteArray();
+
+        for( int i=0; i<source.length; i++ )
+        {
+            if( source[i] != result[i] )
+            {
+                fail( "Binary data are different at position " + i );
+            }
+        }
+    }
+
+    /** Test creating a password */
+    public void testPasswordFactory() throws Exception
+    {
+        char[] result = null;
+        result = PasswordFactory.create();
+        System.out.println( new String(result) );
+        result = PasswordFactory.create( this.getPassword() );
+        System.out.println( new String(result) );        
+        assertNotNull(result);
+        return;
+    }
+
+    public void testHexConverter() throws Exception
+    {
+        String source = "DceuATAABWSaVTSIK";
+        String hexString = HexConverter.toString( source.getBytes() );
+        String result = new String( HexConverter.toBytes( hexString ) );
+        assertEquals( source, result );
+    }
+
+    /** Test encryption and decryption of Strings */
+    public void testPasswordEncryption() throws Exception
+    {
+        char[] password = "57cb-4a23-d838-45222".toCharArray();
+        String source = "e02c-3b76-ff1e-5d9a1";
+        String cipherText = CryptoUtil.encryptString( source, password );
+        String plainText = CryptoUtil.decryptString( cipherText, password );
+        assertEquals( source, plainText );
+    }
+
+}
diff --git a/fulcrum-yaafi-crypto-1.0.7/src/test/org/apache/fulcrum/jce/crypto/Main.java b/fulcrum-yaafi-crypto-1.0.7/src/test/org/apache/fulcrum/jce/crypto/Main.java
new file mode 100644
index 0000000..c4488ec
--- /dev/null
+++ b/fulcrum-yaafi-crypto-1.0.7/src/test/org/apache/fulcrum/jce/crypto/Main.java
@@ -0,0 +1,181 @@
+package org.apache.fulcrum.jce.crypto;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+
+/**
+ * Command line tool for encrypting/decrypting files
+ *
+ * file [enc|dec] passwd [file]*
+ * string [enc|dec] passwd plaintext
+ *
+ * @author <a href="mailto:siegfried.goeschl@it20one.at">Siegfried Goeschl</a>
+ */
+
+public class Main
+{
+    /**
+     * Allows testing on the command line.
+     * 
+     * @param args the command line parameters
+     */
+    public static void main( String[] args )
+    {
+        try
+        {
+            if( args.length < 3 )
+            {
+                printHelp();
+                throw new IllegalArgumentException("Invalid command line");
+            }
+
+            String operationMode = args[0];
+
+            if( operationMode.equals("file") )
+            {
+                processFiles(args);
+            }
+            else if( operationMode.equals("string") )
+            {
+                processString(args);
+            }
+        }
+        catch (Exception e)
+        {
+            System.out.println("Error : " + e.getMessage());
+        }
+    }
+
+    /**
+     * Prints usage information.
+     */
+    public static void printHelp()
+    {
+        System.out.println("Main file [enc|dec] passwd source [target]");
+        System.out.println("Main string [enc|dec] passwd ");
+    }
+
+    /**
+     * Decrypt/encrypt a list of files
+     * @param args the command line
+     * @throws Exception the operation failed
+     */
+    public static void processFiles(String[] args)
+        throws Exception
+    {
+        String cipherMode = args[1];
+        char[] password = args[2].toCharArray();
+        File sourceFile = new File(args[3]);
+        File targetFile = null;
+
+        if( args.length == 4 )
+        {
+            targetFile = sourceFile;
+        }
+        else
+        {
+            targetFile = new File(args[4]);
+            File parentFile = targetFile.getParentFile(); 
+
+            if(parentFile != null)
+            {
+                parentFile.mkdirs();
+            }
+        }
+
+        processFile(cipherMode,password,sourceFile,targetFile);
+    }
+
+    /**
+     * Decrypt/encrypt a single file
+     * @param cipherMode the mode
+     * @param password the passwors
+     * @param sourceFile the file to process
+     * @param targetFile the targetf file
+     * @throws Exception the operation failed
+     */
+    public static void processFile(String cipherMode, char[] password, File sourceFile, File targetFile)
+        throws Exception
+    {
+        FileInputStream fis = new FileInputStream(sourceFile);
+        ByteArrayOutputStream baos = new ByteArrayOutputStream();
+
+        if( cipherMode.equals("dec") )
+        {
+            System.out.println("Decrypting " + sourceFile.getAbsolutePath() );
+            CryptoUtil.decrypt( fis, baos, password );
+            fis.close();
+
+            ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
+            FileOutputStream fos = new FileOutputStream(targetFile);
+            CryptoUtil.copy(bais,fos);
+            bais.close();
+            fos.close();
+        }
+        else if( cipherMode.equals("enc") )
+        {
+            System.out.println("Enrypting " + sourceFile.getAbsolutePath() );
+            CryptoUtil.encrypt( fis, baos, password );
+            fis.close();
+
+            ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
+            FileOutputStream fos = new FileOutputStream(targetFile);
+            CryptoUtil.copy(bais,fos);
+            bais.close();
+            fos.close();
+        }
+        else
+        {
+            String msg = "Don't know what to do with : " + cipherMode;
+            throw new IllegalArgumentException(msg);
+        }
+    }
+
+    /**
+     * Decrypt/encrypt a string.
+     * 
+     * @param args the command line
+     * @throws Exception the operation failed
+     */
+    public static void processString(String[] args)
+        throws Exception
+    {
+        String cipherMode = args[1];
+        char[] password = args[2].toCharArray();
+        String value = args[3];
+        String result = null;
+
+        if( cipherMode.equals("dec") )
+        {
+            result = CryptoUtil.decryptString(value,password);
+        }
+        else
+        {
+            result = CryptoUtil.encryptString(value,password);
+        }
+
+        System.out.println( result );
+    }
+}
\ No newline at end of file
diff --git a/fulcrum-yaafi-crypto-1.0.7/src/test/org/apache/fulcrum/jce/crypto/MainTest.java b/fulcrum-yaafi-crypto-1.0.7/src/test/org/apache/fulcrum/jce/crypto/MainTest.java
new file mode 100644
index 0000000..352990f
--- /dev/null
+++ b/fulcrum-yaafi-crypto-1.0.7/src/test/org/apache/fulcrum/jce/crypto/MainTest.java
@@ -0,0 +1,81 @@
+package org.apache.fulcrum.jce.crypto;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import junit.framework.TestCase;
+
+/**
+ * Test suite for crypto functionality
+ *
+ * @author <a href="mailto:siegfried.goeschl@it20one.at">Siegfried Goeschl</a>
+ */
+
+public class MainTest extends TestCase
+{
+    /** the password to be used */
+    private String password;
+
+    /**
+     * Constructor
+     * @param name the name of the test case
+     */
+    public MainTest( String name )
+    {
+        super(name);
+
+        this.password = "foobar";
+    }
+
+    /**
+     * @return Returns the password.
+     */
+    protected char[] getPassword()
+    {
+        return password.toCharArray();
+    }
+
+    /** Encrypt a string on the command line */
+    public void testStringEncryption()
+    {
+        String[] encryptionArgs = { "string", "enc", this.password, "mysecretpassword"};
+        Main.main(encryptionArgs);
+        String[] decryptionArgs = { "string", "dec", this.password, "9330419fc003b4e1461986782625db13f4c8c81c340a9caa"};
+        Main.main(decryptionArgs);
+    }
+
+    /** Encrypt a text file on the command line */
+    public void testFileEncryption1()
+    {
+        String[] encryptionArgs = { "file", "enc", this.password, "./src/test/data/plain.txt", "./target/main/plain.enc.txt" };
+        String[] decryptionArgs = { "file", "dec", this.password, "./target/main/plain.enc.txt", "./target/main/plain.dec.txt" };
+        Main.main(encryptionArgs);
+        Main.main(decryptionArgs);
+    }
+
+    /** Encrypt a text file in-place on the command line */
+    public void testFileEncryption2()
+    {
+        String[] encryptionArgs = { "file", "enc", this.password, "./src/test/data/plain.txt", "./target/main/plain.txt" };
+        String[] decryptionArgs = { "file", "dec", this.password, "./target/main/plain.txt" };
+        Main.main(encryptionArgs);
+        Main.main(decryptionArgs);
+    }
+
+}
\ No newline at end of file
diff --git a/fulcrum-yaafi-crypto-1.0.7/src/test/org/apache/fulcrum/jce/crypto/SmartDecryptingInputStreamTest.java b/fulcrum-yaafi-crypto-1.0.7/src/test/org/apache/fulcrum/jce/crypto/SmartDecryptingInputStreamTest.java
new file mode 100644
index 0000000..7bcfd96
--- /dev/null
+++ b/fulcrum-yaafi-crypto-1.0.7/src/test/org/apache/fulcrum/jce/crypto/SmartDecryptingInputStreamTest.java
@@ -0,0 +1,231 @@
+package org.apache.fulcrum.jce.crypto;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+import java.io.FileInputStream;
+
+import junit.framework.TestCase;
+
+/**
+ * Test suite for SmartDecryptingInputStream
+ *
+ * @author <a href="mailto:siegfried.goeschl@it20one.at">Siegfried Goeschl</a>
+ */
+
+public class SmartDecryptingInputStreamTest extends TestCase
+{
+    /** the password to be used */
+    private String password;
+
+    /** the test data directory */
+    private File testDataDirectory;
+
+    /** the temp data director */
+    private File tempDataDirectory;
+
+    /**
+     * Constructor
+     * @param name the name of the test case
+     */
+    public SmartDecryptingInputStreamTest( String name )
+    {
+        super(name);
+
+        this.password = "mysecret";
+        this.testDataDirectory = new File( "./src/test/data" );
+        this.tempDataDirectory = new File( "./temp" );
+    }
+
+    /**
+     * @see junit.framework.TestCase#setUp()
+     */
+    protected void setUp() throws Exception
+    {
+        CryptoStreamFactoryImpl factory = new CryptoStreamFactoryImpl(
+            CryptoParameters.SALT,
+            CryptoParameters.COUNT
+            );
+
+        CryptoStreamFactoryImpl.setInstance( factory );
+    }
+
+    /**
+     * @return Returns the password.
+     */
+    protected char[] getPassword()
+    {
+        return password.toCharArray();
+    }
+
+    /**
+     * @return Returns the tempDataDirectory.
+     */
+    protected File getTempDataDirectory()
+    {
+        return tempDataDirectory;
+    }
+
+    /**
+     * @return Returns the testDataDirectory.
+     */
+    protected File getTestDataDirectory()
+    {
+        return testDataDirectory;
+    }
+
+    public void testSmartEmtpyDecryption() throws Exception
+    {
+        this.testSmartDecryption("empty.txt","ISO-8859-1");
+    }
+
+    public void testSmartTextDecryption() throws Exception
+    {
+        this.testSmartDecryption("plain.txt","ISO-8859-1");
+    }
+
+    public void testSmartGroovyDecryption() throws Exception
+    {
+        this.testSmartDecryption("plain.groovy","ISO-8859-1");
+    }
+
+    public void testSmartXmlIso8859Utf8Decryption() throws Exception
+    {
+        this.testSmartDecryption("plain-iso-8859-1.xml","ISO-8859-1");
+    }
+
+    public void testSmartXmlUtf8Decryption() throws Exception
+    {
+        this.testSmartDecryption("plain-utf8.xml","UTF-8");
+    }
+
+    public void testSmartXmlUtf16Decryption() throws Exception
+    {
+        this.testSmartDecryption("plain-utf16.xml","UTF-16");
+    }
+
+    public void testPDFDecryption() throws Exception
+    {
+        this.testSmartDecryption("plain.pdf","ISO-8859-1");
+    }
+
+    public void testZIPDecryption() throws Exception
+    {
+        this.testSmartDecryption("plain.zip","ISO-8859-1");
+    }
+
+    /** Test smart decryption for a given file */
+    private void testSmartDecryption( String fileName, String enc ) throws Exception
+    {
+        File sourceFile = new File( this.getTestDataDirectory(), fileName );
+        String plainText = this.loadTextFile(sourceFile,enc);
+        String smartText = this.smartDecrypt(sourceFile,enc);
+        byte[] cipherText = this.encryptTextFile(sourceFile);
+        String decryptedText = this.smartDecrypt(cipherText,enc);
+
+        assertTrue( plainText.length() == smartText.length() );
+        assertTrue( plainText.length() == decryptedText.length() );
+        assertEquals( plainText, smartText );
+        assertEquals( plainText, decryptedText );
+    }
+
+    /**
+     * Loads a plain text file.
+     * @param file the file to load
+     */
+    private String loadTextFile( File file, String enc ) throws Exception
+    {
+        String result = null;
+        FileInputStream fis = new FileInputStream( file );
+        ByteArrayOutputStream baos = new ByteArrayOutputStream();
+        CryptoUtil.copy(fis,baos);
+        fis.close();
+        result = new String( baos.toByteArray(), enc );
+        return result;
+    }
+
+    /**
+     * Encrypt a plain text file.
+     * @param file the file to encrypt
+     */
+    private byte[] encryptTextFile( File file ) throws Exception
+    {
+        ByteArrayOutputStream baos = new ByteArrayOutputStream();
+        FileInputStream fis = new FileInputStream( file );
+
+        CryptoUtil.encrypt(
+            CryptoStreamFactoryImpl.getInstance(),
+            fis,
+            baos,
+            this.getPassword()
+            );
+
+        fis.close();
+
+        return baos.toByteArray();
+    }
+
+    /**
+     * Use smart decryption on a cipherText.
+     *
+     * @param cipherText the encrypted text
+     * @return the decrypeted content
+     */
+    private String smartDecrypt( byte[] cipherText, String enc ) throws Exception
+    {
+        ByteArrayInputStream bais = new ByteArrayInputStream(cipherText);
+        ByteArrayOutputStream baos = new ByteArrayOutputStream();
+
+        SmartDecryptingInputStream sdis = new SmartDecryptingInputStream(
+            CryptoStreamFactoryImpl.getInstance(),
+            bais,
+            this.getPassword()
+            );
+
+        CryptoUtil.copy(sdis,baos);
+
+        return new String( baos.toByteArray(), enc );
+    }
+
+    /**
+     * Use smart decryption on a plain text file.
+     *
+     * @param file the file to load
+     * @return the content
+     */
+    private String smartDecrypt( File file, String enc ) throws Exception
+    {
+        ByteArrayOutputStream baos = new ByteArrayOutputStream();
+        FileInputStream fis = new FileInputStream( file );
+
+        SmartDecryptingInputStream sdis = new SmartDecryptingInputStream(
+            CryptoStreamFactoryImpl.getInstance(),
+            fis,
+            this.getPassword()
+            );
+
+        CryptoUtil.copy(sdis,baos);
+        return new String( baos.toByteArray(), enc );
+    }
+
+}
diff --git a/fulcrum-yaafi-crypto-1.0.7/xdocs/changes.xml b/fulcrum-yaafi-crypto-1.0.7/xdocs/changes.xml
new file mode 100644
index 0000000..56db47f
--- /dev/null
+++ b/fulcrum-yaafi-crypto-1.0.7/xdocs/changes.xml
@@ -0,0 +1,51 @@
+<?xml version="1.0"?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements.  See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership.  The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License.  You may obtain a copy of the License at
+
+   http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied.  See the License for the
+ specific language governing permissions and limitations
+ under the License.
+-->
+<document>
+  <properties>
+    <title>Fulcrum YAAFI Crytpo Library</title>
+    <author email="siegfried.goeschl@it20one.at">Siegfried Goeschl</author>
+  </properties>
+
+  <body>
+    <release version="1.0.7" date="as in SVN">
+      <action dev="painter" type="update">
+        Simplify the HexConverter code, more Java 8 friendly
+      </action>
+      <action dev="painter" type="update">
+        Update parent pom to Turbine 5
+      </action>
+      <action dev="painter" type="update">
+        Remove references to StringBuffer
+      </action>
+      <action dev="painter" type="update">
+        Fix missing license from rat report
+      </action>
+    </release>
+    <release version="1.0.6" date="as in SVN">
+      <action dev="sgoeschl" type="update">
+        Using the official fulcrum-parent-1 pom.	
+      </action>
+      <action dev="sgoeschl" type="add">
+        Moving the code out of YAAFI and make a standalone library.
+      </action>
+    </release>
+  </body>
+</document>
+
diff --git a/fulcrum-yaafi-crypto-1.0.7/xdocs/downloads.xml b/fulcrum-yaafi-crypto-1.0.7/xdocs/downloads.xml
new file mode 100644
index 0000000..dc80df1
--- /dev/null
+++ b/fulcrum-yaafi-crypto-1.0.7/xdocs/downloads.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements.  See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership.  The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License.  You may obtain a copy of the License at
+
+   http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied.  See the License for the
+ specific language governing permissions and limitations
+ under the License.
+-->
+<document>
+  <properties>
+    <title>Fulcrum YAAFI Avalon Container</title>
+  </properties>
+  <body>
+    <section name="Downloads">
+      <p>List of available downloads.</p>
+      <table>
+        <tr>
+          <th>Download Links</th>
+          <th>Release Notes</th>
+        </tr>
+        <tr>
+          <td>
+            <a href="http://www.apache.org/dyn/closer.cgi/turbine/fulcrum/fulcrum-yaafi-crypto/binaries/fulcrum-yaafi-crypto-1.0.6-bin.zip">Fulcrum's YAAFI Crypto v1.0.6</a>
+          </td>
+          <td>
+            <a href="announcements/announcement-1.0.6.txt">1.0.6</a>
+          </td>
+        </tr>
+      </table>
+    </section>
+  </body>
+</document>
diff --git a/fulcrum-yaafi-crypto-1.0.7/xdocs/index.xml b/fulcrum-yaafi-crypto-1.0.7/xdocs/index.xml
new file mode 100644
index 0000000..47079d7
--- /dev/null
+++ b/fulcrum-yaafi-crypto-1.0.7/xdocs/index.xml
@@ -0,0 +1,123 @@
+<?xml version="1.0"?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements.  See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership.  The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License.  You may obtain a copy of the License at
+
+   http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied.  See the License for the
+ specific language governing permissions and limitations
+ under the License.
+-->
+
+<document>
+
+  <properties>
+    <title>Fulcrum Crypto Library</title>
+    <author email="siegfried.goeschl@it20one.at">Siegfried Goeschl</author>
+  </properties>
+
+  <body>
+
+    <section name="Overview">
+      <p> Fulcrum YAFFI Crypto Library is an extension library for Fulcrum YAAFI to support
+        transparent decryption of configuration files. The encryption/decryption is based on DES
+        using 56 bit key length. </p>
+    </section>
+
+    <section name="Functionality">
+      <p> This library exposes the following functionality <ul>
+          <li>password factory to create safer passwords</li>
+          <li>creation of decrypting input streams</li>
+          <li>creation of enrypting output streams</li>
+        </ul>
+      </p>
+      <subsection name="Password Creation">
+        <p> Why someone need a password factory to create safer password?! People tend to use weak
+          password vunerable to dictionary attacks. To improve the situation you have a base
+          password which you convert into the real password using the PasswordFactory. For the
+          password generation the base password is salted and repeatedly hashed to generate a UUID
+          string (which you can still manually enter on the keyboard). Furthermore the password
+          generation allows you to hide the "real" password in the case that you need to store your
+          password directly in your code or configuration.<table>
+            <tr>
+              <td>Base Text Password</td>
+              <td>Computed Text Password</td>
+            </tr>
+            <tr>
+              <td>fulcrum-yaafi</td>
+              <td>727a-98b9-93be-4537c</td>
+            </tr>
+            <tr>
+              <td>mysecret</td>
+              <td>62cc-bf14-1814-672da</td>
+            </tr>
+          </table>
+        </p>
+      </subsection>
+      <subsection name="Decrypting InputStreams">
+        <p> A decrypting input stream allows to apply transparent decryption of an input stream.
+          Transparently also means that the implementation is able to look at the content to decide
+          if it is encrypted at all - this is a so-called "SmartDecryptingInputStream". </p>
+      </subsection>
+      <subsection name="Encrypting OutputStreams">
+        <p> A encrypting output stream allows to apply transparent encryption of an output stream.
+        </p>
+      </subsection>
+    </section>
+
+    <section name="Cryptography Support">
+      <subsection name="JDK Support">
+        <table>
+          <tr>
+            <td>JDK 1.3.x</td>
+            <td> For JDK 1.3.x the <a href="http://java.sun.com/products/jce/index-122.html"> Java
+                Cryptography Extension (JCE) 1.2.2</a> needs to be installed. Furthermore you need
+              to add the jce1_2_2.jar to your Maven repository and project.xml </td>
+          </tr>
+          <tr>
+            <td>JDK 1.4.x</td>
+            <td> The current JDK's have the JCA built-in therefore no extra configuration is
+              required. </td>
+          </tr>
+          <tr>
+            <td>JDK 1.5.x</td>
+            <td> The current JDK's have the JCA built-in therefore no extra configuration is
+              required. </td>
+          </tr>
+          <tr>
+            <td>JDK 1.6.x</td>
+            <td> The current JDK's have the JCA built-in therefore no extra configuration is
+              required. </td>
+          </tr>
+        </table>
+      </subsection>
+      <subsection name="Availabe Algorithms">
+        <table>
+          <tr>
+            <th>Provider Version</th>
+            <th>Algorithms</th>
+          </tr>
+          <tr>
+            <td>SunJCE 1.22</td>
+            <td>PBEWithMD5AndDES</td>
+          </tr>
+          <tr>
+            <td>SunJCE 1.42</td>
+            <td> PBEWithMD5AndDES </td>
+          </tr>
+        </table>
+      </subsection>
+    </section>
+
+  </body>
+
+</document>

[turbine-fulcrum-yaafi-crypto] 05/11: Tag 1.0.7 release

Posted by gk...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

gk pushed a commit to tag fulcrum-yaafi-crypto-1.0.7
in repository https://gitbox.apache.org/repos/asf/turbine-fulcrum-yaafi-crypto.git

commit 645030c5322b13f11bd92c6100c886a3ce31c047
Merge: 39cd490 b25f64d
Author: Jeffery Painter <pa...@apache.org>
AuthorDate: Thu Nov 8 20:16:36 2018 +0000

    Tag 1.0.7 release
    
    git-svn-id: https://svn.apache.org/repos/asf/turbine/fulcrum/tags/fulcrum-yaafi-crypto-1.0.7@1846191 13f79535-47bb-0310-9956-ffa450edef68

 fulcrum-yaafi-crypto-1.0.7/LICENSE.txt             | 202 ------
 fulcrum-yaafi-crypto-1.0.7/NOTICE.txt              |   6 -
 fulcrum-yaafi-crypto-1.0.7/pom.xml                 |  73 ---
 .../fulcrum/jce/crypto/CryptoParameters.java       |  42 --
 .../fulcrum/jce/crypto/CryptoStreamFactory.java    | 136 ----
 .../jce/crypto/CryptoStreamFactoryImpl.java        | 326 ----------
 .../org/apache/fulcrum/jce/crypto/CryptoUtil.java  | 225 -------
 .../apache/fulcrum/jce/crypto/HexConverter.java    |  72 ---
 .../apache/fulcrum/jce/crypto/PasswordFactory.java | 181 ------
 .../fulcrum/jce/crypto/PasswordParameters.java     |  46 --
 .../jce/crypto/SmartDecryptingInputStream.java     | 381 -----------
 .../org/apache/fulcrum/jce/crypto/StreamUtil.java  | 186 ------
 .../resources/announcements/announcement-1.0.6.txt |   1 -
 fulcrum-yaafi-crypto-1.0.7/src/site/site.xml       |  31 -
 fulcrum-yaafi-crypto-1.0.7/src/test/data/empty.txt |   0
 .../src/test/data/plain-iso-8859-1.xml             |  56 --
 .../src/test/data/plain-utf16.xml                  | Bin 4372 -> 0 bytes
 .../src/test/data/plain-utf8.xml                   |  56 --
 .../src/test/data/plain.groovy                     |  44 --
 fulcrum-yaafi-crypto-1.0.7/src/test/data/plain.pdf | 716 ---------------------
 fulcrum-yaafi-crypto-1.0.7/src/test/data/plain.txt | 254 --------
 fulcrum-yaafi-crypto-1.0.7/src/test/data/plain.xml |  56 --
 fulcrum-yaafi-crypto-1.0.7/src/test/data/plain.zip | Bin 38862 -> 0 bytes
 .../apache/fulcrum/jce/crypto/CryptoUtilTest.java  | 302 ---------
 .../test/org/apache/fulcrum/jce/crypto/Main.java   | 181 ------
 .../org/apache/fulcrum/jce/crypto/MainTest.java    |  81 ---
 .../jce/crypto/SmartDecryptingInputStreamTest.java | 231 -------
 fulcrum-yaafi-crypto-1.0.7/xdocs/changes.xml       |  51 --
 fulcrum-yaafi-crypto-1.0.7/xdocs/downloads.xml     |  43 --
 fulcrum-yaafi-crypto-1.0.7/xdocs/index.xml         | 123 ----
 30 files changed, 4102 deletions(-)

[turbine-fulcrum-yaafi-crypto] 02/11: [maven-release-plugin] copy for tag fulcrum-yaafi-crypto-1.0.7

Posted by gk...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

gk pushed a commit to tag fulcrum-yaafi-crypto-1.0.7
in repository https://gitbox.apache.org/repos/asf/turbine-fulcrum-yaafi-crypto.git

commit 6a8a6077d003c4f0092c50ff422869f7ef1657ce
Author: Jeffery Painter <pa...@apache.org>
AuthorDate: Wed Nov 7 16:35:46 2018 +0000

    [maven-release-plugin] copy for tag fulcrum-yaafi-crypto-1.0.7
    
    git-svn-id: https://svn.apache.org/repos/asf/turbine/fulcrum/tags/fulcrum-yaafi-crypto-1.0.7@1846055 13f79535-47bb-0310-9956-ffa450edef68
---
 yaafi-crypto/LICENSE.txt                           | 202 ++++++
 yaafi-crypto/NOTICE.txt                            |   6 +
 yaafi-crypto/pom.xml                               |  73 +++
 .../fulcrum/jce/crypto/CryptoParameters.java       |  42 ++
 .../fulcrum/jce/crypto/CryptoStreamFactory.java    | 136 ++++
 .../jce/crypto/CryptoStreamFactoryImpl.java        | 326 ++++++++++
 .../org/apache/fulcrum/jce/crypto/CryptoUtil.java  | 225 +++++++
 .../apache/fulcrum/jce/crypto/HexConverter.java    |  72 +++
 .../apache/fulcrum/jce/crypto/PasswordFactory.java | 181 ++++++
 .../fulcrum/jce/crypto/PasswordParameters.java     |  46 ++
 .../jce/crypto/SmartDecryptingInputStream.java     | 381 +++++++++++
 .../org/apache/fulcrum/jce/crypto/StreamUtil.java  | 186 ++++++
 .../resources/announcements/announcement-1.0.6.txt |   1 +
 yaafi-crypto/src/site/site.xml                     |  31 +
 yaafi-crypto/src/test/data/empty.txt               |   0
 yaafi-crypto/src/test/data/plain-iso-8859-1.xml    |  56 ++
 yaafi-crypto/src/test/data/plain-utf16.xml         | Bin 0 -> 4372 bytes
 yaafi-crypto/src/test/data/plain-utf8.xml          |  56 ++
 yaafi-crypto/src/test/data/plain.groovy            |  44 ++
 yaafi-crypto/src/test/data/plain.pdf               | 716 +++++++++++++++++++++
 yaafi-crypto/src/test/data/plain.txt               | 254 ++++++++
 yaafi-crypto/src/test/data/plain.xml               |  56 ++
 yaafi-crypto/src/test/data/plain.zip               | Bin 0 -> 38862 bytes
 .../apache/fulcrum/jce/crypto/CryptoUtilTest.java  | 302 +++++++++
 .../test/org/apache/fulcrum/jce/crypto/Main.java   | 181 ++++++
 .../org/apache/fulcrum/jce/crypto/MainTest.java    |  81 +++
 .../jce/crypto/SmartDecryptingInputStreamTest.java | 231 +++++++
 yaafi-crypto/xdocs/changes.xml                     |  51 ++
 yaafi-crypto/xdocs/downloads.xml                   |  43 ++
 yaafi-crypto/xdocs/index.xml                       | 123 ++++
 30 files changed, 4102 insertions(+)

diff --git a/yaafi-crypto/LICENSE.txt b/yaafi-crypto/LICENSE.txt
new file mode 100644
index 0000000..d645695
--- /dev/null
+++ b/yaafi-crypto/LICENSE.txt
@@ -0,0 +1,202 @@
+
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "[]"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright [yyyy] [name of copyright owner]
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
diff --git a/yaafi-crypto/NOTICE.txt b/yaafi-crypto/NOTICE.txt
new file mode 100644
index 0000000..0a2d75a
--- /dev/null
+++ b/yaafi-crypto/NOTICE.txt
@@ -0,0 +1,6 @@
+Turbine Fulcrum ServiceManager
+Copyright 2002-2007 The Apache Software Foundation.
+
+This product includes software developed at
+The Apache Software Foundation (http://www.apache.org/).
+
diff --git a/yaafi-crypto/pom.xml b/yaafi-crypto/pom.xml
new file mode 100644
index 0000000..f3a50ae
--- /dev/null
+++ b/yaafi-crypto/pom.xml
@@ -0,0 +1,73 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+   Licensed to the Apache Software Foundation (ASF) under one or more
+   contributor license agreements.  See the NOTICE file distributed with
+   this work for additional information regarding copyright ownership.
+   The ASF licenses this file to You under the Apache License, Version 2.0
+   (the "License"); you may not use this file except in compliance with
+   the License.  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+  <parent>
+    <artifactId>turbine-parent</artifactId>
+       <groupId>org.apache.turbine</groupId>
+       <version>5</version>
+  </parent>
+
+  <modelVersion>4.0.0</modelVersion>
+  <artifactId>fulcrum-yaafi-crypto</artifactId>
+  <groupId>org.apache.fulcrum</groupId>
+  <version>1.0.7</version>
+  <name>Fulcrum YAAFI Crypto</name>
+  <inceptionYear>2008</inceptionYear>
+  <description>Fulcrum YAAFI Crypto Library</description>
+  <url>http://turbine.apache.org/fulcrum/fulcrum-yaafi-crytpo</url>
+		
+  <scm>
+    <connection>scm:svn:http://svn.apache.org/repos/asf/turbine/fulcrum/tags/fulcrum-yaafi-crypto-1.0.7</connection>
+    <developerConnection>scm:svn:https://svn.apache.org/repos/asf/turbine/fulcrum/tags/fulcrum-yaafi-crypto-1.0.7</developerConnection>
+    <url>http://svn.apache.org/viewvc/turbine/fulcrum/tags/fulcrum-yaafi-crypto-1.0.7</url>
+  </scm>
+	
+  <developers>
+    <developer>
+      <name>Siegfried Goeschl</name>
+      <id>sgoeschl</id>
+      <email>sgoeschl@apache.org</email>
+      <organization />
+      <roles>
+        <role>Java Developer</role>
+      </roles>
+    </developer>
+  </developers>
+
+  <dependencies>
+    <!-- testing dependencies -->
+    <dependency>
+      <groupId>junit</groupId>
+      <artifactId>junit</artifactId>
+      <version>4.12</version>
+      <scope>test</scope>
+    </dependency>
+  </dependencies>
+
+  <build>
+    <sourceDirectory>${basedir}/src/java</sourceDirectory>
+    <testSourceDirectory>${basedir}/src/test</testSourceDirectory>
+  </build>
+  
+  <properties>
+    <turbine.site.path>fulcrum/fulcrum-yaafi-crypto</turbine.site.path>
+  </properties>  
+	
+</project>
diff --git a/yaafi-crypto/src/java/org/apache/fulcrum/jce/crypto/CryptoParameters.java b/yaafi-crypto/src/java/org/apache/fulcrum/jce/crypto/CryptoParameters.java
new file mode 100644
index 0000000..9ee3eb3
--- /dev/null
+++ b/yaafi-crypto/src/java/org/apache/fulcrum/jce/crypto/CryptoParameters.java
@@ -0,0 +1,42 @@
+package org.apache.fulcrum.jce.crypto;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+
+/**
+ * CryptoParameters used for encryption/decrytpion.
+ *
+ * @author <a href="mailto:siegfried.goeschl@it20one.at">Siegfried Goeschl</a>
+ */
+
+public interface CryptoParameters
+{
+    /** Parameter for PBEParameterSpec */
+    int COUNT = 20;
+
+    /** The password salt */
+    byte[] SALT = {
+        (byte)0xc7, (byte)0x73, (byte)0x21, (byte)0x8c,
+        (byte)0x7e, (byte)0xc8, (byte)0xee, (byte)0x99
+        };
+
+    /** The crypto algorithm being used */
+    String ALGORITHM = "PBEWithMD5AndDES";
+}
diff --git a/yaafi-crypto/src/java/org/apache/fulcrum/jce/crypto/CryptoStreamFactory.java b/yaafi-crypto/src/java/org/apache/fulcrum/jce/crypto/CryptoStreamFactory.java
new file mode 100644
index 0000000..34e55a3
--- /dev/null
+++ b/yaafi-crypto/src/java/org/apache/fulcrum/jce/crypto/CryptoStreamFactory.java
@@ -0,0 +1,136 @@
+package org.apache.fulcrum.jce.crypto;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.security.GeneralSecurityException;
+
+/**
+ * Interface for creating encrypting/decrypting streams. 
+ *
+ * @author <a href="mailto:siegfried.goeschl@it20one.at">Siegfried Goeschl </a>
+ */
+
+public interface CryptoStreamFactory
+{
+    /**
+     * Creates input stream based on the decryption mode
+     * using the default password.
+     *
+     * @param is the input stream to be wrapped
+     * @param decryptionMode the decryption mode (true|false|auto)
+     * @return an decrypting input stream
+     * @throws GeneralSecurityException creating the input stream failed
+     * @throws IOException creating the input stream failed
+     */
+    InputStream getInputStream(InputStream is, String decryptionMode)
+        throws GeneralSecurityException, IOException;
+
+    /**
+     * Creates input stream based on the decryption mode
+     * using the given password.
+     *
+     * @param is the input stream to be wrapped
+     * @param decryptionMode the decryption mode (true|false|auto)
+     * @param password the password to be used
+     * @return an decrypting input stream
+     * @throws GeneralSecurityException creating the input stream failed
+     * @throws IOException creating the input stream failed
+     */
+    InputStream getInputStream(InputStream is, String decryptionMode, char[] password)
+        throws GeneralSecurityException, IOException;
+
+    /**
+     * Creates a decrypting input stream using the default password.
+     *
+     * @param is the input stream to be wrapped
+     * @return an decrypting input stream
+     * @throws GeneralSecurityException creating the input stream failed
+     * @throws IOException creating the input stream failed
+     */
+    InputStream getInputStream(InputStream is)
+        throws GeneralSecurityException, IOException;
+
+    /**
+     * Creates an decrypting input stream using a given password.
+     *
+     * @param is the input stream to be wrapped
+     * @param password the password to be used
+     * @return an decrypting input stream
+     * @throws GeneralSecurityException creating the input stream failed
+     * @throws IOException creating the input stream failed
+     */
+    InputStream getInputStream(InputStream is, char[] password)
+        throws GeneralSecurityException, IOException;
+
+    /**
+     * Creates a smart decrypting input stream using the default
+     * password. The implementation looks at the binary content
+     * to decide if it was encrypted or not thereby providing
+     * transparent access to encrypted/unencrypted files.
+     *
+     * @param is the input stream to be wrapped
+     * @return an decrypting input stream
+     * @throws GeneralSecurityException creating the input stream failed
+     * @throws IOException creating the input stream failed
+     */
+    InputStream getSmartInputStream(InputStream is)
+        throws GeneralSecurityException, IOException;
+
+    /**
+     * Creates a smart decrypting input stream using a given
+     * password. The implementation looks at the binary content
+     * to decide if it was encrypted or not thereby providing
+     * transparent access to encrypted/unencrypted files.
+     *
+     * @param is the input stream to be wrapped
+     * @param password the password to be used
+     * @return an decrypting input stream
+     * @throws GeneralSecurityException creating the input stream failed
+     * @throws IOException creating the input stream failed
+     */
+    InputStream getSmartInputStream(InputStream is, char[] password)
+        throws GeneralSecurityException, IOException;
+
+    /**
+     * Creates an encrypting output stream using the default password.
+     *
+     * @param os the output stream to be wrapped
+     * @return an decrypting input stream
+     * @throws GeneralSecurityException creating the ouptut stream failed
+     * @throws IOException creating the ouptut stream failed
+     */
+    OutputStream getOutputStream(OutputStream os)
+        throws GeneralSecurityException, IOException;
+
+    /**
+     * Creates an encrypting output stream using the given password.
+     *
+     * @param os the output stream to be wrapped
+     * @param password the password to be used
+     * @return an decrypting input stream
+     * @throws GeneralSecurityException creating the ouptut stream failed
+     * @throws IOException creating the ouptut stream failed
+     */
+    OutputStream getOutputStream(OutputStream os, char[] password)
+        throws GeneralSecurityException, IOException;
+}
diff --git a/yaafi-crypto/src/java/org/apache/fulcrum/jce/crypto/CryptoStreamFactoryImpl.java b/yaafi-crypto/src/java/org/apache/fulcrum/jce/crypto/CryptoStreamFactoryImpl.java
new file mode 100644
index 0000000..2449cf4
--- /dev/null
+++ b/yaafi-crypto/src/java/org/apache/fulcrum/jce/crypto/CryptoStreamFactoryImpl.java
@@ -0,0 +1,326 @@
+package org.apache.fulcrum.jce.crypto;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.security.GeneralSecurityException;
+import java.security.Key;
+
+import javax.crypto.Cipher;
+import javax.crypto.CipherInputStream;
+import javax.crypto.CipherOutputStream;
+import javax.crypto.SecretKeyFactory;
+import javax.crypto.spec.PBEKeySpec;
+import javax.crypto.spec.PBEParameterSpec;
+
+/**
+ * Concrete factory for creating encrypting/decrypting streams. The
+ * implementation uses the JCA (Java Crypto Extension) supplied
+ * by SUN (using SunJCE 1.42).
+ *
+ * The implementation uses as PBEWithMD5AndDES for encryption which
+ * should be sufficent for most applications.
+ *
+ * The implementation also supplies a default password in the case that
+ * the programmer don't want to have additional hassles. It is easy to
+ * reengineer the password being used but much better than a hard-coded
+ * password in the application.
+ *
+ * The code uses parts from Markus Hahn's Blowfish library found at
+ * http://blowfishj.sourceforge.net/
+ *
+ * @author <a href="mailto:siegfried.goeschl@it20one.at">Siegfried Goeschl </a>
+ * @author <a href="mailto:maakus@earthlink.net">Markus Hahn</a>
+ */
+
+public final class CryptoStreamFactoryImpl implements CryptoStreamFactory
+{
+    /** the salt for the PBE algorithm */
+    private byte[] salt;
+
+    /** the count paramter for the PBE algorithm */
+    private int count;
+
+    /** the name of the JCE provider */
+    private String providerName;
+
+    /** the algorithm to use */
+    private String algorithm;
+
+    /** the default instance */
+    private static CryptoStreamFactory instance;
+
+    /**
+     * The JCE provider name known to work. If the value
+     * is set to null an appropriate provider will be
+     * used.
+     */
+    private static final String PROVIDERNAME = null;
+
+    /**
+     * Factory method to get a default instance
+     * @return an instance of the CryptoStreamFactory
+     */
+    public synchronized static CryptoStreamFactory getInstance()
+    {
+        if( CryptoStreamFactoryImpl.instance == null )
+        {
+            CryptoStreamFactoryImpl.instance = new CryptoStreamFactoryImpl();
+        }
+
+        return CryptoStreamFactoryImpl.instance;
+    }
+
+    /**
+     * Set the default instance from an external application.
+     * @param instance the new default instance
+     */
+    public static void setInstance( CryptoStreamFactory instance )
+    {
+        CryptoStreamFactoryImpl.instance = instance;
+    }
+
+    /**
+     * Constructor
+     */
+    public CryptoStreamFactoryImpl()
+    {
+        this.salt = CryptoParameters.SALT;
+        this.count = CryptoParameters.COUNT;
+        this.providerName = PROVIDERNAME;
+        this.algorithm = CryptoParameters.ALGORITHM;
+    }
+
+    /**
+     * Constructor
+     *
+     * @param salt the salt for the PBE algorithm
+     * @param count the iteration for PBEParameterSpec
+     */
+    public CryptoStreamFactoryImpl( byte[] salt, int count)
+    {
+        this.salt = salt;
+        this.count = count;
+        this.providerName = PROVIDERNAME;
+        this.algorithm = CryptoParameters.ALGORITHM;
+    }
+
+
+    /**
+     * @see org.apache.fulcrum.jce.crypto.CryptoStreamFactory#getInputStream(java.io.InputStream, String)
+     */
+    public InputStream getInputStream(InputStream is, String decryptionMode) throws GeneralSecurityException, IOException {
+
+        InputStream result = null;
+
+        if( "auto".equalsIgnoreCase(decryptionMode) )
+        {
+            result = CryptoStreamFactoryImpl.getInstance().getSmartInputStream(is);
+        }
+        else if( "true".equalsIgnoreCase(decryptionMode) )
+        {
+            result = CryptoStreamFactoryImpl.getInstance().getInputStream(is);
+        }
+        else
+        {
+            result = is;
+        }
+        return result;
+    }
+
+    /**
+     * @see org.apache.fulcrum.jce.crypto.CryptoStreamFactory#getInputStream(java.io.InputStream, String, char[])
+     */
+    public InputStream getInputStream(InputStream is, String decryptionMode, char[] password) throws GeneralSecurityException, IOException {
+
+        InputStream result = null;
+
+        if( "auto".equalsIgnoreCase(decryptionMode) )
+        {
+            result = CryptoStreamFactoryImpl.getInstance().getSmartInputStream(is, password);
+        }
+        else if( "true".equalsIgnoreCase(decryptionMode) )
+        {
+            result = CryptoStreamFactoryImpl.getInstance().getInputStream(is, password);
+        }
+        else
+        {
+            result = is;
+        }
+        return result;
+    }
+
+    /**
+     * @see org.apache.fulcrum.jce.crypto.CryptoStreamFactory#getInputStream(java.io.InputStream)
+     */
+    public InputStream getInputStream( InputStream is )
+        throws GeneralSecurityException, IOException
+    {
+        Cipher cipher = this.createCipher( Cipher.DECRYPT_MODE, PasswordFactory.create() );
+        return new CipherInputStream( is, cipher );
+    }
+
+    /**
+     * @see org.apache.fulcrum.jce.crypto.CryptoStreamFactory#getInputStream(java.io.InputStream,char[])
+     */
+    public InputStream getInputStream( InputStream is, char[] password )
+        throws GeneralSecurityException, IOException
+    {
+        Cipher cipher = this.createCipher( Cipher.DECRYPT_MODE, password );
+        return new CipherInputStream( is, cipher );
+    }
+
+    /**
+     * @see org.apache.fulcrum.jce.crypto.CryptoStreamFactory#getSmartInputStream(java.io.InputStream)
+     */
+    public InputStream getSmartInputStream(InputStream is)
+        throws GeneralSecurityException, IOException
+    {
+        return this.getSmartInputStream(
+            is,
+            PasswordFactory.create()
+            );
+    }
+
+    /**
+     * @see org.apache.fulcrum.jce.crypto.CryptoStreamFactory#getSmartInputStream(java.io.InputStream,char[])
+     */
+    public InputStream getSmartInputStream(InputStream is, char[] password )
+        throws GeneralSecurityException, IOException
+    {
+        SmartDecryptingInputStream result;
+
+        result = new SmartDecryptingInputStream(
+            getInstance(),
+            is,
+            password
+            );
+
+        return result;
+    }
+
+    /**
+     * @see org.apache.fulcrum.jce.crypto.CryptoStreamFactory#getOutputStream(java.io.OutputStream)
+     */
+    public OutputStream getOutputStream( OutputStream os )
+        throws GeneralSecurityException, IOException
+    {
+        Cipher cipher = this.createCipher( Cipher.ENCRYPT_MODE, PasswordFactory.create() );
+        return new CipherOutputStream( os, cipher );    }
+
+    /**
+     * @see org.apache.fulcrum.jce.crypto.CryptoStreamFactory#getOutputStream(java.io.OutputStream, char[])
+     */
+    public OutputStream getOutputStream( OutputStream os, char[] password )
+        throws GeneralSecurityException, IOException
+    {
+        Cipher cipher = this.createCipher( Cipher.ENCRYPT_MODE, password );
+        return new CipherOutputStream( os, cipher );
+    }
+
+    /**
+     * @return Returns the algorithm.
+     */
+    private String getAlgorithm()
+    {
+        return algorithm;
+    }
+
+    /**
+     * @return Returns the count.
+     */
+    private int getCount()
+    {
+        return count;
+    }
+
+    /**
+     * @return Returns the providerName.
+     */
+    private String getProviderName()
+    {
+        return providerName;
+    }
+
+    /**
+     * @return Returns the salt.
+     */
+    private byte [] getSalt()
+    {
+        return salt;
+    }
+
+    /**
+     * Create a PBE key.
+     *
+     * @param password the password to use.
+     * @return the key
+     * @throws GeneralSecurityException creating the key failed
+     */
+    private Key createKey( char[] password )
+        throws GeneralSecurityException
+    {
+        SecretKeyFactory keyFactory;
+        String algorithm = this.getAlgorithm();
+        PBEKeySpec keySpec =  new PBEKeySpec(password);
+
+        if( this.getProviderName() == null )
+        {
+            keyFactory = SecretKeyFactory.getInstance( algorithm );
+        }
+        else
+        {
+            keyFactory = SecretKeyFactory.getInstance( algorithm, this.getProviderName() );
+        }
+
+        return keyFactory.generateSecret(keySpec);
+    }
+
+    /**
+     * Create a Cipher.
+     *
+     * @param mode the cipher mode
+     * @param password the password
+     * @return an instance of a cipher
+     * @throws GeneralSecurityException creating a cipher failed
+     * @throws IOException creating a cipher failed
+     */
+    private Cipher createCipher( int mode, char[] password )
+        throws GeneralSecurityException, IOException
+    {
+        Cipher cipher;
+        PBEParameterSpec paramSpec = new PBEParameterSpec( this.getSalt(), this.getCount() );
+        Key key = this.createKey( password );
+
+        if( this.getProviderName() == null )
+        {
+            cipher = Cipher.getInstance( this.getAlgorithm() );
+        }
+        else
+        {
+            cipher = Cipher.getInstance( this.getAlgorithm(), this.getProviderName() );
+        }
+
+        cipher.init( mode, key, paramSpec );
+        return cipher;
+    }
+}
diff --git a/yaafi-crypto/src/java/org/apache/fulcrum/jce/crypto/CryptoUtil.java b/yaafi-crypto/src/java/org/apache/fulcrum/jce/crypto/CryptoUtil.java
new file mode 100644
index 0000000..153d905
--- /dev/null
+++ b/yaafi-crypto/src/java/org/apache/fulcrum/jce/crypto/CryptoUtil.java
@@ -0,0 +1,225 @@
+package org.apache.fulcrum.jce.crypto;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.security.GeneralSecurityException;
+
+/**
+ * Helper class to provde generic functions to work with CryptoStreams.
+ *
+ * The code uses parts from Markus Hahn's Blowfish library found at
+ * http://blowfishj.sourceforge.net/
+ *
+ * @author <a href="mailto:siegfried.goeschl@it20one.at">Siegfried Goeschl </a>
+ * @author <a href="mailto:maakus@earthlink.net">Markus Hahn</a>
+ */
+
+public final class CryptoUtil
+{
+    /**
+     * Copies from a source to a target object using encryption
+     *
+     * @param source the source object
+     * @param target the target object
+     * @param password the password to use for encryption
+     * @throws GeneralSecurityException accessing JCE failed
+     * @throws IOException accessing the souce failed
+     *
+     */
+    public static void encrypt( Object source, Object target, char[] password )
+        throws GeneralSecurityException, IOException
+    {
+        CryptoUtil.encrypt(
+            CryptoUtil.getCryptoStreamFactory(),
+            source,
+            target,
+            password
+            );
+    }
+
+    /**
+     * Copies from a source to a target object using encryption and a
+     * caller supplied CryptoStreamFactory.
+     *
+     * @param factory the factory to create the crypto streams
+     * @param source the source object
+     * @param target the target object
+     * @param password the password to use for encryption
+     * @throws GeneralSecurityException accessing JCE failed
+     * @throws IOException accessing the souce failed
+     */
+    public static void encrypt(
+        CryptoStreamFactory factory, Object source, Object target, char[] password )
+        throws GeneralSecurityException, IOException
+    {
+        InputStream is = StreamUtil.createInputStream( source );
+        OutputStream os = StreamUtil.createOutputStream( target );
+        OutputStream eos = factory.getOutputStream( os, password );
+        StreamUtil.copy( is, eos );
+    }
+
+    /**
+     * Copies from a source to a target object using decryption.
+     *
+     * @param source the source object
+     * @param target the target object
+     * @param password the password to use for decryption
+     * @throws GeneralSecurityException accessing JCE failed
+     * @throws IOException accessing the souce failed
+     */
+    public static void decrypt( Object source, Object target, char[] password )
+        throws GeneralSecurityException, IOException
+    {
+        CryptoUtil.decrypt(
+            CryptoUtil.getCryptoStreamFactory(),
+            source,
+            target,
+            password
+            );
+    }
+
+    /**
+     * Copies from a source to a target object using decryption and a
+     * caller-suppier CryptoStreamFactory.
+     *
+     * @param factory the factory to create the crypto streams
+     * @param source the source object
+     * @param target the target object
+     * @param password the password to use for decryption
+     * @throws GeneralSecurityException accessing JCE failed
+     * @throws IOException accessing the souce failed
+     */
+    public static void decrypt(
+        CryptoStreamFactory factory, Object source, Object target, char[] password )
+        throws GeneralSecurityException, IOException
+    {
+        InputStream is = StreamUtil.createInputStream( source );
+        OutputStream os = StreamUtil.createOutputStream( target );
+        InputStream dis = factory.getInputStream( is, password );
+        StreamUtil.copy( dis, os );
+    }
+
+    /**
+     * Encrypts a string into a hex string.
+     *
+     * @param plainText the plain text to be encrypted
+     * @param password the password for encryption
+     * @return the encrypted string
+     * @throws GeneralSecurityException accessing JCE failed
+     * @throws IOException accessing the souce failed
+     */
+    public static String encryptString( String plainText, char[] password )
+        throws GeneralSecurityException, IOException
+    {
+        return CryptoUtil.encryptString(
+            CryptoUtil.getCryptoStreamFactory(),
+            plainText,
+            password
+            );
+    }
+
+    /**
+     * Encrypts a string into a hex string.
+     *
+     * @param factory the factory to create the crypto streams
+     * @param plainText the plain text to be encrypted
+     * @param password the password for encryption
+     * @return the encrypted string
+     * @throws GeneralSecurityException accessing JCE failed
+     * @throws IOException accessing the souce failed
+     */
+    public static String encryptString(
+        CryptoStreamFactory factory, String plainText, char[] password )
+        throws GeneralSecurityException, IOException
+    {
+        ByteArrayOutputStream bais = new ByteArrayOutputStream();
+        CryptoUtil.encrypt( factory, plainText, bais, password );
+        return HexConverter.toString( bais.toByteArray() );
+    }
+
+    /**
+     * Decrypts an encrypted string into the plain text. The encrypted
+     * string must be a hex string created by encryptString.
+     *
+     * @param cipherText the encrypted text to be decrypted
+     * @param password the password for decryption
+     * @return the decrypted string
+     * @throws GeneralSecurityException accessing JCE failed
+     * @throws IOException accessing the souce failed
+     */
+    public static String decryptString( String cipherText, char[] password )
+        throws GeneralSecurityException, IOException
+    {
+        return CryptoUtil.decryptString(
+            CryptoUtil.getCryptoStreamFactory(),
+            cipherText,
+            password
+            );
+    }
+
+    /**
+     * Decrypts an encrypted string into the plain text. The encrypted
+     * string must be a hex string created by encryptString.
+     *
+     * @param factory the factory to create the crypto streams
+     * @param cipherText the encrypted text to be decrypted
+     * @param password the password for decryption
+     * @return the decrypted string
+     * @throws GeneralSecurityException accessing JCE failed
+     * @throws IOException accessing the souce failed
+     */
+    public static String decryptString(
+        CryptoStreamFactory factory, String cipherText, char[] password )
+        throws GeneralSecurityException, IOException
+    {
+        byte[] buffer = HexConverter.toBytes( cipherText );
+        ByteArrayOutputStream bais = new ByteArrayOutputStream();
+        CryptoUtil.decrypt( factory, buffer, bais, password );
+        return new String( bais.toByteArray(), "utf-8" );
+    }
+
+    /**
+     * Pumps the input stream to the output stream.
+     *
+     * @param is the source input stream
+     * @param os the target output stream
+     * @return the number of bytes copied
+     * @throws IOException the copying failed
+     * @deprecated use StreamUtil instead
+     */
+    public static long copy( InputStream is, OutputStream os )
+        throws IOException
+    {
+        return StreamUtil.copy(is, os);
+    }
+
+    /**
+     * @return the CryptoStreamFactory to be used
+     */
+    public static CryptoStreamFactory getCryptoStreamFactory()
+    {
+        return CryptoStreamFactoryImpl.getInstance();
+    }
+}
diff --git a/yaafi-crypto/src/java/org/apache/fulcrum/jce/crypto/HexConverter.java b/yaafi-crypto/src/java/org/apache/fulcrum/jce/crypto/HexConverter.java
new file mode 100644
index 0000000..92aa6e1
--- /dev/null
+++ b/yaafi-crypto/src/java/org/apache/fulcrum/jce/crypto/HexConverter.java
@@ -0,0 +1,72 @@
+package org.apache.fulcrum.jce.crypto;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+/**
+ * Helper class to for HEX conversion.
+ *
+ * @author <a href="mailto:painter@apache.org">Jeffery Painter</a>
+ * @author <a href="mailto:siegfried.goeschl@it20one.at">Siegfried Goeschl</a>
+ * @author <a href="mailto:maakus@earthlink.net">Markus Hahn</a>
+ */
+
+public final class HexConverter
+{
+    /**
+     * Converts a byte array to a hex string.
+     *
+     * @param data the byte array
+     * @return the hex string
+     */
+    public static String toString( byte[] data )
+    {
+        return bytesToHexStr(data);
+    }
+
+    /**
+     * Converts a hex string into a byte[]
+     *
+     * @param sHex the hex string
+     * @return the byte[]
+     */
+    public static byte[] toBytes(String sHex) {
+        int len = sHex.length();
+        byte[] data = new byte[len / 2];
+        for (int i = 0; i < len; i += 2) {
+            data[i / 2] = (byte) ((Character.digit(sHex.charAt(i), 16) << 4)
+                                 + Character.digit(sHex.charAt(i+1), 16));
+        }
+        return data;
+    }    
+    
+    /**
+     * Converts a byte array to a hex string.
+     * @param data the byte array
+     * @return the hex string
+     */
+    private static String bytesToHexStr( byte[] data )
+    {
+        StringBuilder sbuf = new StringBuilder();
+        for ( byte b : data )
+        	sbuf.append( String.format("%02x", b ) );
+        return sbuf.toString();
+    }
+
+}
diff --git a/yaafi-crypto/src/java/org/apache/fulcrum/jce/crypto/PasswordFactory.java b/yaafi-crypto/src/java/org/apache/fulcrum/jce/crypto/PasswordFactory.java
new file mode 100644
index 0000000..c96713a
--- /dev/null
+++ b/yaafi-crypto/src/java/org/apache/fulcrum/jce/crypto/PasswordFactory.java
@@ -0,0 +1,181 @@
+package org.apache.fulcrum.jce.crypto;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.UnsupportedEncodingException;
+import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
+
+/**
+ * The implementation supplies a default password in the case that
+ * the programmer don't want to have additional hassles. It is easy to
+ * reengineer the password being used but much better than a hard-coded
+ * password in the application.
+ *
+ * The code uses parts from Markus Hahn's Blowfish library found at
+ * http://blowfishj.sourceforge.net/
+ *
+ * @author <a href="mailto:siegfried.goeschl@it20one.at">Siegfried Goeschl </a>
+ * @author <a href="mailto:maakus@earthlink.net">Markus Hahn</a>
+ */
+
+public class PasswordFactory implements PasswordParameters
+{
+
+    /**
+     * Create a new password
+     * 
+     * @return a default password using "xxxx-xxxx-xxxx-xxxxx"
+     * 
+     * @throws NoSuchAlgorithmException the encryption algorithm is not supported
+     * @throws UnsupportedEncodingException the requested encoding is not supported
+     */
+    public static char[] create()
+        throws NoSuchAlgorithmException, UnsupportedEncodingException
+    {
+        return create(
+            PasswordParameters.DEFAULTPASSWORD,
+            PasswordParameters.SALT,
+            PasswordParameters.COUNT
+            );
+    }
+
+    /**
+     * Create a new password using a seed
+     * 
+     * @param seed the default password supplied by the caller
+     * @return a password using "xxxx-xxxx-xxxx-xxxxx"
+     * 
+     * @throws NoSuchAlgorithmException the encryption algorithm is not supported
+     * @throws UnsupportedEncodingException the requested encoding is not supported
+     */
+    public static char[] create( String seed )
+        throws NoSuchAlgorithmException, UnsupportedEncodingException
+    {
+        return create(
+            seed.toCharArray()
+            );
+    }
+
+    /**
+     * @param seed the default password supplied by the caller
+     * @return a password using "xxxx-xxxx-xxxx-xxxxx"
+     * @throws NoSuchAlgorithmException the encryption algorithm is not supported
+     * @throws UnsupportedEncodingException the requested encoding is not supported
+     */
+    public static final char[] create( char[] seed )
+        throws NoSuchAlgorithmException, UnsupportedEncodingException
+    {
+        return create(
+            seed,
+            PasswordFactory.SALT,
+            PasswordFactory.COUNT
+            );
+    }
+
+    /**
+     * Creates a default password using "xxxx-xxxx-xxxx-xxxxx".
+     *
+     * @param salt the password salt
+     * @param password the default password
+     * @param count number of MessageDigest iterations
+     * @return the default password
+     * @throws NoSuchAlgorithmException the encryption algorithm is not supported
+     * @throws UnsupportedEncodingException the requested encoding is not supported
+     */
+    public static char [] create( char[] password, byte[] salt, int count )
+        throws NoSuchAlgorithmException, UnsupportedEncodingException
+    {
+        char [] result = null;
+        MessageDigest sha1 = MessageDigest.getInstance( "SHA1" );
+        byte [] passwordMask = new String( password ).getBytes( "UTF-8" );
+        byte [] temp = new byte[salt.length + passwordMask.length];
+        byte [] digest = null;
+
+        StringBuilder stringBuffer = new StringBuilder();
+
+        // combine the password with the salt string into a byte[9
+
+        System.arraycopy( passwordMask, 0, temp, 0, passwordMask.length );
+        System.arraycopy( salt, 0, temp, passwordMask.length, salt.length );
+
+        // create a hash over and over to make it a bit random
+
+        digest = temp;
+
+        for (int i = 0; i < count; i++)
+        {
+            sha1.update( digest );
+            digest = sha1.digest();
+        }
+
+        // build a well-formed password string to be usable
+        // by a human
+
+        long long1 = createLong( digest, 0 );
+        long long2 = createLong( digest, 4 );
+        long long3 = createLong( digest, 8 );
+        long long4 = createLong( digest, 12 );
+
+        stringBuffer.append( Long.toHexString( long1 ).substring( 0, 4 ) );
+        stringBuffer.append( '-' );
+        stringBuffer.append( Long.toHexString( long2 ).substring( 0, 4 ) );
+        stringBuffer.append( '-' );
+        stringBuffer.append( Long.toHexString( long3 ).substring( 0, 4 ) );
+        stringBuffer.append( '-' );
+        stringBuffer.append( Long.toHexString( long4 ).substring( 0, 5 ) );
+
+        // copy the password
+        result = new char[stringBuffer.length()];
+
+        for (int i = 0; i < stringBuffer.length(); i++)
+        {
+            result[i] = stringBuffer.charAt( i );
+        }
+
+        // wipe out the StringBuilder
+        for (int i = 0; i < stringBuffer.length(); i++)
+        {
+            stringBuffer.setCharAt( i, ' ' );
+        }
+
+        return result;
+    }
+
+    /**
+     * Gets bytes from an array into a long.
+     *
+     * @param buf where to get the bytes
+     * @param nOfs index from where to read the data
+     * @return the 64bit integer
+     */
+    private static long createLong(byte [] buf, int nOfs)
+    {
+        return
+            ((long)(( buf[nOfs    ]          << 24) |
+                    ((buf[nOfs + 1] & 0x0ff) << 16) |
+                    ((buf[nOfs + 2] & 0x0ff) <<  8) |
+                    ( buf[nOfs + 3] & 0x0ff       )) << 32) |
+            ((long)(( buf[nOfs + 4]          << 24) |
+                    ((buf[nOfs + 5] & 0x0ff) << 16) |
+                    ((buf[nOfs + 6] & 0x0ff) <<  8) |
+                    ( buf[nOfs + 7] & 0x0ff       )) & 0x0ffffffffL);
+    }
+}
diff --git a/yaafi-crypto/src/java/org/apache/fulcrum/jce/crypto/PasswordParameters.java b/yaafi-crypto/src/java/org/apache/fulcrum/jce/crypto/PasswordParameters.java
new file mode 100644
index 0000000..efb5022
--- /dev/null
+++ b/yaafi-crypto/src/java/org/apache/fulcrum/jce/crypto/PasswordParameters.java
@@ -0,0 +1,46 @@
+package org.apache.fulcrum.jce.crypto;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+/**
+ * Parameters for creating a password.
+ *
+ * @author <a href="mailto:siegfried.goeschl@it20one.at">Siegfried Goeschl</a>
+ */
+
+public interface PasswordParameters
+{
+    /** Parameter for the number of SHA1 invocation */
+    int COUNT = 20;
+
+    /** The default password used for creating the internal password */
+    char[] DEFAULTPASSWORD = {
+        (char) 'f', (char) 'u', (char) 'l', (char) 'c',
+        (char) 'r', (char) 'u', (char) 'm', (char) '-',
+        (char) 'y', (char) 'a', (char) 'a', (char) 'f',
+        (char) 'i'
+        };
+
+    /** The password salt */
+    byte[] SALT = {
+        (byte)0xc6, (byte)0x74, (byte)0x81, (byte)0x8a,
+        (byte)0x7b, (byte)0xe8, (byte)0xfe, (byte)0x99
+        };
+}
diff --git a/yaafi-crypto/src/java/org/apache/fulcrum/jce/crypto/SmartDecryptingInputStream.java b/yaafi-crypto/src/java/org/apache/fulcrum/jce/crypto/SmartDecryptingInputStream.java
new file mode 100644
index 0000000..1521134
--- /dev/null
+++ b/yaafi-crypto/src/java/org/apache/fulcrum/jce/crypto/SmartDecryptingInputStream.java
@@ -0,0 +1,381 @@
+package org.apache.fulcrum.jce.crypto;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.security.GeneralSecurityException;
+
+
+/**
+ * An input stream that determine if the originating input stream
+ * was encrypted or not. This magic only works for well-known file
+ * types though.
+ *
+ * @author <a href="mailto:siegfried.goeschl@it20one.at">Siegfried Goeschl</a>
+ */
+public class SmartDecryptingInputStream extends ByteArrayInputStream
+{
+    /** The encodings to be checked for XML */
+    private static final  String[] ENCODINGS = { "ISO-8859-1", "UTF-8", "UTF-16" };
+
+    /**
+     * Constructor
+     *
+     * @param cryptoStreamFactory the CryptoStreamFactory for creating a cipher stream
+     * @param is the input stream to be decrypted
+     * @throws IOException if file not found
+     * @throws GeneralSecurityException if security check fails
+     */
+    public SmartDecryptingInputStream(
+        CryptoStreamFactory cryptoStreamFactory,
+        InputStream is )
+        throws IOException, GeneralSecurityException
+    {
+        this( cryptoStreamFactory, is, null );
+    }
+
+    /**
+     * Constructor
+     *
+     * @param cryptoStreamFactory the CryptoStreamFactory for creating a cipher stream
+     * @param is the input stream to be decrypted
+     * @param password the password for decryption
+     * 
+     * @throws IOException if file not found
+     * @throws GeneralSecurityException if security check fails 
+     */
+    public SmartDecryptingInputStream(
+        CryptoStreamFactory cryptoStreamFactory,
+        InputStream is,
+        char[] password )
+        throws IOException, GeneralSecurityException
+    {
+        super( new byte[0] );
+
+        byte[] content = null;
+        byte[] plain = null;
+
+        // store the data from the input stream
+
+        ByteArrayOutputStream baosCipher = new ByteArrayOutputStream();
+        ByteArrayOutputStream baosPlain = new ByteArrayOutputStream();
+        this.copy( is, baosCipher );
+
+        content = baosCipher.toByteArray();
+        plain = content;
+
+        if( this.isEncrypted(content) == true )
+        {
+            InputStream cis = null;
+            ByteArrayInputStream bais = new ByteArrayInputStream(content);
+
+            if( ( password != null ) && ( password.length > 0 ) )
+            {
+                cis = cryptoStreamFactory.getInputStream( bais, password );
+            }
+            else
+            {
+                cis = cryptoStreamFactory.getInputStream( bais );
+            }
+
+            copy( cis, baosPlain );
+            plain = baosPlain.toByteArray();
+        }
+
+        // initialize the inherited instance
+
+        if( plain != null )
+        {
+            this.buf = plain;
+            this.pos = 0;
+            this.count = buf.length;
+        }
+    }
+
+    /**
+     * Determine if the content is encrypted. We are
+     * using our knowledge about block lenght, check
+     * for XML, ZIP and PDF files and at the end of
+     * the day we are just guessing.
+     *
+     * @param content the data to be examined
+     * @return true if this is an encrypted file
+     * @throws IOException unable to read the content
+     */
+    private boolean isEncrypted( byte[] content )
+        throws IOException
+    {
+        if( content.length == 0 )
+        {
+            return false;
+        }
+        else if( ( content.length % 8 ) != 0 )
+        {
+            // the block length is 8 bytes - if the length
+            // is not a multipe of 8 then the content was
+            // definitely not encrypted
+            return false;
+        }
+        else if( this.isPDF(content) )
+        {
+            return false;
+        }
+        else if( this.isXML(content) )
+        {
+            return false;
+        }
+        else if( this.isZip(content) )
+        {
+            return false;
+        }
+        else if( this.isUtf16Text(content) )
+        {
+            return false;
+        }
+        else
+        {
+            for( int i=0; i<content.length; i++ )
+            {
+                // do we have control characters in it?
+
+                char ch = (char) content[i];
+
+                if( this.isAsciiControl(ch) )
+                {
+                    return true;
+                }
+            }
+
+            return false;
+        }
+    }
+
+    /**
+     * Pumps the input stream to the output stream.
+     *
+     * @param is the source input stream
+     * @param os the target output stream
+     * @return the number of bytes copied
+     * @throws IOException the copying failed
+     */
+    public long copy( InputStream is, OutputStream os )
+        throws IOException
+    {
+        byte[] buf = new byte[1024];
+        int n = 0;
+        long total = 0;
+
+        while ((n = is.read(buf)) > 0)
+        {
+            os.write(buf, 0, n);
+            total += n;
+        }
+
+        is.close();
+        os.flush();
+        os.close();
+
+        return total;
+    }
+
+    /**
+     * Count the number of occurences for the given value
+     * @param content the content to examine
+     * @param value the value to look fo
+     * @return the number of matches
+     */
+    private int count( byte[] content, byte value )
+    {
+        int result = 0;
+
+        for( int i=0; i<content.length; i++ )
+        {
+            if( content[i] == value )
+            {
+                result++;
+            }
+        }
+
+        return result;
+    }
+
+    /**
+     * Detect the BOM of an UTF-16 (mandatory) or UTF-8 document (optional)
+     * @param content the content to examine
+     * @return true if the content contains a BOM
+     */
+    private boolean hasByteOrderMark( byte[] content )
+    {
+        if( ( (content[0] == 0xFF) && (content[1] == 0xFF) ) ||
+            ( (content[0] == 0xFF) && (content[1] == 0xFF) ) )
+        {
+            return true;
+        }
+        else
+        {
+            return false;
+        }
+    }
+
+    /**
+     * Check this is a UTF-16 text document.
+     *
+     * @param content the content to examine
+     * @return true if it is a XML document
+     * @throws IOException unable to read the content
+     */
+    private boolean isUtf16Text( byte[] content ) throws IOException
+    {
+        if( content.length < 2 )
+        {
+            return false;
+        }
+
+        if( this.hasByteOrderMark( content ) )
+        {
+            // we should have plenty of 0x00 in a text file
+
+            int estimate = (content.length-2)/3;
+
+            if( this.count(content,(byte)0) > estimate )
+            {
+                return true;
+            }
+        }
+
+        return false;
+    }
+
+    /**
+     * Check various encondings to determine if "<?xml"
+     * and "?>" appears in the data.
+     *
+     * @param content the content to examine
+     * @return true if it is a XML document
+     * @throws IOException unable to read the content
+     */
+    private boolean isXML( byte[] content ) throws IOException
+    {
+        if( content.length < 3 )
+        {
+            return false;
+        }
+
+        for( int i=0; i<ENCODINGS.length; i++ )
+        {
+            String currEncoding = ENCODINGS[i];
+
+            String temp = new String( content, currEncoding );
+
+            if( ( temp.indexOf("<?xml") >= 0 ) && ( temp.indexOf("?>") > 0 ) )
+            {
+                return true;
+            }
+        }
+
+        return false;
+    }
+
+    /**
+     * Check if this is a ZIP document
+     *
+     * @param content the content to examine
+     * @return true if it is a PDF document
+     */
+
+    private boolean isZip( byte[] content )
+    {
+        if( content.length < 64 )
+        {
+            return false;
+        }
+        else
+        {
+            // A ZIP starts with Hex: "50 4B 03 04"
+
+            if( ( content[0] == (byte) 0x50 ) &&
+                ( content[1] == (byte) 0x4B ) &&
+                ( content[2] == (byte) 0x03 ) &&
+                ( content[3] == (byte) 0x04 )  )
+            {
+                return true;
+            }
+            else
+            {
+                return false;
+            }
+        }
+    }
+
+    /**
+     * Check if this is a PDF document
+     *
+     * @param content the content to examine
+     * @return true if it is a PDF document
+     * @throws IOException unable to read the content
+     */
+    private boolean isPDF(byte[] content) throws IOException
+    {
+        if( content.length < 64 )
+        {
+            return false;
+        }
+        else
+        {
+            // A PDF starts with HEX "25 50 44 46 2D 31 2E"
+
+            if( ( content[0] == (byte) 0x25 ) &&
+                ( content[1] == (byte) 0x50 ) &&
+                ( content[2] == (byte) 0x44 ) &&
+                ( content[3] == (byte) 0x46 ) &&
+                ( content[4] == (byte) 0x2D ) &&
+                ( content[5] == (byte) 0x31 ) &&
+                ( content[6] == (byte) 0x2E )  )
+            {
+                return true;
+            }
+            else
+            {
+                return false;
+            }
+        }
+    }
+
+    /**
+     * Is this an ASCII control character?
+     * @param ch the charcter
+     * @return true is this in an ASCII character
+     */
+    private boolean isAsciiControl(char ch)
+    {
+        if( ( ch >= 0x0000 ) && ( ch <= 0x001F) )
+        {
+            return true;
+        }
+        else
+        {
+            return true;
+        }
+    }
+}
diff --git a/yaafi-crypto/src/java/org/apache/fulcrum/jce/crypto/StreamUtil.java b/yaafi-crypto/src/java/org/apache/fulcrum/jce/crypto/StreamUtil.java
new file mode 100644
index 0000000..fccd6d9
--- /dev/null
+++ b/yaafi-crypto/src/java/org/apache/fulcrum/jce/crypto/StreamUtil.java
@@ -0,0 +1,186 @@
+package org.apache.fulcrum.jce.crypto;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+
+/**
+ * Helper class to provde generic stream functions.
+ *
+ * @author <a href="mailto:siegfried.goeschl@it20one.at">Siegfried Goeschl </a>
+ */
+
+public final class StreamUtil
+{
+    /** the size of the internal buffer to copy streams */
+    private static final int BUFFER_SIZE = 1024;
+
+    /**
+     * Create an input stream supporting the following types
+     *
+     * <ul>
+     *  <li>String (using the UTF-8 encoded content)</li>
+     *  <li>File</li>
+     *  <li>byte[]</li>
+     *  <li>char[]</li>
+     *  <li>ByteArrayOutputStream</li>
+     *  <li>InputStream</li>
+     * </ul>
+     *
+     * @param source the source object
+     * @return the created input stream
+     * @throws java.io.IOException creating the input stream failed
+     */
+    public static InputStream createInputStream( Object source )
+        throws IOException
+    {
+        InputStream is;
+
+        // create an InputStream
+
+        if( source instanceof String )
+        {
+            byte[] content = ((String) source).getBytes("utf-8");
+            is = new ByteArrayInputStream( content );
+        }
+        else if( source instanceof File )
+        {
+            is = new FileInputStream( (File) source );
+        }
+        else if( source instanceof byte[] )
+        {
+            is = new ByteArrayInputStream( (byte[]) source );
+        }
+        else if( source instanceof char[] )
+        {
+            byte[] content = new String((char[])source).getBytes("utf-8");
+            is = new ByteArrayInputStream( content );
+        }
+        else if( source instanceof ByteArrayOutputStream )
+        {
+            byte[] content = ((ByteArrayOutputStream) source).toByteArray();
+            is = new ByteArrayInputStream( content );
+        }
+        else if( source instanceof InputStream )
+        {
+            is = (InputStream) source;
+        }
+        else
+        {
+            throw new IllegalArgumentException("Don't know hot to handle " + source.getClass().getName());
+        }
+
+        return is;
+    }
+
+    /**
+     * Create an output stream supporting the following types
+     *
+     * <ul>
+     *  <li>File</li>
+     *  <li>String</li>
+     *  <li>OutputStream</li>
+     * </ul>
+     *
+     * @param target the target object
+     * @return the output stream
+     * @throws java.io.IOException creating the output stream failed
+     */
+    public static OutputStream createOutputStream( Object target )
+        throws IOException
+    {
+        OutputStream os;
+
+        if( target instanceof File )
+        {
+            File currFile = (File) target;
+            createParentFile(currFile);
+            os = new FileOutputStream(currFile);
+        }
+        else if( target instanceof String )
+        {
+            File currFile = new File((String) target);
+            createParentFile(currFile);
+            os = new FileOutputStream(currFile);
+        }
+        else if( target instanceof OutputStream )
+        {
+            os = (OutputStream) target;
+        }
+        else
+        {
+            throw new IllegalArgumentException("Don't know hot to handle " + target.getClass().getName());
+        }
+
+        return os;
+    }
+
+    /**
+     * Pumps the input stream to the output stream.
+     *
+     * @param is the source input stream
+     * @param os the target output stream
+     * @return the number of bytes copied
+     * @throws java.io.IOException the copying failed
+     */
+    public static long copy( InputStream is, OutputStream os )
+        throws IOException
+    {
+        byte[] buf = new byte[BUFFER_SIZE];
+        int n = 0;
+        long total = 0;
+
+        while ((n = is.read(buf)) > 0)
+        {
+            os.write(buf, 0, n);
+            total += n;
+        }
+
+        is.close();
+
+        os.flush();
+        os.close();
+
+        return total;
+    }
+
+    /**
+     * Ensure that the parent directories exists before writing to
+     * the file.
+     * 
+     * @param currFile the file to write to
+     */
+    private static void createParentFile(File currFile)
+    {
+        File parentFile = currFile.getParentFile();
+        
+        if((parentFile != null) && !parentFile.exists())
+        {
+            parentFile.mkdirs();
+        }
+    }
+}
\ No newline at end of file
diff --git a/yaafi-crypto/src/site/resources/announcements/announcement-1.0.6.txt b/yaafi-crypto/src/site/resources/announcements/announcement-1.0.6.txt
new file mode 100644
index 0000000..271f730
--- /dev/null
+++ b/yaafi-crypto/src/site/resources/announcements/announcement-1.0.6.txt
@@ -0,0 +1 @@
+The fulcrum-yaafi-crypto-team is pleased to announce the fulcrum-yaafi-crypto-1.0.6.jar release!

Fulcrum YAAFI Crypto Library

Changes in this version include:

New features:
o Moving the code out of YAAFI and make a standalone library. 


Changes:
o Using the official fulcrum-parent-1 pom. 


Have fun!
-fulcrum-yaafi-crypto-team
\ No newline at end of file
diff --git a/yaafi-crypto/src/site/site.xml b/yaafi-crypto/src/site/site.xml
new file mode 100644
index 0000000..da3532b
--- /dev/null
+++ b/yaafi-crypto/src/site/site.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements.  See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership.  The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License.  You may obtain a copy of the License at
+
+   http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied.  See the License for the
+ specific language governing permissions and limitations
+ under the License.
+-->
+<project xmlns="http://maven.apache.org/DECORATION/1.4.0" 
+  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://maven.apache.org/DECORATION/1.4.0 http://maven.apache.org/xsd/decoration-1.4.0.xsd"
+  name="Fulcrum YAAFI Crypto Library">
+  <body>
+    <menu name="Overview">
+      <item name="Overview"            href="/index.html"/>
+      <item name="Downloads"           href="/downloads.html"/>
+    </menu>  
+    <menu ref="reports"></menu>
+  </body>
+</project>
diff --git a/yaafi-crypto/src/test/data/empty.txt b/yaafi-crypto/src/test/data/empty.txt
new file mode 100644
index 0000000..e69de29
diff --git a/yaafi-crypto/src/test/data/plain-iso-8859-1.xml b/yaafi-crypto/src/test/data/plain-iso-8859-1.xml
new file mode 100644
index 0000000..2d637b1
--- /dev/null
+++ b/yaafi-crypto/src/test/data/plain-iso-8859-1.xml
@@ -0,0 +1,56 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements.  See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership.  The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License.  You may obtain a copy of the License at
+
+   http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied.  See the License for the
+ specific language governing permissions and limitations
+ under the License.
+-->
+
+<role-list>
+  <!-- Use minimal role entry -->
+  <role
+    name="org.apache.fulcrum.yaafi.service.servicemanager.ServiceManagerService"
+    default-class="org.apache.fulcrum.yaafi.service.servicemanager.ServiceManagerServiceImpl"
+  />
+  <!-- For the rest of the services use a full-blown role entry -->
+  <role
+    name="org.apache.fulcrum.yaafi.service.systemproperty.SystemPropertyService"
+    shorthand="SystemPropertyService"
+    default-class="org.apache.fulcrum.yaafi.service.systemproperty.SystemPropertyServiceImpl"
+    early-init="true"
+    description="�������"
+  />
+  <!--
+    This ReconfigurationService is instantiated during the first access. Until
+    then it is doing nothing.
+  -->
+  <role
+    name="org.apache.fulcrum.yaafi.service.reconfiguration.ReconfigurationService"
+    shorthand="ReconfigurationService"
+    default-class="org.apache.fulcrum.yaafi.service.reconfiguration.ReconfigurationServiceImpl"
+    early-init="false"
+    component-type="avalon"
+    component-flavour="yaafi"
+    description="Monitors the componentConfiguration.xml to reconfigure YAAFI"
+  />
+  <role
+    name="org.apache.fulcrum.yaafi.TestComponent"
+    shorthand="test"
+    default-class="org.apache.fulcrum.yaafi.TestComponentImpl"
+    early-init="true"
+    component-type="merlin"
+    description="A simple test component"
+  />
+</role-list>
diff --git a/yaafi-crypto/src/test/data/plain-utf16.xml b/yaafi-crypto/src/test/data/plain-utf16.xml
new file mode 100644
index 0000000..71fe210
Binary files /dev/null and b/yaafi-crypto/src/test/data/plain-utf16.xml differ
diff --git a/yaafi-crypto/src/test/data/plain-utf8.xml b/yaafi-crypto/src/test/data/plain-utf8.xml
new file mode 100644
index 0000000..14dd45c
--- /dev/null
+++ b/yaafi-crypto/src/test/data/plain-utf8.xml
@@ -0,0 +1,56 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements.  See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership.  The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License.  You may obtain a copy of the License at
+
+   http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied.  See the License for the
+ specific language governing permissions and limitations
+ under the License.
+-->
+
+<role-list>
+  <!-- Use minimal role entry -->
+  <role
+    name="org.apache.fulcrum.yaafi.service.servicemanager.ServiceManagerService"
+    default-class="org.apache.fulcrum.yaafi.service.servicemanager.ServiceManagerServiceImpl"
+  />
+  <!-- For the rest of the services use a full-blown role entry -->
+  <role
+    name="org.apache.fulcrum.yaafi.service.systemproperty.SystemPropertyService"
+    shorthand="SystemPropertyService"
+    default-class="org.apache.fulcrum.yaafi.service.systemproperty.SystemPropertyServiceImpl"
+    early-init="true"
+    description="ÜÖÄüöäß"
+  />
+  <!--
+    This ReconfigurationService is instantiated during the first access. Until
+    then it is doing nothing.
+  -->
+  <role
+    name="org.apache.fulcrum.yaafi.service.reconfiguration.ReconfigurationService"
+    shorthand="ReconfigurationService"
+    default-class="org.apache.fulcrum.yaafi.service.reconfiguration.ReconfigurationServiceImpl"
+    early-init="false"
+    component-type="avalon"
+    component-flavour="yaafi"
+    description="Monitors the componentConfiguration.xml to reconfigure YAAFI"
+  />
+  <role
+    name="org.apache.fulcrum.yaafi.TestComponent"
+    shorthand="test"
+    default-class="org.apache.fulcrum.yaafi.TestComponentImpl"
+    early-init="true"
+    component-type="merlin"
+    description="A simple test component"
+  />
+</role-list>
diff --git a/yaafi-crypto/src/test/data/plain.groovy b/yaafi-crypto/src/test/data/plain.groovy
new file mode 100644
index 0000000..8f7243e
--- /dev/null
+++ b/yaafi-crypto/src/test/data/plain.groovy
@@ -0,0 +1,44 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+import java.io.File;
+
+def getVerse() {
+    lines= []
+    lines+= ( "Karma " * 5 ) + "Chameleon,"
+    lines+= (["you come and go"] * 2).join(", ")+"."
+    lines+= "Loving would be easy if your"+
+              " colours were like my dream"
+    lines+= (["red gold and green"]*2).join(", ")+"."
+
+    verse= lines.collect { it + "\n" }
+    return verse
+}
+
+println "Writing out to file.\n"
+myFile= new File("temp/karma.txt")
+myFile.write("Karma Chameleon\n\n")
+getVerse().each { myFile.append(it) }
+
+println "\nWith line numbering ...\n"
+count=1
+myFile.eachLine { println count++ + ": " + it }
+
+println "\nAs a single string ...\n"
+println myFile.readLines().join(" | ")
+myFile.delete();
diff --git a/yaafi-crypto/src/test/data/plain.pdf b/yaafi-crypto/src/test/data/plain.pdf
new file mode 100644
index 0000000..ba2cdb4
--- /dev/null
+++ b/yaafi-crypto/src/test/data/plain.pdf
@@ -0,0 +1,716 @@
+%PDF-1.3
+%����
+4 0 obj
+<< /Type /Info
+/Producer (FOP 0.20.5) >>
+endobj
+5 0 obj
+<< /Length 340 /Filter [ /ASCII85Decode /FlateDecode ]
+ >>
+stream
+Gb!$A0i,\@&;>?.MAt:na8+`Ep0'a.QpC4s(dd:_!@8=)/`PYt[t-@>p=dDUet)KIpMTB:eOG.$,]L/a<2s&&;dj&a,Z),d$:4ob1`?J!KuX@'hH@]/\3"]j`1*F@c;L?:(361t!b#'%U;#QZ((XlFPij/jU[f)'bSE2K.Q1rc*sFS*;r@E;h1pDWq5b';lTb78\qH$MM8(V8a@$1dWIIbP4//sIU!,RB:M1a'ZndDn1[[!&F65TY(j0B'&,hEiL5GE2YBI&:L2pu(DM4PCs(CiPi9Klc5IH2omB/qOD9K%C7%%krZ:I'l+?c."n]tWFL<o*1`B$Ha"aJOqDZ~>
+endstream
+endobj
+6 0 obj
+<< /Type /Page
+/Parent 1 0 R
+/MediaBox [ 0 0 594 842 ]
+/Resources 3 0 R
+/Contents 5 0 R
+>>
+endobj
+7 0 obj
+<< /Length 21 /Filter [ /ASCII85Decode /FlateDecode ]
+ >>
+stream
+Garg^iGoCd!WWA\!CQ~>
+endstream
+endobj
+8 0 obj
+<< /Type /Page
+/Parent 1 0 R
+/MediaBox [ 0 0 594 842 ]
+/Resources 3 0 R
+/Contents 7 0 R
+>>
+endobj
+9 0 obj
+<< /Length 997 /Filter [ /ASCII85Decode /FlateDecode ]
+ >>
+stream
+Gb"/j95iNL&:j6IMS1l-FLpq]0b;^.,,#?E022tARL#nF(!oAEpK`@[]>2GRTlNO*0)<T44pLfr]Cqh.SIZNg0Fa7WismC0*CcuW1SQ9g@Y=p(36A&YlVTS<r\Hbcn%#\er2:TRr]Vij7:%P-a5e2]55@)S@D$=g\=q(5[*1N9.p"=?l[&dkEM->Gd@)!l:;d-BQ=sV-bOfO!Cn2t4,m\Ouooi`pd!G9]LOAeLaWLP[8*POa7C8qb\>sq/]$K2]_RSpjUo4B>^(\Q&G82L@o)"[f"S8<X84Z:TK6D@7Qj#)6Q5S;c96jKWi0)\5j[kMfEEg06FX^gB-.=QKoo^IA+WW>7V&5)G2bK2?E(\YY'M0a.EP9IR+$GULl[tE:W<)1(SCW#2OH>R\%](0`C.TZkBdcfqM5J`$bH;krG7![GCdhYFUZ&9k/gb.lp8$2GKo$IIY8\)edVJJUW!V/</S,Y&b;S52\)_u2<YThKO31oo\c [...]
+endstream
+endobj
+10 0 obj
+<< /Type /Page
+/Parent 1 0 R
+/MediaBox [ 0 0 594 842 ]
+/Resources 3 0 R
+/Contents 9 0 R
+/Annots 11 0 R
+>>
+endobj
+11 0 obj
+[
+12 0 R
+14 0 R
+16 0 R
+18 0 R
+20 0 R
+22 0 R
+24 0 R
+26 0 R
+28 0 R
+30 0 R
+32 0 R
+]
+endobj
+12 0 obj
+<< /Type /Annot
+/Subtype /Link
+/Rect [ 68.4 667.35 88.986 657.85 ]
+/C [ 0 0 0 ]
+/Border [ 0 0 0 ]
+/A 13 0 R
+/H /I
+>>
+endobj
+14 0 obj
+<< /Type /Annot
+/Subtype /Link
+/Rect [ 68.4 649.063 107.986 639.563 ]
+/C [ 0 0 0 ]
+/Border [ 0 0 0 ]
+/A 15 0 R
+/H /I
+>>
+endobj
+16 0 obj
+<< /Type /Annot
+/Subtype /Link
+/Rect [ 68.4 630.776 105.355 621.276 ]
+/C [ 0 0 0 ]
+/Border [ 0 0 0 ]
+/A 17 0 R
+/H /I
+>>
+endobj
+18 0 obj
+<< /Type /Annot
+/Subtype /Link
+/Rect [ 97.2 611.489 144.196 601.989 ]
+/C [ 0 0 0 ]
+/Border [ 0 0 0 ]
+/A 19 0 R
+/H /I
+>>
+endobj
+20 0 obj
+<< /Type /Annot
+/Subtype /Link
+/Rect [ 97.2 592.202 163.728 582.702 ]
+/C [ 0 0 0 ]
+/Border [ 0 0 0 ]
+/A 21 0 R
+/H /I
+>>
+endobj
+22 0 obj
+<< /Type /Annot
+/Subtype /Link
+/Rect [ 97.2 572.915 154.731 563.415 ]
+/C [ 0 0 0 ]
+/Border [ 0 0 0 ]
+/A 23 0 R
+/H /I
+>>
+endobj
+24 0 obj
+<< /Type /Annot
+/Subtype /Link
+/Rect [ 68.4 554.628 104.822 545.128 ]
+/C [ 0 0 0 ]
+/Border [ 0 0 0 ]
+/A 25 0 R
+/H /I
+>>
+endobj
+26 0 obj
+<< /Type /Annot
+/Subtype /Link
+/Rect [ 97.2 535.341 198.03 525.841 ]
+/C [ 0 0 0 ]
+/Border [ 0 0 0 ]
+/A 27 0 R
+/H /I
+>>
+endobj
+28 0 obj
+<< /Type /Annot
+/Subtype /Link
+/Rect [ 97.2 516.054 196.443 506.554 ]
+/C [ 0 0 0 ]
+/Border [ 0 0 0 ]
+/A 29 0 R
+/H /I
+>>
+endobj
+30 0 obj
+<< /Type /Annot
+/Subtype /Link
+/Rect [ 68.4 497.767 101.127 488.267 ]
+/C [ 0 0 0 ]
+/Border [ 0 0 0 ]
+/A 31 0 R
+/H /I
+>>
+endobj
+32 0 obj
+<< /Type /Annot
+/Subtype /Link
+/Rect [ 68.4 479.48 96.614 469.98 ]
+/C [ 0 0 0 ]
+/Border [ 0 0 0 ]
+/A 33 0 R
+/H /I
+>>
+endobj
+34 0 obj
+<< /Length 223 /Filter [ /ASCII85Decode /FlateDecode ]
+ >>
+stream
+GarW30b8k$%#+HQ'cgkip<"DrNM)&9#UIj.Lm*[M_>h9-_S@J+;d]+Pqc\m2<>mV<OJa:57lH-hdQl8rY_34NB/H2GhJh4?;)TSKD5K1fe%hi]U3#5"&mFN5\:^<$nK.';5IETfXn1!MS^HA9Nu@i*@N8J+"cX>eImW1W]q4$^>KoP_JuXO(CLcd`fg\<U1sp`NO/MFgCFSo7EXdd-0SoQ*\m.Ru~>
+endstream
+endobj
+35 0 obj
+<< /Type /Page
+/Parent 1 0 R
+/MediaBox [ 0 0 594 842 ]
+/Resources 3 0 R
+/Contents 34 0 R
+>>
+endobj
+36 0 obj
+<< /Length 1077 /Filter [ /ASCII85Decode /FlateDecode ]
+ >>
+stream
+Gb!#[95bIu&AI=/pm<+;...@UD>ll-dV%Rr-P)fF$,p,i.6#7_R:$Z"X'$T/%NFKLCNQDf%<FYjnb?K^/@nOHO[#"V@?6a)BgCYa58rr9ZdiT!?$;JE:$$m36dIpK9O[!NOW5Q:#aIp+D+="jF"#R93=VUgF]8-O6E<E3OqYY/;*9>Zt?m4,STQVM^`?#.&1m[p.bf=$dpfsS<T5gntl"B8.:9)s2UJ0\k'Th_C&0*Qsoa^2#8UWJl$"<%-jn*8'Y+q;;i\X"FoY6_B&Yb4Qm4'-,'p;sK?aV[X)K<V4\AH#qEq<Xaehf]5_e(?p@iqRP9*k-Eg@<5HuG2=h_8hc,%8;T.eE"^TdlOBP0kk69I.,l0-O_f615snNq.e++?J^DJ8$=UnB"d).K??iam!ArpbSF3/eUI [...]
+endstream
+endobj
+37 0 obj
+<< /Type /Page
+/Parent 1 0 R
+/MediaBox [ 0 0 594 842 ]
+/Resources 3 0 R
+/Contents 36 0 R
+>>
+endobj
+38 0 obj
+<< /Length 1087 /Filter [ /ASCII85Decode /FlateDecode ]
+ >>
+stream
+Gb!#[95bIu&AI=/pt-X&G%T>Z#o+2;6;U+IG1?ps%XDl`#;1PLhoB&aGQ$0IKQ82tQ,K*R2rBSGYM7`g943J^eo#+8Y?8EF+/gZ_fp<S\b.`G#k$S<j[G_<!CVR,M-c#8:I:hknCS>>_SZXg^Bo.^+<_%33k]O&#]'iFUh60*V(a(7C:;&\4YBAmUq>^2H+i#*08>Wj,3S]*ir]Fb)B_O!"o(Z_mrpf"-Eq*mt7PFg\0sr>R7k2C!Wi?uLKO+0(=q[ukDHF@h]6(>olrr,NErQ8*]@M\c`idUi/P.U*$)jASQN6M5!(kW,6_-b,?4$hgPG;/#N@&$+'4gTF^T2F:7@J[2F"P@m^7p.;%h"iE[<%U"cm?H8,\%)g(W)>uOnjK\jeJ#3I+oZDm>_Wt.#orNmr=m7)HK@n@cQhW70t=25>^?13ZJjuJG"eoFO>4V\LmB0E?s;PB$cX(M+W.(bs9[t8IAnF70NdI\l!]b0ga6SQZ [...]
+endstream
+endobj
+39 0 obj
+<< /Type /Page
+/Parent 1 0 R
+/MediaBox [ 0 0 594 842 ]
+/Resources 3 0 R
+/Contents 38 0 R
+>>
+endobj
+40 0 obj
+<< /Length 873 /Filter [ /ASCII85Decode /FlateDecode ]
+ >>
+stream
+Gb!#Z95>J$&AJ$Cka3?aC8@+qJeDbG:$Z7,LmLGBHEc#5-I?(>..lCuDsLi$2<geE,.k0;UMml7Olh),G]OBd@?11u5qkV'T`<E*E/F8r5XbVQU(W+<W+?;dW_i^'ID5j-Y0dd0J(>YX!b#oQMo:Jdgh7X`3Da@pHCi.8cgZ"7Q@OL3bA(*k:FTn]EVB2-qkY:Z'-)g/@MrWWO"\8?#L1$neRF,jOhq]\o9K43!`RGF>=(lU(Y;=8C1l=4:J3tlM-bg@48l=S@48P)jM,N%[aBWQCJL-j,;ko/]o<!==dsVsRGY.:R7YEjNIq/Do9RBH5AqQc+\>WKF207t";0rPYm=H3[[TD%hq$OXIMkiOUlWnX%fF,;nTu-(kAk0M,*i8M$Aes@eMZ@0J-I<tJmS.!l3gJTa$9h6hep$qcdI<Pac:iE"TZ\a_dP`Z>b;E2=2([ClS`M>lXRF1&E-a4G!;QcTB1S'r";3()2Pp>C-\Xp\K [...]
+endstream
+endobj
+41 0 obj
+<< /Type /Page
+/Parent 1 0 R
+/MediaBox [ 0 0 594 842 ]
+/Resources 3 0 R
+/Contents 40 0 R
+/Annots 42 0 R
+>>
+endobj
+42 0 obj
+[
+43 0 R
+45 0 R
+47 0 R
+]
+endobj
+43 0 obj
+<< /Type /Annot
+/Subtype /Link
+/Rect [ 66.9 650.686 114.75 639.686 ]
+/C [ 0 0 0 ]
+/Border [ 0 0 0 ]
+/A 44 0 R
+/H /I
+>>
+endobj
+45 0 obj
+<< /Type /Annot
+/Subtype /Link
+/Rect [ 66.9 632.922 132.361 621.922 ]
+/C [ 0 0 0 ]
+/Border [ 0 0 0 ]
+/A 46 0 R
+/H /I
+>>
+endobj
+47 0 obj
+<< /Type /Annot
+/Subtype /Link
+/Rect [ 66.9 615.158 141.414 604.158 ]
+/C [ 0 0 0 ]
+/Border [ 0 0 0 ]
+/A 48 0 R
+/H /I
+>>
+endobj
+49 0 obj
+<< /Length 2056 /Filter [ /ASCII85Decode /FlateDecode ]
+ >>
+stream
+Gb"/)>Ar7S'Roe[d%g1DQ5B(c@OTT]gLVd</2=SgV@Tt#VoB]<Q0kF$Y9->5&h-\`>]db&ide7%Ob`,rST>LY=\N/77o9>$Zrg$FJC,Q>?^O21U:U_hT__"fel+Qf,QS3HU;_QQH&;S&kT]j9/UgVT8;*AeXb\t6-j6g/,lgBDgi^$LdUJ[ef"5e4(I\Va]q(?[$5`jhifXB<s*\-(i#XI(/qBm2#\no[#aLnXNKaH[Q2V/E0NNh+_-TQsQthha=iAf`WkL:^/_.qbC\(c_qb'*8ma<n)l-2b[WmKp2C3`CiSD^$1=k\/-)@;J)#kFKgb3UCGZBPQWi43%ZV<'=,,I_dp1YIc,Hm94)"J[?'['Ydnm*I:ka*<HM)Hd7ojXmkA3i]<@*HVNr&q(*9C$GRuZj!*FM&9.Y8Ppc6f&TrW8ocn21bC7O=fH,1'4L@1hcSWI)*@sMpD1F)#]!+D^fBF-(g1-ImLcp3$/Kf>,d(H*>H [...]
+endstream
+endobj
+50 0 obj
+<< /Type /Page
+/Parent 1 0 R
+/MediaBox [ 0 0 594 842 ]
+/Resources 3 0 R
+/Contents 49 0 R
+>>
+endobj
+51 0 obj
+<< /Length 1812 /Filter [ /ASCII85Decode /FlateDecode ]
+ >>
+stream
+GauHL9lo&I&A@C2i+O3aie%6QR8.@a6qQ3+S^uBa''DMXPg-2A8l9TV?XEd9#XEncWpMV\NJSqfm(RoF(>t\8jG3IDA.X=F@Y3[5C4a7M"9TqKA&&Ao5tVcW0Fh\FnG2@P=Ol$]'i$R%@?rZf2>b*fQAf5&>MdoBWbo1MZWUXf04=MFA3-4X.45$Jq><\*3sQ21"Je#2N9"@M=@+1Se%r<m#VtlN*[\WrhFJ_C8:)G,`t3l*qc.K6gWd<9G;n:DrFXMMNtS%?q,.X(*kJd_57&8p=XqupM=CCF\kQ'?rDc__2TpO3=LLZmCe)g@Q#gm#Zuso9g@*V"=kN%8cE-"`ma;M2SnET:.3oes>qWS?AQ'=,9S4Qc7C._l4F:shG2utJgWe>^?I,`bZ"`Tu/?1p@MKXHmP:VIq[b(mFb%B=K:.R$tMno5gZ>0+aa4%H&oW!1_m[V7%Yj-(0<*aq-'+>c/Qo++2(l-c;h7g#M.6_a6f` [...]
+endstream
+endobj
+52 0 obj
+<< /Type /Page
+/Parent 1 0 R
+/MediaBox [ 0 0 594 842 ]
+/Resources 3 0 R
+/Contents 51 0 R
+>>
+endobj
+53 0 obj
+<< /Length 858 /Filter [ /ASCII85Decode /FlateDecode ]
+ >>
+stream
+Gb!#Zhf%4&&:WfGn0:'FZd6C_WD_?rNi=K@A:#2@#UEA?K2+-"s4OXjiZs>Q<R[ltK7!@g]C50(InBne*[rjHTO^2.R%Ru$-W!3EoK&Y$fKY8//HJbn?ipTZ>P*>70uG\35>^pi@PC3Ho<oc!5=%!4?5a1YhJ8F\hKJ50lZ&QrhRr5*Iu5WWs46TZ"TU@'4UV2g5'810N"T$&XNMG%X:j:Tjq+L7&>e5DFqbQV&H3mtK\I[:OLOEXKM.e=?+C\:W10,sV"VEkWEV0%AAKV%6i2"E(SNgLA[IWPIo5TW.?Lic^1q\f3+OCPWZtL!'nbONpoVGQC`m\>nX.Cd#4rPO=p+@X'oH$9$>bgb'SBCFL^7m.aeacElkXSAJ7^u9.KXk[6(MgW""b=r$?g(K_9L.u,/>lK[$q>brNk.Pe%5ZlTP(F0Pd;MFJYcE9WGNADWA1Le01iZs$\qg50L@85(%[tS59>:8].@7ebjiN!?ORaGMd [...]
+endstream
+endobj
+54 0 obj
+<< /Type /Page
+/Parent 1 0 R
+/MediaBox [ 0 0 594 842 ]
+/Resources 3 0 R
+/Contents 53 0 R
+>>
+endobj
+55 0 obj
+<< /Length 926 /Filter [ /ASCII85Decode /FlateDecode ]
+ >>
+stream
+Gb!#Z9lJc?%)(h*ka3Ek8^sYhTtn+6>DBQe)Io+F#<Qp[!)6BK3UPEoOt#"gSL+M`Qik5a,Ebi`O-2]iUCT;RA5n\=4^sY<I-D\[R'PfIL_Jp"S:EO!0d<A1A0g&qT4:V"'c5pIahPG)JoL+j?'(AE@T5BA9,369lag9f[bK&UZ[6G73T5M&^!(U%!%P(O,LHJZC9mn1=O>&c)s8orJg-`:cDdSe'ThsJN%sR7j_fK8/j];r3@bAR@>lkqZZK!'\$t&el0YQcH\ISn@]A'ghU=u+53`KM/\AQ':-Tq_ju/'2LG3eVnl7gsbeYNU/l&P\6Q,LIUP!1ichVVfbVs&_RLq,3"]l!U)gl$F23Nn`=bYi(*?<ICN<M#'dNVp$*=@"WKBYWtWVCEn+^4P;)"'pe3&XgPR@Yk-XVjn&1BcAF39,/[m5bpf]m>r,/g-!iPr;S[;(I*E-sdBPq,l&C@J@DO0.p!,?TBB>Fb=S^Ai2/"P- [...]
+endstream
+endobj
+56 0 obj
+<< /Type /Page
+/Parent 1 0 R
+/MediaBox [ 0 0 594 842 ]
+/Resources 3 0 R
+/Contents 55 0 R
+>>
+endobj
+57 0 obj
+<< /Length 837 /Filter [ /ASCII85Decode /FlateDecode ]
+ >>
+stream
+Gb"/%95iQ=%)2U?kh$rV8[A!jL&u(YG1jHECQ&9]gOnN7=b,Tga6h6'5K]:/a[t)*G=Vd%(<)?1BThL\)SNbY87R\.=[Xr0BatN7KI\m?-mJ/YLac"T7l&Xt1QBg/\iZWG3CXN-r<O<N7"rU3$4k)^:&q%CVl[ms:%>U3c*ddR7%"/F(p2bUiE.B`*<1LQ56U>,&.#8>C@:S$0Xr)CUD!i*K(_Tc,>)`?Tb8t3F0U3j#a%B`-41,T:-g8:D\,ZX%]fu<p.3!!r)7'TAjCWiCA07`.21oQ5k\.XnGlp9/2iT^e2Ai%1M=JMOhn%"C#s/8+/ZF[c1cL!-!MC8heM=IhuDu-47Z?4]:!<hFC+]N0^V!1pTo3%gTcppq"\/69em%91)HLP2dp8bFJCYaV:')Vi8"h\?5&eX:+h-8?E.<i0s$LnU#*/Wb+!3]CdomHC^M7iQu0RiP`,4WA`YV*IR@:G7<]98@d4Sh`AeVQ/J1cf/D [...]
+endstream
+endobj
+58 0 obj
+<< /Type /Page
+/Parent 1 0 R
+/MediaBox [ 0 0 594 842 ]
+/Resources 3 0 R
+/Contents 57 0 R
+/Annots 59 0 R
+>>
+endobj
+59 0 obj
+[
+60 0 R
+62 0 R
+]
+endobj
+60 0 obj
+<< /Type /Annot
+/Subtype /Link
+/Rect [ 52.9 616.022 127.198 609.022 ]
+/C [ 0 0 0 ]
+/Border [ 0 0 0 ]
+/A 61 0 R
+/H /I
+>>
+endobj
+62 0 obj
+<< /Type /Annot
+/Subtype /Link
+/Rect [ 52.9 597.283 126.029 590.283 ]
+/C [ 0 0 0 ]
+/Border [ 0 0 0 ]
+/A 63 0 R
+/H /I
+>>
+endobj
+64 0 obj
+<< /Length 983 /Filter [ /ASCII85Decode /FlateDecode ]
+ >>
+stream
+Gb!#Z9lo#B&A@Zc1n;F6N?mi-RO66(.7qu[_N_RDe3+YQ.8p;I"6nn(GD5/2$774hV(`fjd_;X0HM:R?;=!_A&He1a=c3>-d24sJW=6nU`<aFI,MZ%6U&tLP)\UthY6PI=YR^IuU6!A-&>gus8SU4V5p.W[a`rBJ:%QEY35&'&aY_8uka@,:`Z<6g%g<d4&;6e9K)b:@NsFPS&#DW!b;0PJD$\Qs<<sjYX?cV1WIVV5+&PW62G#>rfYS]oEbXFfOWEBfcI+GUM6jG4b-MGFQ!KY.3G=:%nRaU9;`'4L'-<WS9&/93M(eVB?MCl1iua=*Q-5;rjW^0gf6OZj/JkgN\h*Mn;@DDT(;SmLNk*[$(gorSC&1]m-g$^m>RPp4M?@=a_JD#_#UP$8MS%pua]b<?VbmNr?]`WJ'Zc956*(^2&X$o8pOa/dQ&$cj%aPU3IMA%O6R8!0(`12eHkVOb\P&u"J0pEc#[J0@dO\PI=5EC/H$ [...]
+endstream
+endobj
+65 0 obj
+<< /Type /Page
+/Parent 1 0 R
+/MediaBox [ 0 0 594 842 ]
+/Resources 3 0 R
+/Contents 64 0 R
+>>
+endobj
+66 0 obj
+<< /Length 1163 /Filter [ /ASCII85Decode /FlateDecode ]
+ >>
+stream
+Gb!#Z95iQE&AJ$C&3dK,e)^!A&o\79Xg=Kc[n^dWJR[Ad@`sT/^K.dIjPTE&Ugc&V2KdEbg7TN%kF7lXAiOk"G5>:1=K4p'kV1.M3l<UAQnma*_[44>-fDF`,f3FeQDA<epFAubL"GB98cM$a6+D*d#Z?jbN(T<i<,qD*dtdlF?f)RP?!\KlVKq]K3QiLA38kEF)E)gk!%Ns"=S2XfWq-8;n=^L_:$':fS"h,+I\K(>cFma>V)3nArI?ULE@Jo;`asn##KfJRi;V[Kggr9Ho5MSFf$PqUF,SoVK/IU?N!u'C=RE$]D:%@JGU.4?L$a1,ZBHlBZaf,u-hie#2YT=B%%+rPO%"_$\*s$%bqL4P@7nX(YS<IFfT=__:c/GOh/d5TcpoPqNY']R<<Yl@mnbHH)ALCk5q4=N2dA-dpKBnM#;bNP@bm5!U*B>'^]N%/SeC^p8"?)ugp<+IW-P0Wp,5I$:8f8.[i+$l@[l:S.GM(8G- [...]
+endstream
+endobj
+67 0 obj
+<< /Type /Page
+/Parent 1 0 R
+/MediaBox [ 0 0 594 842 ]
+/Resources 3 0 R
+/Contents 66 0 R
+>>
+endobj
+68 0 obj
+<< /Length 1946 /Filter [ /ASCII85Decode /FlateDecode ]
+ >>
+stream
+Gb!#]hf%7-&:Vr4+lk'Q<e`_7P_^n3g+HN4F=Yo\)iA2;Z7KQ.*%SAOAc;(A'M4.GW7Z"^cif(TMKc^?r4\ruI!0OMbn<InA6,=!6BbQ/?]`Yl:Mrs16LgZoO;"M>,iab1:s&&Vq>H87oK;poRCu'!4CM.2U'a[GV*ptM:/V9ck%4.'SihQTa2qu#VNYX!""QT>gLpU14;UHpq>1*g8AIV=,eBO.+/U6u>qSH@_$P16%n(V9s8-62gf==7h5C6ro<@X9[ajN4AQaH=LHeKM1KJ_CVF2^C3!!T2pDp(QT-d@0d$`Hd.AaDIPY(eunY>R4TXi5q*1>j]6I-#,Zu_3X>o7ifNo]kl_J-G/TfuZ!B'W;W)u*57A,+H;ejb_7VS;K@I(/EUrC*Af@I/-f0GU[hjjT>Db4sM%Y%(YO7]l@(HI&*gp$n0K2J,`Z5/S)_PbaD];lECo4q*neAh`56cl+tQ_u,&#PVs@g(YtY!\CLjS\` [...]
+endstream
+endobj
+69 0 obj
+<< /Type /Page
+/Parent 1 0 R
+/MediaBox [ 0 0 594 842 ]
+/Resources 3 0 R
+/Contents 68 0 R
+>>
+endobj
+70 0 obj
+<< /Length 212 /Filter [ /ASCII85Decode /FlateDecode ]
+ >>
+stream
+GarW3Ymu@N%#4M'MN0AmgN!PSW::Q1OTZRC`5tCphg^p4%:!@(ohYQ??h\<D7tqW_oOS<),$2\:0[RH@NmL,S"g&Tf&)8s1Qc#\2`aU"1Rf8W.g?7r*4o`#5h85`Q:IAo:6!/@:<UI%*+5*sb7OO&Ks(\u/n[u4VE@aL9d:lUZ^P!l%7+*0#?'j>6HYRXrUG.G])@fUuW;-MHDEmR~>
+endstream
+endobj
+71 0 obj
+<< /Type /Page
+/Parent 1 0 R
+/MediaBox [ 0 0 594 842 ]
+/Resources 3 0 R
+/Contents 70 0 R
+>>
+endobj
+72 0 obj
+<< /Length 1223 /Filter [ /ASCII85Decode /FlateDecode ]
+ >>
+stream
+Gb!#[95i<6&AIm?pdTV/Z,^hs9;k`#b=dX`1u\QVZIu$WWD-F:p;"G`NlR/#mt1[.lmhS/4l^g9o/V8&SNVJIM5$/4h&2uH</hrl@'V&%B:L[SjTJ2uPpD&[<.Q7D"8Qu_Bmr@^Om9X:5nKV,?+i\",oOt7:.Z`:X&BJ.iRrFY`X)lL92&N#!%Q.8.b"Fd'.*\h,Tna4>.PQNRo_P"'';?CcNN>^ag[>#c*6#0OA!sT0QQ"ZgZ_Mg2qoFd9tQjkR\B3$GE:L)[iYB2D11:GH'a2*lY^MW3)uBKeI0BA`u(lMf]Z0s][`(m^Ip`PH<f0HTgo[jGCE0X8in:-b$N^<^5QYBPV[LSBVi,&5_QH`jZ,h8k`>7D*6WcY@miuU'j(67U#l!8[n\1@c005HBD,BbWbAOl1uoKAL[ILeJ6$47FeRs;Qk(fSJIEPV.2L3RA<<L<S;.)%g<4==,8fG:1Yo*#l0?U!IUcFND^]J)KaYa\"U [...]
+endstream
+endobj
+73 0 obj
+<< /Type /Page
+/Parent 1 0 R
+/MediaBox [ 0 0 594 842 ]
+/Resources 3 0 R
+/Contents 72 0 R
+>>
+endobj
+74 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F3
+/BaseFont /Helvetica-Bold
+/Encoding /WinAnsiEncoding >>
+endobj
+75 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F1
+/BaseFont /Helvetica
+/Encoding /WinAnsiEncoding >>
+endobj
+76 0 obj
+<< /Type /FontDescriptor
+/FontName /1Ef4f2Garamond
+/FontBBox  [-138 -306 1062 986] 
+/Flags 33
+/CapHeight 639
+/Ascent 986
+/Descent -306
+/ItalicAngle 0
+/StemV 0
+/FontFile2 77 0 R
+/MissingWidth 500
+
+ >>
+endobj
+77 0 obj
+<< /Length 27890 /Filter [ /ASCII85Decode /FlateDecode ]
+ /Length1 28676 >>
+stream
+Gas`*$!\Fih)@MRHgg6%h$5&/#pbT4#p^"K6d#qY#)k9+*!TmlA&gJ/)r%pFBubB0g,+"W]-ON5oLXq2Mkkc)Vm"i&D4\abT-eF'k-=O-8c,lkFe?6Zg;`X-XM@E"kC*?%^VoK_cH`S9B7@nqG:W^q!!Ei6'H#]4J"Oct5s#';!rtJHRbGLQDo\Oh!-T18Dqi"lqU*3q[;?,`\.=,+43+dHhYQLt^u?k,JP4Z5mZ9L!eH#@N/idFRpDs1"%ohT_8%;gW283Y.\-:@^@(:d[mG<4E7K47p!5RLNI8=Tu>O(7p^_m-j=7C/-1EcFH*02*65Oe6*^?X#e!tWACB6;29&TI"Nj$S`kXrcVAj"@<,!S&t+fs:'RI3/IgQ]%1Gs3BN1h#GKoRU'g(j[/ujl!rEK>gru)c6u?#6Q88oF5>7dEM!c.<qJ829:]4s67JQ;^'R2R)H=!cOMbm:q@.QO`6atrKZDd90`]OMKBTdPJpIuAd5 [...]
+endstream
+endobj
+78 0 obj
+<< /Type /Font
+/Subtype /Type0
+/Name /F15
+/BaseFont /1Ef4f2Garamond
+/Encoding /Identity-H
+/DescendantFonts [ 79 0 R ]  >>
+endobj
+79 0 obj
+<< /Type /Font
+/BaseFont /1Ef4f2Garamond 
+/Subtype /CIDFontType2
+/CIDSystemInfo << /Registry (Adobe)/Ordering (UCS)/Supplement 0 >>
+/FontDescriptor 76 0 R
+/DW 0
+/W [ 0 [750 0 250 250 614 510 416 656 291 677 510 510 333 468 406 229 562 770 666 468 354 510 229 218 364 447 312 322 416 489 416 656 458 510 218 500 833 885 354 427 218 635 291 291 572 479 562 177 760 229 697 770 781 770 625 770 468 333 468 500 614 ] ] 
+>>
+endobj
+80 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F9
+/BaseFont /Courier
+/Encoding /WinAnsiEncoding >>
+endobj
+1 0 obj
+<< /Type /Pages
+/Count 17
+/Kids [6 0 R 8 0 R 10 0 R 35 0 R 37 0 R 39 0 R 41 0 R 50 0 R 52 0 R 54 0 R 56 0 R 58 0 R 65 0 R 67 0 R 69 0 R 71 0 R 73 0 R ] >>
+endobj
+2 0 obj
+<< /Type /Catalog
+/Pages 1 0 R
+ >>
+endobj
+3 0 obj
+<< 
+/Font << /F3 74 0 R /F1 75 0 R /F15 78 0 R /F9 80 0 R >> 
+/ProcSet [ /PDF /ImageC /Text ] >> 
+endobj
+13 0 obj
+<<
+/S /GoTo
+/D [37 0 R /XYZ 45.4 711.7 null]
+>>
+endobj
+15 0 obj
+<<
+/S /GoTo
+/D [39 0 R /XYZ 45.4 711.7 null]
+>>
+endobj
+17 0 obj
+<<
+/S /GoTo
+/D [41 0 R /XYZ 45.4 711.7 null]
+>>
+endobj
+19 0 obj
+<<
+/S /GoTo
+/D [50 0 R /XYZ 45.4 711.7 null]
+>>
+endobj
+21 0 obj
+<<
+/S /GoTo
+/D [54 0 R /XYZ 45.4 711.7 null]
+>>
+endobj
+23 0 obj
+<<
+/S /GoTo
+/D [56 0 R /XYZ 45.4 711.7 null]
+>>
+endobj
+25 0 obj
+<<
+/S /GoTo
+/D [58 0 R /XYZ 45.4 711.7 null]
+>>
+endobj
+27 0 obj
+<<
+/S /GoTo
+/D [65 0 R /XYZ 45.4 711.7 null]
+>>
+endobj
+29 0 obj
+<<
+/S /GoTo
+/D [67 0 R /XYZ 45.4 711.7 null]
+>>
+endobj
+31 0 obj
+<<
+/S /GoTo
+/D [69 0 R /XYZ 45.4 711.7 null]
+>>
+endobj
+33 0 obj
+<<
+/S /GoTo
+/D [73 0 R /XYZ 45.4 711.7 null]
+>>
+endobj
+44 0 obj
+<<
+/S /GoTo
+/D [null /XYZ 0.0 0.0 null]
+>>
+endobj
+46 0 obj
+<<
+/S /GoTo
+/D [null /XYZ 0.0 0.0 null]
+>>
+endobj
+48 0 obj
+<<
+/S /GoTo
+/D [null /XYZ 0.0 0.0 null]
+>>
+endobj
+61 0 obj
+<<
+/S /GoTo
+/D [null /XYZ 0.0 0.0 null]
+>>
+endobj
+63 0 obj
+<<
+/S /GoTo
+/D [null /XYZ 0.0 0.0 null]
+>>
+endobj
+xref
+0 81
+0000000000 65535 f 
+0000051603 00000 n 
+0000051773 00000 n 
+0000051823 00000 n 
+0000000015 00000 n 
+0000000071 00000 n 
+0000000502 00000 n 
+0000000608 00000 n 
+0000000719 00000 n 
+0000000825 00000 n 
+0000001913 00000 n 
+0000002035 00000 n 
+0000002132 00000 n 
+0000051936 00000 n 
+0000002265 00000 n 
+0000052000 00000 n 
+0000002401 00000 n 
+0000052064 00000 n 
+0000002537 00000 n 
+0000052128 00000 n 
+0000002673 00000 n 
+0000052192 00000 n 
+0000002809 00000 n 
+0000052256 00000 n 
+0000002945 00000 n 
+0000052320 00000 n 
+0000003081 00000 n 
+0000052384 00000 n 
+0000003216 00000 n 
+0000052448 00000 n 
+0000003352 00000 n 
+0000052512 00000 n 
+0000003488 00000 n 
+0000052576 00000 n 
+0000003621 00000 n 
+0000003936 00000 n 
+0000004044 00000 n 
+0000005214 00000 n 
+0000005322 00000 n 
+0000006502 00000 n 
+0000006610 00000 n 
+0000007575 00000 n 
+0000007698 00000 n 
+0000007739 00000 n 
+0000052640 00000 n 
+0000007874 00000 n 
+0000052699 00000 n 
+0000008010 00000 n 
+0000052758 00000 n 
+0000008146 00000 n 
+0000010295 00000 n 
+0000010403 00000 n 
+0000012308 00000 n 
+0000012416 00000 n 
+0000013366 00000 n 
+0000013474 00000 n 
+0000014492 00000 n 
+0000014600 00000 n 
+0000015529 00000 n 
+0000015652 00000 n 
+0000015686 00000 n 
+0000052817 00000 n 
+0000015822 00000 n 
+0000052876 00000 n 
+0000015958 00000 n 
+0000017033 00000 n 
+0000017141 00000 n 
+0000018397 00000 n 
+0000018505 00000 n 
+0000020544 00000 n 
+0000020652 00000 n 
+0000020956 00000 n 
+0000021064 00000 n 
+0000022380 00000 n 
+0000022488 00000 n 
+0000022601 00000 n 
+0000022709 00000 n 
+0000022925 00000 n 
+0000050924 00000 n 
+0000051062 00000 n 
+0000051497 00000 n 
+trailer
+<<
+/Size 81
+/Root 2 0 R
+/Info 4 0 R
+>>
+startxref
+52935
+%%EOF
diff --git a/yaafi-crypto/src/test/data/plain.txt b/yaafi-crypto/src/test/data/plain.txt
new file mode 100644
index 0000000..1612967
--- /dev/null
+++ b/yaafi-crypto/src/test/data/plain.txt
@@ -0,0 +1,254 @@
+# -------------------------------------------------------------------
+# Copyright 2001-2004 The Apache Software Foundation.
+# 
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+# 
+#      http://www.apache.org/licenses/LICENSE-2.0
+#  
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+# -------------------------------------------------------------------
+
+# -------------------------------------------------------------------
+# D E F A U L T  M A V E N  P R O P E R T I E S
+# -------------------------------------------------------------------
+# These are the properties that we believe are immutable so we
+# keep them apart from the project specific properties.
+# -------------------------------------------------------------------
+
+# Properties for the dashboard reactor
+# ------------------------------------
+
+maven.dashboard.basedir=${basedir}
+maven.dashboard.includes=*/project.xml
+maven.dashboard.excludes=**/target/**/project.xml
+maven.dashboard.ignoreFailures=false
+
+# Generated dashboard xml data file
+maven.dashboard.report.xml = ${maven.build.dir}/dashboard-data.xml
+
+# Generated dashboard main report xdoc file name (without the extension). 
+# Note: The value must not include any path as the xdoc will be 
+# generated in ${maven.gen.docs}.
+maven.dashboard.report.xdoc = dashboard-report
+
+# Generated dashboard legend xdoc file name (without the extension). 
+# Note: The value must not include any path as the xdoc will be 
+# generated in ${maven.gen.docs}.
+maven.dashboard.report.legend.xdoc = dashboard-report-legend
+
+# Location of JSL template to generate the main report xdoc file
+maven.dashboard.template = ${plugin.resources}/templates/dashboard.jsl
+
+# Location of JSL template to generate the legend report xdoc file
+maven.dashboard.template.legend = ${plugin.resources}/templates/legend.jsl
+
+# Decide whether a call to dashboard:report will call the reactor
+# on the child projects to generate individual dashboard data. If you
+# already using the multiproject project or the reactor, a better option
+# is to add dashboard:report-single to the list of goals you're running.
+# In which case, you'll need to set the following property to false
+# (otherwise the reactor will be run again on your child projects).
+maven.dashboard.runreactor = true
+
+# If false, do not show projects for which gathered data is empty for all
+# aggregators.
+maven.dashboard.report.showempty = true
+
+# Images used when generating the progress bar for the dashboard HTML color
+# for left bar
+maven.dashboard.report.bar.left = green
+
+# HTML color for right bar
+maven.dashboard.report.bar.right = red
+
+# Image to set cells with (should be transparent)
+maven.dashboard.report.bar.image = images/trans.gif
+maven.dashboard.report.bar.height = 10
+maven.dashboard.report.bar.border = 0
+maven.dashboard.report.bar.displayLabel = true
+
+# Properties for gathering dashboard data for a single project
+# ------------------------------------------------------------
+
+# Location of default dashboard aggregators
+maven.dashboard.aggregators.dir = ${plugin.resources}/aggregators
+
+# Comma-separated list of aggregators to use
+maven.dashboard.aggregators = cserrors,cswarnings,clovertpc,cloverloc,cloverncloc
+
+# Generated dashboard data for a single project
+maven.dashboard.report.single = ${maven.build.dir}/dashboard-single.xml
+
+# Decide whether to call goals associated with report types or not
+maven.dashboard.rungoals = true
+
+# Default aggregators
+# -------------------
+
+# Properties for the Checkstyle files aggregator
+maven.dashboard.aggregator.csfiles.script = ${maven.dashboard.aggregators.dir}/csfiles.jelly
+maven.dashboard.aggregator.csfiles.artifact = ${maven.build.dir}/checkstyle-raw-report.xml
+maven.dashboard.aggregator.csfiles.label = CS Files
+maven.dashboard.aggregator.csfiles.goal = checkstyle
+maven.dashboard.aggregator.csfiles.description = Number of files checked with Checkstyle
+
+# Properties for the Checkstyle error/warning aggregator (all errors/warnings)
+maven.dashboard.aggregator.csall.script = ${maven.dashboard.aggregators.dir}/csall.jelly
+maven.dashboard.aggregator.csall.artifact = ${maven.build.dir}/checkstyle-raw-report.xml
+maven.dashboard.aggregator.csall.label = CS err/warn
+maven.dashboard.aggregator.csall.goal = checkstyle
+maven.dashboard.aggregator.csall.description = Number of Checkstyle errors and warnings
+
+# Properties for the Checkstyle error aggregator (only errors)
+maven.dashboard.aggregator.cserrors.script = ${maven.dashboard.aggregators.dir}/cserrors.jelly
+maven.dashboard.aggregator.cserrors.artifact = ${maven.build.dir}/checkstyle-raw-report.xml
+maven.dashboard.aggregator.cserrors.label = CS errors
+maven.dashboard.aggregator.cserrors.goal = checkstyle
+maven.dashboard.aggregator.cserrors.description = Number of Checkstyle errors
+
+# Properties for the Checkstyle warning aggregator (only warnings)
+maven.dashboard.aggregator.cswarnings.script = ${maven.dashboard.aggregators.dir}/cswarnings.jelly
+maven.dashboard.aggregator.cswarnings.artifact = ${maven.build.dir}/checkstyle-raw-report.xml
+maven.dashboard.aggregator.cswarnings.label = CS warnings
+maven.dashboard.aggregator.cswarnings.goal = checkstyle
+maven.dashboard.aggregator.cswarnings.description = Number of Checkstyle warnings
+
+# Properties for the Clover TPC aggregator (TPC = Total Percent Coverage)
+maven.dashboard.aggregator.clovertpc.script = ${maven.dashboard.aggregators.dir}/clovertpc.jelly
+maven.dashboard.aggregator.clovertpc.artifact = ${maven.build.dir}/clover.xml
+maven.dashboard.aggregator.clovertpc.label = Clover TPC
+maven.dashboard.aggregator.clovertpc.goal = clover
+maven.dashboard.aggregator.clovertpc.description = Number of test coverage percentage
+
+# Properties for the Clover LOC aggregator (LOC = Line Of Code)
+maven.dashboard.aggregator.cloverloc.script = ${maven.dashboard.aggregators.dir}/cloverloc.jelly
+maven.dashboard.aggregator.cloverloc.artifact = ${maven.build.dir}/clover.xml
+maven.dashboard.aggregator.cloverloc.label = Clover LOC
+maven.dashboard.aggregator.cloverloc.goal = clover
+maven.dashboard.aggregator.cloverloc.description = Number of line of code (including comments)
+
+# Properties for the Clover NCLOC aggregator (NCLOC = Non Comment Line Of Code)
+maven.dashboard.aggregator.cloverncloc.script = ${maven.dashboard.aggregators.dir}/cloverncloc.jelly
+maven.dashboard.aggregator.cloverncloc.artifact = ${maven.build.dir}/clover.xml
+maven.dashboard.aggregator.cloverncloc.label = Clover NCLOC
+maven.dashboard.aggregator.cloverncloc.goal = clover
+maven.dashboard.aggregator.cloverncloc.description = Number of non-commented lines of code
+
+# Properties for the JUnit Test aggregator 
+maven.dashboard.aggregator.junittests.script = ${maven.dashboard.aggregators.dir}/junittests.jelly
+maven.dashboard.aggregator.junittests.artifact = ${maven.build.dir}/TESTS-TestSuites.xml
+maven.dashboard.aggregator.junittests.label = JUnit Tests
+maven.dashboard.aggregator.junittests.goal = junit-report:report
+maven.dashboard.aggregator.junittests.description = Number of JUnit tests
+
+# Properties for the JUnit Failures aggregator 
+maven.dashboard.aggregator.junitfailures.script = ${maven.dashboard.aggregators.dir}/junitfailures.jelly
+maven.dashboard.aggregator.junitfailures.artifact = ${maven.build.dir}/TESTS-TestSuites.xml
+maven.dashboard.aggregator.junitfailures.label = JUnit Failures
+maven.dashboard.aggregator.junitfailures.goal = junit-report:report
+maven.dashboard.aggregator.junitfailures.description = Number of JUnit test failures
+
+# Properties for the JUnit Errors aggregator 
+maven.dashboard.aggregator.juniterrors.script = ${maven.dashboard.aggregators.dir}/juniterrors.jelly
+maven.dashboard.aggregator.juniterrors.artifact = ${maven.build.dir}/TESTS-TestSuites.xml
+maven.dashboard.aggregator.juniterrors.label = JUnit Errors
+maven.dashboard.aggregator.juniterrors.goal = junit-report:report
+maven.dashboard.aggregator.juniterrors.description = Number of JUnit test errors
+
+# Properties for the JUnit Pass Rate aggregator 
+maven.dashboard.aggregator.junitpassrate.script = ${maven.dashboard.aggregators.dir}/junitpassrate.jelly
+maven.dashboard.aggregator.junitpassrate.artifact = ${maven.build.dir}/TESTS-TestSuites.xml
+maven.dashboard.aggregator.junitpassrate.label = JUnit Pass Rate
+maven.dashboard.aggregator.junitpassrate.goal = junit-report:report
+maven.dashboard.aggregator.junitpassrate.description = Percentage of JUnit tests that have passed vs tests in error or failed
+
+# Properties for the PMD violations aggregator 
+maven.dashboard.aggregator.pmdfiles.script = ${maven.dashboard.aggregators.dir}/pmdfiles.jelly
+maven.dashboard.aggregator.pmdfiles.artifact = ${maven.build.dir}/pmd-raw-report.xml
+maven.dashboard.aggregator.pmdfiles.label = PMD Files with Violations
+maven.dashboard.aggregator.pmdfiles.goal = pmd:report
+maven.dashboard.aggregator.pmdfiles.description = Number of files with PMD violations
+
+# Properties for the PMD violations aggregator 
+maven.dashboard.aggregator.pmdviolations.script = ${maven.dashboard.aggregators.dir}/pmdviolations.jelly
+maven.dashboard.aggregator.pmdviolations.artifact = ${maven.build.dir}/pmd-raw-report.xml
+maven.dashboard.aggregator.pmdviolations.label = PMD Violations
+maven.dashboard.aggregator.pmdviolations.goal = pmd:report
+maven.dashboard.aggregator.pmdviolations.description = Number of PMD violations
+
+# Properties for the Simian duplicate lines aggregator 
+maven.dashboard.aggregator.simiantdl.script = ${maven.dashboard.aggregators.dir}/simiantdl.jelly
+maven.dashboard.aggregator.simiantdl.artifact = ${maven.build.dir}/generated-xdocs/simian-report.xml
+maven.dashboard.aggregator.simiantdl.label = Simian TDL
+maven.dashboard.aggregator.simiantdl.goal = maven-simian-plugin:report
+maven.dashboard.aggregator.simiantdl.description = Simian Total Duplicate Lines
+
+# Properties for the JCoverage covered lines percent aggregator 
+maven.dashboard.aggregator.jcoveragelipc.script = ${maven.dashboard.aggregators.dir}/jcoveragelipc.jelly
+maven.dashboard.aggregator.jcoveragelipc.artifact = ${maven.build.dir}/jcoverage/coverage.xml
+maven.dashboard.aggregator.jcoveragelipc.label = JCoverage %lines
+maven.dashboard.aggregator.jcoveragelipc.goal = maven-jcoverage-plugin:report
+maven.dashboard.aggregator.jcoveragelipc.description = JCoverage covered lines percentile
+
+# Properties for the JCoverage total lines aggregator 
+maven.dashboard.aggregator.jcoverageloc.script = ${maven.dashboard.aggregators.dir}/jcoverageloc.jelly
+maven.dashboard.aggregator.jcoverageloc.artifact = ${maven.build.dir}/jcoverage/coverage.xml
+maven.dashboard.aggregator.jcoverageloc.label = JCoverage LOC
+maven.dashboard.aggregator.jcoverageloc.goal = maven-jcoverage-plugin:report
+maven.dashboard.aggregator.jcoverageloc.description = JCoverage total lines of code
+
+# Properties for the FindBugs file violations aggregator 
+maven.dashboard.aggregator.fbfiles.script = ${maven.dashboard.aggregators.dir}/fbfiles.jelly
+maven.dashboard.aggregator.fbfiles.artifact = ${maven.build.dir}/findbugs-raw-report.xml
+maven.dashboard.aggregator.fbfiles.label = FindBugs Files with Violations
+maven.dashboard.aggregator.fbfiles.goal = maven-findbugs-plugin:report
+maven.dashboard.aggregator.fbfiles.description = Number of files with FindBugs violations
+
+# Properties for the FindBugs violations aggregator 
+maven.dashboard.aggregator.fbviolations.script = ${maven.dashboard.aggregators.dir}/fbviolations.jelly
+maven.dashboard.aggregator.fbviolations.artifact = ${maven.build.dir}/findbugs-raw-report.xml
+maven.dashboard.aggregator.fbviolations.label = FindBugs Violations
+maven.dashboard.aggregator.fbviolations.goal = maven-findbugs-plugin:report
+maven.dashboard.aggregator.fbviolations.description = Number of FindBugs violations
+
+# Classes Tasks aggregator
+maven.dashboard.aggregator.tasklistclass.script = ${maven.dashboard.aggregators.dir}/task-list-classes.jelly
+maven.dashboard.aggregator.tasklistclass.artifact = ${maven.build.dir}/generated-xdocs/task-list.xml
+maven.dashboard.aggregator.tasklistclass.label = Classes Tasks 
+maven.dashboard.aggregator.tasklistclass.goal = maven-tasklist-plugin:report
+maven.dashboard.aggregator.tasklistclass.description = Total number of classes with task definition (@todo tag).
+
+# Methods Tasks aggregator
+maven.dashboard.aggregator.tasklistmethod.script = ${maven.dashboard.aggregators.dir}/task-list-methods.jelly
+maven.dashboard.aggregator.tasklistmethod.artifact = ${maven.build.dir}/generated-xdocs/task-list.xml
+maven.dashboard.aggregator.tasklistmethod.label = Methods Tasks 
+maven.dashboard.aggregator.tasklistmethod.goal = maven-tasklist-plugin:report
+maven.dashboard.aggregator.tasklistmethod.description = Total number of methods with task definition (@todo tag).
+
+# All Tasks aggregator
+maven.dashboard.aggregator.tasklist.script = ${maven.dashboard.aggregators.dir}/task-list-all.jelly
+maven.dashboard.aggregator.tasklist.artifact = ${maven.build.dir}/generated-xdocs/task-list.xml
+maven.dashboard.aggregator.tasklist.label = All Tasks 
+maven.dashboard.aggregator.tasklist.goal = maven-tasklist-plugin:report
+maven.dashboard.aggregator.tasklist.description = Total number of task definition (@todo tag).
+
+# Changed log: total number of scm changed files aggregator
+maven.dashboard.aggregator.scmchangedfiles.script = ${maven.dashboard.aggregators.dir}/scmchangedfiles.jelly
+maven.dashboard.aggregator.scmchangedfiles.artifact = ${maven.build.dir}/changelog.xml
+maven.dashboard.aggregator.scmchangedfiles.label = SCM Changed Files
+maven.dashboard.aggregator.scmchangedfiles.goal = maven-changelog-plugin:report
+maven.dashboard.aggregator.scmchangedfiles.description = Total number of changed files in scm.
+
+# Changed log: total number of scm commit aggregator
+maven.dashboard.aggregator.scmchangedcommit.script = ${maven.dashboard.aggregators.dir}/scmchangedcommit.jelly
+maven.dashboard.aggregator.scmchangedcommit.artifact = ${maven.build.dir}/changelog.xml
+maven.dashboard.aggregator.scmchangedcommit.label = SCM commits
+maven.dashboard.aggregator.scmchangedcommit.goal = maven-changelog-plugin:report
+maven.dashboard.aggregator.scmchangedcommit.description = Total number of scm commit.
+
diff --git a/yaafi-crypto/src/test/data/plain.xml b/yaafi-crypto/src/test/data/plain.xml
new file mode 100644
index 0000000..8890c58
--- /dev/null
+++ b/yaafi-crypto/src/test/data/plain.xml
@@ -0,0 +1,56 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements.  See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership.  The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License.  You may obtain a copy of the License at
+ 
+ http://www.apache.org/licenses/LICENSE-2.0
+ 
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied.  See the License for the
+ specific language governing permissions and limitations
+ under the License.
+-->
+
+<role-list>
+ <!-- Use minimal role entry -->
+ <role
+  name="org.apache.fulcrum.yaafi.service.servicemanager.ServiceManagerService"
+  default-class="org.apache.fulcrum.yaafi.service.servicemanager.ServiceManagerServiceImpl"
+ />
+ <!-- For the rest of the services use a full-blown role entry -->
+ <role
+  name="org.apache.fulcrum.yaafi.service.systemproperty.SystemPropertyService"
+  shorthand="SystemPropertyService"
+  default-class="org.apache.fulcrum.yaafi.service.systemproperty.SystemPropertyServiceImpl"
+  early-init="true"
+  description="ÜÖÄüöäß"
+ />
+ <!--
+  This ReconfigurationService is instantiated during the first access. Until
+  then it is doing nothing.
+ -->
+ <role
+  name="org.apache.fulcrum.yaafi.service.reconfiguration.ReconfigurationService"
+  shorthand="ReconfigurationService"
+  default-class="org.apache.fulcrum.yaafi.service.reconfiguration.ReconfigurationServiceImpl"
+  early-init="false"
+  component-type="avalon"
+  component-flavour="yaafi"
+  description="Monitors the componentConfiguration.xml to reconfigure YAAFI"
+ />
+ <role
+  name="org.apache.fulcrum.yaafi.TestComponent"
+  shorthand="test"
+  default-class="org.apache.fulcrum.yaafi.TestComponentImpl"
+  early-init="true"
+  component-type="merlin"
+  description="A simple test component"
+ />
+</role-list>
\ No newline at end of file
diff --git a/yaafi-crypto/src/test/data/plain.zip b/yaafi-crypto/src/test/data/plain.zip
new file mode 100644
index 0000000..37ddfc5
Binary files /dev/null and b/yaafi-crypto/src/test/data/plain.zip differ
diff --git a/yaafi-crypto/src/test/org/apache/fulcrum/jce/crypto/CryptoUtilTest.java b/yaafi-crypto/src/test/org/apache/fulcrum/jce/crypto/CryptoUtilTest.java
new file mode 100644
index 0000000..2d59bc5
--- /dev/null
+++ b/yaafi-crypto/src/test/org/apache/fulcrum/jce/crypto/CryptoUtilTest.java
@@ -0,0 +1,302 @@
+package org.apache.fulcrum.jce.crypto;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+
+import junit.framework.TestCase;
+
+/**
+ * Test suite for crypto functionality
+ *
+ * @author <a href="mailto:siegfried.goeschl@it20one.at">Siegfried Goeschl</a>
+ */
+
+public class CryptoUtilTest extends TestCase
+{
+    /** the password to be used */
+    private String password;
+
+    /** the test data directory */
+    private File testDataDirectory;
+
+    /** the temp data director */
+    private File tempDataDirectory;
+
+    /**
+     * Constructor
+     * @param name the name of the test case
+     */
+    public CryptoUtilTest( String name )
+    {
+        super(name);
+
+        this.password = "mysecret";
+        this.testDataDirectory = new File( "./src/test/data" );
+        this.tempDataDirectory = new File( "./target/temp" );
+        this.tempDataDirectory.mkdirs();
+    }
+
+    /**
+     * @see junit.framework.TestCase#setUp()
+     *         byte[] salt,
+        int count,
+        String algorithm,
+        String providerName )
+
+     */
+    protected void setUp() throws Exception
+    {
+        CryptoStreamFactoryImpl factory = new CryptoStreamFactoryImpl(
+            CryptoParameters.SALT,
+            CryptoParameters.COUNT
+            );
+
+        CryptoStreamFactoryImpl.setInstance( factory );
+    }
+
+    /**
+     * @return Returns the password.
+     */
+    protected char[] getPassword()
+    {
+        return password.toCharArray();
+    }
+
+    /**
+     * @return Returns the tempDataDirectory.
+     */
+    protected File getTempDataDirectory()
+    {
+        return tempDataDirectory;
+    }
+
+    /**
+     * @return Returns the testDataDirectory.
+     */
+    protected File getTestDataDirectory()
+    {
+        return testDataDirectory;
+    }
+
+    /** Encrypt a text file */
+    public void testTextEncryption() throws Exception
+    {
+        File sourceFile = new File( this.getTestDataDirectory(), "plain.txt" );
+        File targetFile = new File( this.getTempDataDirectory(), "plain.enc.txt" );
+        CryptoUtil.encrypt( sourceFile, targetFile, this.getPassword() );
+    }
+
+    /** Decrypt a text file */
+    public void testTextDecryption() throws Exception
+    {
+        testTextEncryption();
+        File sourceFile = new File( this.getTempDataDirectory(), "plain.enc.txt" );
+        File targetFile = new File( this.getTempDataDirectory(), "plain.dec.txt" );
+        CryptoUtil.decrypt( sourceFile, targetFile.getAbsolutePath(), this.getPassword() );
+    }
+
+    /** Encrypt an empty text file */
+    public void testEmptyTextEncryption() throws Exception
+    {
+        File sourceFile = new File( this.getTestDataDirectory(), "empty.txt" );
+        File targetFile = new File( this.getTempDataDirectory(), "empty.enc.txt" );
+        CryptoUtil.encrypt( sourceFile, targetFile, this.getPassword() );
+    }
+
+    /** Decrypt a text file */
+    public void testEmptyTextDecryption() throws Exception
+    {
+        testEmptyTextEncryption();
+        File sourceFile = new File( this.getTempDataDirectory(), "empty.enc.txt" );
+        File targetFile = new File( this.getTempDataDirectory(), "empty.dec.txt" );
+        CryptoUtil.decrypt( sourceFile, targetFile, this.getPassword() );
+    }
+
+    /** Encrypt a PDF file */
+    public void testPdfEncryption() throws Exception
+    {
+        File sourceFile = new File( this.getTestDataDirectory(), "plain.pdf" );
+        File targetFile = new File( this.getTempDataDirectory(), "plain.enc.pdf" );
+        CryptoUtil.encrypt( sourceFile, targetFile, this.getPassword() );
+    }
+
+    /** Decrypt a PDF file */
+    public void testPdfDecryption() throws Exception
+    {
+        testPdfEncryption();
+        File sourceFile = new File( this.getTempDataDirectory(), "plain.enc.pdf" );
+        File targetFile = new File( this.getTempDataDirectory(), "plain.dec.pdf" );
+        CryptoUtil.decrypt( sourceFile, targetFile, this.getPassword() );
+    }
+
+    /** Encrypt a ZIP file */
+    public void testZipEncryption() throws Exception
+    {
+        File sourceFile = new File( this.getTestDataDirectory(), "plain.zip" );
+        File targetFile = new File( this.getTempDataDirectory(), "plain.enc.zip" );
+        CryptoUtil.encrypt( sourceFile, targetFile, this.getPassword() );
+    }
+
+    /** Decrypt a ZIP file */
+    public void testZipDecryption() throws Exception
+    {
+        testZipEncryption();
+        File sourceFile = new File( this.getTempDataDirectory(), "plain.enc.zip" );
+        File targetFile = new File( this.getTempDataDirectory(), "plain.dec.zip" );
+        CryptoUtil.decrypt( sourceFile, targetFile, this.getPassword() );
+    }
+
+    /** Encrypt a UTF-16 XML file */
+    public void testXmlUTF16Encryption() throws Exception
+    {
+        File sourceFile = new File( this.getTestDataDirectory(), "plain-utf16.xml" );
+        File targetFile = new File( this.getTempDataDirectory(), "plain-utf16.enc.xml" );
+        CryptoUtil.encrypt( sourceFile, targetFile, this.getPassword() );
+    }
+
+    /** Decrypt a UTF-16 XML file */
+    public void testXMLUTF16Decryption() throws Exception
+    {
+        testXmlUTF16Encryption();
+        File sourceFile = new File( this.getTempDataDirectory(), "plain-utf16.enc.xml" );
+        File targetFile = new File( this.getTempDataDirectory(), "plain-utf16.dec.xml" );
+        CryptoUtil.decrypt( sourceFile, targetFile, this.getPassword() );
+    }
+
+    /** Encrypt a UTF-8 XML file */
+    public void testXmlUTF8Encryption() throws Exception
+    {
+        File sourceFile = new File( this.getTestDataDirectory(), "plain-utf8.xml" );
+        File targetFile = new File( this.getTempDataDirectory(), "plain-utf8.enc.xml" );
+        CryptoUtil.encrypt( sourceFile, targetFile, this.getPassword() );
+    }
+
+    /** Decrypt a UTF-8 XML file */
+    public void testXMLUTF8Decryption() throws Exception
+    {
+        testXmlUTF8Encryption();
+        File sourceFile = new File( this.getTempDataDirectory(), "plain-utf8.enc.xml" );
+        File targetFile = new File( this.getTempDataDirectory(), "plain-utf8.dec.xml" );
+        CryptoUtil.decrypt( sourceFile, targetFile, this.getPassword() );
+    }
+
+    /** Encrypt a ISO-8859-1 XML file */
+    public void testXmlISO88591Encryption() throws Exception
+    {
+        File sourceFile = new File( this.getTestDataDirectory(), "plain-iso-8859-1.xml" );
+        File targetFile = new File( this.getTempDataDirectory(), "plain-iso-8859-1.enc.xml" );
+        CryptoUtil.encrypt( sourceFile, targetFile, this.getPassword() );
+    }
+
+    /** Decrypt a UTF-8 XML file */
+    public void testXmlISO88591Decryption() throws Exception
+    {
+        testXmlISO88591Encryption();
+        File sourceFile = new File( this.getTempDataDirectory(), "plain-iso-8859-1.enc.xml" );
+        File targetFile = new File( this.getTempDataDirectory(), "plain-iso-8859-1.dec.xml" );
+        CryptoUtil.decrypt( sourceFile, targetFile, this.getPassword() );
+    }
+    /** Test encryption and decryption of Strings */
+    public void testStringEncryption() throws Exception
+    {
+        char[] testVector = new char[513];
+
+        for( int i=0; i<testVector.length; i++ )
+        {
+            testVector[i] = (char) i;
+        }
+
+        String source = new String( testVector );
+        String cipherText = CryptoUtil.encryptString( source, this.getPassword() );
+        String plainText = CryptoUtil.decryptString( cipherText, this.getPassword() );
+        assertEquals( source, plainText );
+    }
+
+    /** Test encryption and decryption of Strings */
+    public void testStringHandling() throws Exception
+    {
+        String source = "Nobody knows the toubles I have seen ...";
+        String cipherText = CryptoUtil.encryptString( source, this.getPassword() );
+        String plainText = CryptoUtil.decryptString( cipherText, this.getPassword() );
+        assertEquals( source, plainText );
+    }
+
+    /** Test encryption and decryption of binary data */
+    public void testBinaryHandling() throws Exception
+    {
+        byte[] source = new byte[256];
+        byte[] result = null;
+
+        for( int i=0; i<source.length; i++ )
+        {
+            source[i] = (byte) i;
+        }
+
+        ByteArrayOutputStream cipherText = new ByteArrayOutputStream();
+        ByteArrayOutputStream plainText = new ByteArrayOutputStream();
+
+        CryptoUtil.encrypt( source, cipherText, this.getPassword() );
+        CryptoUtil.decrypt( cipherText, plainText, this.getPassword() );
+
+        result = plainText.toByteArray();
+
+        for( int i=0; i<source.length; i++ )
+        {
+            if( source[i] != result[i] )
+            {
+                fail( "Binary data are different at position " + i );
+            }
+        }
+    }
+
+    /** Test creating a password */
+    public void testPasswordFactory() throws Exception
+    {
+        char[] result = null;
+        result = PasswordFactory.create();
+        System.out.println( new String(result) );
+        result = PasswordFactory.create( this.getPassword() );
+        System.out.println( new String(result) );        
+        assertNotNull(result);
+        return;
+    }
+
+    public void testHexConverter() throws Exception
+    {
+        String source = "DceuATAABWSaVTSIK";
+        String hexString = HexConverter.toString( source.getBytes() );
+        String result = new String( HexConverter.toBytes( hexString ) );
+        assertEquals( source, result );
+    }
+
+    /** Test encryption and decryption of Strings */
+    public void testPasswordEncryption() throws Exception
+    {
+        char[] password = "57cb-4a23-d838-45222".toCharArray();
+        String source = "e02c-3b76-ff1e-5d9a1";
+        String cipherText = CryptoUtil.encryptString( source, password );
+        String plainText = CryptoUtil.decryptString( cipherText, password );
+        assertEquals( source, plainText );
+    }
+
+}
diff --git a/yaafi-crypto/src/test/org/apache/fulcrum/jce/crypto/Main.java b/yaafi-crypto/src/test/org/apache/fulcrum/jce/crypto/Main.java
new file mode 100644
index 0000000..c4488ec
--- /dev/null
+++ b/yaafi-crypto/src/test/org/apache/fulcrum/jce/crypto/Main.java
@@ -0,0 +1,181 @@
+package org.apache.fulcrum.jce.crypto;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+
+/**
+ * Command line tool for encrypting/decrypting files
+ *
+ * file [enc|dec] passwd [file]*
+ * string [enc|dec] passwd plaintext
+ *
+ * @author <a href="mailto:siegfried.goeschl@it20one.at">Siegfried Goeschl</a>
+ */
+
+public class Main
+{
+    /**
+     * Allows testing on the command line.
+     * 
+     * @param args the command line parameters
+     */
+    public static void main( String[] args )
+    {
+        try
+        {
+            if( args.length < 3 )
+            {
+                printHelp();
+                throw new IllegalArgumentException("Invalid command line");
+            }
+
+            String operationMode = args[0];
+
+            if( operationMode.equals("file") )
+            {
+                processFiles(args);
+            }
+            else if( operationMode.equals("string") )
+            {
+                processString(args);
+            }
+        }
+        catch (Exception e)
+        {
+            System.out.println("Error : " + e.getMessage());
+        }
+    }
+
+    /**
+     * Prints usage information.
+     */
+    public static void printHelp()
+    {
+        System.out.println("Main file [enc|dec] passwd source [target]");
+        System.out.println("Main string [enc|dec] passwd ");
+    }
+
+    /**
+     * Decrypt/encrypt a list of files
+     * @param args the command line
+     * @throws Exception the operation failed
+     */
+    public static void processFiles(String[] args)
+        throws Exception
+    {
+        String cipherMode = args[1];
+        char[] password = args[2].toCharArray();
+        File sourceFile = new File(args[3]);
+        File targetFile = null;
+
+        if( args.length == 4 )
+        {
+            targetFile = sourceFile;
+        }
+        else
+        {
+            targetFile = new File(args[4]);
+            File parentFile = targetFile.getParentFile(); 
+
+            if(parentFile != null)
+            {
+                parentFile.mkdirs();
+            }
+        }
+
+        processFile(cipherMode,password,sourceFile,targetFile);
+    }
+
+    /**
+     * Decrypt/encrypt a single file
+     * @param cipherMode the mode
+     * @param password the passwors
+     * @param sourceFile the file to process
+     * @param targetFile the targetf file
+     * @throws Exception the operation failed
+     */
+    public static void processFile(String cipherMode, char[] password, File sourceFile, File targetFile)
+        throws Exception
+    {
+        FileInputStream fis = new FileInputStream(sourceFile);
+        ByteArrayOutputStream baos = new ByteArrayOutputStream();
+
+        if( cipherMode.equals("dec") )
+        {
+            System.out.println("Decrypting " + sourceFile.getAbsolutePath() );
+            CryptoUtil.decrypt( fis, baos, password );
+            fis.close();
+
+            ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
+            FileOutputStream fos = new FileOutputStream(targetFile);
+            CryptoUtil.copy(bais,fos);
+            bais.close();
+            fos.close();
+        }
+        else if( cipherMode.equals("enc") )
+        {
+            System.out.println("Enrypting " + sourceFile.getAbsolutePath() );
+            CryptoUtil.encrypt( fis, baos, password );
+            fis.close();
+
+            ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
+            FileOutputStream fos = new FileOutputStream(targetFile);
+            CryptoUtil.copy(bais,fos);
+            bais.close();
+            fos.close();
+        }
+        else
+        {
+            String msg = "Don't know what to do with : " + cipherMode;
+            throw new IllegalArgumentException(msg);
+        }
+    }
+
+    /**
+     * Decrypt/encrypt a string.
+     * 
+     * @param args the command line
+     * @throws Exception the operation failed
+     */
+    public static void processString(String[] args)
+        throws Exception
+    {
+        String cipherMode = args[1];
+        char[] password = args[2].toCharArray();
+        String value = args[3];
+        String result = null;
+
+        if( cipherMode.equals("dec") )
+        {
+            result = CryptoUtil.decryptString(value,password);
+        }
+        else
+        {
+            result = CryptoUtil.encryptString(value,password);
+        }
+
+        System.out.println( result );
+    }
+}
\ No newline at end of file
diff --git a/yaafi-crypto/src/test/org/apache/fulcrum/jce/crypto/MainTest.java b/yaafi-crypto/src/test/org/apache/fulcrum/jce/crypto/MainTest.java
new file mode 100644
index 0000000..352990f
--- /dev/null
+++ b/yaafi-crypto/src/test/org/apache/fulcrum/jce/crypto/MainTest.java
@@ -0,0 +1,81 @@
+package org.apache.fulcrum.jce.crypto;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import junit.framework.TestCase;
+
+/**
+ * Test suite for crypto functionality
+ *
+ * @author <a href="mailto:siegfried.goeschl@it20one.at">Siegfried Goeschl</a>
+ */
+
+public class MainTest extends TestCase
+{
+    /** the password to be used */
+    private String password;
+
+    /**
+     * Constructor
+     * @param name the name of the test case
+     */
+    public MainTest( String name )
+    {
+        super(name);
+
+        this.password = "foobar";
+    }
+
+    /**
+     * @return Returns the password.
+     */
+    protected char[] getPassword()
+    {
+        return password.toCharArray();
+    }
+
+    /** Encrypt a string on the command line */
+    public void testStringEncryption()
+    {
+        String[] encryptionArgs = { "string", "enc", this.password, "mysecretpassword"};
+        Main.main(encryptionArgs);
+        String[] decryptionArgs = { "string", "dec", this.password, "9330419fc003b4e1461986782625db13f4c8c81c340a9caa"};
+        Main.main(decryptionArgs);
+    }
+
+    /** Encrypt a text file on the command line */
+    public void testFileEncryption1()
+    {
+        String[] encryptionArgs = { "file", "enc", this.password, "./src/test/data/plain.txt", "./target/main/plain.enc.txt" };
+        String[] decryptionArgs = { "file", "dec", this.password, "./target/main/plain.enc.txt", "./target/main/plain.dec.txt" };
+        Main.main(encryptionArgs);
+        Main.main(decryptionArgs);
+    }
+
+    /** Encrypt a text file in-place on the command line */
+    public void testFileEncryption2()
+    {
+        String[] encryptionArgs = { "file", "enc", this.password, "./src/test/data/plain.txt", "./target/main/plain.txt" };
+        String[] decryptionArgs = { "file", "dec", this.password, "./target/main/plain.txt" };
+        Main.main(encryptionArgs);
+        Main.main(decryptionArgs);
+    }
+
+}
\ No newline at end of file
diff --git a/yaafi-crypto/src/test/org/apache/fulcrum/jce/crypto/SmartDecryptingInputStreamTest.java b/yaafi-crypto/src/test/org/apache/fulcrum/jce/crypto/SmartDecryptingInputStreamTest.java
new file mode 100644
index 0000000..7bcfd96
--- /dev/null
+++ b/yaafi-crypto/src/test/org/apache/fulcrum/jce/crypto/SmartDecryptingInputStreamTest.java
@@ -0,0 +1,231 @@
+package org.apache.fulcrum.jce.crypto;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+import java.io.FileInputStream;
+
+import junit.framework.TestCase;
+
+/**
+ * Test suite for SmartDecryptingInputStream
+ *
+ * @author <a href="mailto:siegfried.goeschl@it20one.at">Siegfried Goeschl</a>
+ */
+
+public class SmartDecryptingInputStreamTest extends TestCase
+{
+    /** the password to be used */
+    private String password;
+
+    /** the test data directory */
+    private File testDataDirectory;
+
+    /** the temp data director */
+    private File tempDataDirectory;
+
+    /**
+     * Constructor
+     * @param name the name of the test case
+     */
+    public SmartDecryptingInputStreamTest( String name )
+    {
+        super(name);
+
+        this.password = "mysecret";
+        this.testDataDirectory = new File( "./src/test/data" );
+        this.tempDataDirectory = new File( "./temp" );
+    }
+
+    /**
+     * @see junit.framework.TestCase#setUp()
+     */
+    protected void setUp() throws Exception
+    {
+        CryptoStreamFactoryImpl factory = new CryptoStreamFactoryImpl(
+            CryptoParameters.SALT,
+            CryptoParameters.COUNT
+            );
+
+        CryptoStreamFactoryImpl.setInstance( factory );
+    }
+
+    /**
+     * @return Returns the password.
+     */
+    protected char[] getPassword()
+    {
+        return password.toCharArray();
+    }
+
+    /**
+     * @return Returns the tempDataDirectory.
+     */
+    protected File getTempDataDirectory()
+    {
+        return tempDataDirectory;
+    }
+
+    /**
+     * @return Returns the testDataDirectory.
+     */
+    protected File getTestDataDirectory()
+    {
+        return testDataDirectory;
+    }
+
+    public void testSmartEmtpyDecryption() throws Exception
+    {
+        this.testSmartDecryption("empty.txt","ISO-8859-1");
+    }
+
+    public void testSmartTextDecryption() throws Exception
+    {
+        this.testSmartDecryption("plain.txt","ISO-8859-1");
+    }
+
+    public void testSmartGroovyDecryption() throws Exception
+    {
+        this.testSmartDecryption("plain.groovy","ISO-8859-1");
+    }
+
+    public void testSmartXmlIso8859Utf8Decryption() throws Exception
+    {
+        this.testSmartDecryption("plain-iso-8859-1.xml","ISO-8859-1");
+    }
+
+    public void testSmartXmlUtf8Decryption() throws Exception
+    {
+        this.testSmartDecryption("plain-utf8.xml","UTF-8");
+    }
+
+    public void testSmartXmlUtf16Decryption() throws Exception
+    {
+        this.testSmartDecryption("plain-utf16.xml","UTF-16");
+    }
+
+    public void testPDFDecryption() throws Exception
+    {
+        this.testSmartDecryption("plain.pdf","ISO-8859-1");
+    }
+
+    public void testZIPDecryption() throws Exception
+    {
+        this.testSmartDecryption("plain.zip","ISO-8859-1");
+    }
+
+    /** Test smart decryption for a given file */
+    private void testSmartDecryption( String fileName, String enc ) throws Exception
+    {
+        File sourceFile = new File( this.getTestDataDirectory(), fileName );
+        String plainText = this.loadTextFile(sourceFile,enc);
+        String smartText = this.smartDecrypt(sourceFile,enc);
+        byte[] cipherText = this.encryptTextFile(sourceFile);
+        String decryptedText = this.smartDecrypt(cipherText,enc);
+
+        assertTrue( plainText.length() == smartText.length() );
+        assertTrue( plainText.length() == decryptedText.length() );
+        assertEquals( plainText, smartText );
+        assertEquals( plainText, decryptedText );
+    }
+
+    /**
+     * Loads a plain text file.
+     * @param file the file to load
+     */
+    private String loadTextFile( File file, String enc ) throws Exception
+    {
+        String result = null;
+        FileInputStream fis = new FileInputStream( file );
+        ByteArrayOutputStream baos = new ByteArrayOutputStream();
+        CryptoUtil.copy(fis,baos);
+        fis.close();
+        result = new String( baos.toByteArray(), enc );
+        return result;
+    }
+
+    /**
+     * Encrypt a plain text file.
+     * @param file the file to encrypt
+     */
+    private byte[] encryptTextFile( File file ) throws Exception
+    {
+        ByteArrayOutputStream baos = new ByteArrayOutputStream();
+        FileInputStream fis = new FileInputStream( file );
+
+        CryptoUtil.encrypt(
+            CryptoStreamFactoryImpl.getInstance(),
+            fis,
+            baos,
+            this.getPassword()
+            );
+
+        fis.close();
+
+        return baos.toByteArray();
+    }
+
+    /**
+     * Use smart decryption on a cipherText.
+     *
+     * @param cipherText the encrypted text
+     * @return the decrypeted content
+     */
+    private String smartDecrypt( byte[] cipherText, String enc ) throws Exception
+    {
+        ByteArrayInputStream bais = new ByteArrayInputStream(cipherText);
+        ByteArrayOutputStream baos = new ByteArrayOutputStream();
+
+        SmartDecryptingInputStream sdis = new SmartDecryptingInputStream(
+            CryptoStreamFactoryImpl.getInstance(),
+            bais,
+            this.getPassword()
+            );
+
+        CryptoUtil.copy(sdis,baos);
+
+        return new String( baos.toByteArray(), enc );
+    }
+
+    /**
+     * Use smart decryption on a plain text file.
+     *
+     * @param file the file to load
+     * @return the content
+     */
+    private String smartDecrypt( File file, String enc ) throws Exception
+    {
+        ByteArrayOutputStream baos = new ByteArrayOutputStream();
+        FileInputStream fis = new FileInputStream( file );
+
+        SmartDecryptingInputStream sdis = new SmartDecryptingInputStream(
+            CryptoStreamFactoryImpl.getInstance(),
+            fis,
+            this.getPassword()
+            );
+
+        CryptoUtil.copy(sdis,baos);
+        return new String( baos.toByteArray(), enc );
+    }
+
+}
diff --git a/yaafi-crypto/xdocs/changes.xml b/yaafi-crypto/xdocs/changes.xml
new file mode 100644
index 0000000..56db47f
--- /dev/null
+++ b/yaafi-crypto/xdocs/changes.xml
@@ -0,0 +1,51 @@
+<?xml version="1.0"?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements.  See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership.  The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License.  You may obtain a copy of the License at
+
+   http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied.  See the License for the
+ specific language governing permissions and limitations
+ under the License.
+-->
+<document>
+  <properties>
+    <title>Fulcrum YAAFI Crytpo Library</title>
+    <author email="siegfried.goeschl@it20one.at">Siegfried Goeschl</author>
+  </properties>
+
+  <body>
+    <release version="1.0.7" date="as in SVN">
+      <action dev="painter" type="update">
+        Simplify the HexConverter code, more Java 8 friendly
+      </action>
+      <action dev="painter" type="update">
+        Update parent pom to Turbine 5
+      </action>
+      <action dev="painter" type="update">
+        Remove references to StringBuffer
+      </action>
+      <action dev="painter" type="update">
+        Fix missing license from rat report
+      </action>
+    </release>
+    <release version="1.0.6" date="as in SVN">
+      <action dev="sgoeschl" type="update">
+        Using the official fulcrum-parent-1 pom.	
+      </action>
+      <action dev="sgoeschl" type="add">
+        Moving the code out of YAAFI and make a standalone library.
+      </action>
+    </release>
+  </body>
+</document>
+
diff --git a/yaafi-crypto/xdocs/downloads.xml b/yaafi-crypto/xdocs/downloads.xml
new file mode 100644
index 0000000..dc80df1
--- /dev/null
+++ b/yaafi-crypto/xdocs/downloads.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements.  See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership.  The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License.  You may obtain a copy of the License at
+
+   http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied.  See the License for the
+ specific language governing permissions and limitations
+ under the License.
+-->
+<document>
+  <properties>
+    <title>Fulcrum YAAFI Avalon Container</title>
+  </properties>
+  <body>
+    <section name="Downloads">
+      <p>List of available downloads.</p>
+      <table>
+        <tr>
+          <th>Download Links</th>
+          <th>Release Notes</th>
+        </tr>
+        <tr>
+          <td>
+            <a href="http://www.apache.org/dyn/closer.cgi/turbine/fulcrum/fulcrum-yaafi-crypto/binaries/fulcrum-yaafi-crypto-1.0.6-bin.zip">Fulcrum's YAAFI Crypto v1.0.6</a>
+          </td>
+          <td>
+            <a href="announcements/announcement-1.0.6.txt">1.0.6</a>
+          </td>
+        </tr>
+      </table>
+    </section>
+  </body>
+</document>
diff --git a/yaafi-crypto/xdocs/index.xml b/yaafi-crypto/xdocs/index.xml
new file mode 100644
index 0000000..47079d7
--- /dev/null
+++ b/yaafi-crypto/xdocs/index.xml
@@ -0,0 +1,123 @@
+<?xml version="1.0"?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements.  See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership.  The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License.  You may obtain a copy of the License at
+
+   http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied.  See the License for the
+ specific language governing permissions and limitations
+ under the License.
+-->
+
+<document>
+
+  <properties>
+    <title>Fulcrum Crypto Library</title>
+    <author email="siegfried.goeschl@it20one.at">Siegfried Goeschl</author>
+  </properties>
+
+  <body>
+
+    <section name="Overview">
+      <p> Fulcrum YAFFI Crypto Library is an extension library for Fulcrum YAAFI to support
+        transparent decryption of configuration files. The encryption/decryption is based on DES
+        using 56 bit key length. </p>
+    </section>
+
+    <section name="Functionality">
+      <p> This library exposes the following functionality <ul>
+          <li>password factory to create safer passwords</li>
+          <li>creation of decrypting input streams</li>
+          <li>creation of enrypting output streams</li>
+        </ul>
+      </p>
+      <subsection name="Password Creation">
+        <p> Why someone need a password factory to create safer password?! People tend to use weak
+          password vunerable to dictionary attacks. To improve the situation you have a base
+          password which you convert into the real password using the PasswordFactory. For the
+          password generation the base password is salted and repeatedly hashed to generate a UUID
+          string (which you can still manually enter on the keyboard). Furthermore the password
+          generation allows you to hide the "real" password in the case that you need to store your
+          password directly in your code or configuration.<table>
+            <tr>
+              <td>Base Text Password</td>
+              <td>Computed Text Password</td>
+            </tr>
+            <tr>
+              <td>fulcrum-yaafi</td>
+              <td>727a-98b9-93be-4537c</td>
+            </tr>
+            <tr>
+              <td>mysecret</td>
+              <td>62cc-bf14-1814-672da</td>
+            </tr>
+          </table>
+        </p>
+      </subsection>
+      <subsection name="Decrypting InputStreams">
+        <p> A decrypting input stream allows to apply transparent decryption of an input stream.
+          Transparently also means that the implementation is able to look at the content to decide
+          if it is encrypted at all - this is a so-called "SmartDecryptingInputStream". </p>
+      </subsection>
+      <subsection name="Encrypting OutputStreams">
+        <p> A encrypting output stream allows to apply transparent encryption of an output stream.
+        </p>
+      </subsection>
+    </section>
+
+    <section name="Cryptography Support">
+      <subsection name="JDK Support">
+        <table>
+          <tr>
+            <td>JDK 1.3.x</td>
+            <td> For JDK 1.3.x the <a href="http://java.sun.com/products/jce/index-122.html"> Java
+                Cryptography Extension (JCE) 1.2.2</a> needs to be installed. Furthermore you need
+              to add the jce1_2_2.jar to your Maven repository and project.xml </td>
+          </tr>
+          <tr>
+            <td>JDK 1.4.x</td>
+            <td> The current JDK's have the JCA built-in therefore no extra configuration is
+              required. </td>
+          </tr>
+          <tr>
+            <td>JDK 1.5.x</td>
+            <td> The current JDK's have the JCA built-in therefore no extra configuration is
+              required. </td>
+          </tr>
+          <tr>
+            <td>JDK 1.6.x</td>
+            <td> The current JDK's have the JCA built-in therefore no extra configuration is
+              required. </td>
+          </tr>
+        </table>
+      </subsection>
+      <subsection name="Availabe Algorithms">
+        <table>
+          <tr>
+            <th>Provider Version</th>
+            <th>Algorithms</th>
+          </tr>
+          <tr>
+            <td>SunJCE 1.22</td>
+            <td>PBEWithMD5AndDES</td>
+          </tr>
+          <tr>
+            <td>SunJCE 1.42</td>
+            <td> PBEWithMD5AndDES </td>
+          </tr>
+        </table>
+      </subsection>
+    </section>
+
+  </body>
+
+</document>

[turbine-fulcrum-yaafi-crypto] 10/11: Removing spaces from dev connect links introduced by script to update all poms

Posted by gk...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

gk pushed a commit to tag fulcrum-yaafi-crypto-1.0.7
in repository https://gitbox.apache.org/repos/asf/turbine-fulcrum-yaafi-crypto.git

commit 586496b8a2448c951b687a78d88c89997c0286d1
Author: Jeffery Painter <pa...@apache.org>
AuthorDate: Tue May 21 03:33:45 2019 +0000

    Removing spaces from dev connect links introduced by script to update all poms
    
    git-svn-id: https://svn.apache.org/repos/asf/turbine/fulcrum/tags/fulcrum-yaafi-crypto-1.0.7@1859603 13f79535-47bb-0310-9956-ffa450edef68
---
 pom.xml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/pom.xml b/pom.xml
index 73280ea..1b50b05 100644
--- a/pom.xml
+++ b/pom.xml
@@ -43,7 +43,7 @@
 		
   <scm>
     <connection>scm:svn:http://svn.apache.org/repos/asf/turbine/fulcrum/tags/fulcrum-yaafi-crypto-1.0.7/</connection>
-    <developerConnection>scm:svn: https://svn.apache.org/repos/asf/turbine/fulcrum/tags/fulcrum-yaafi-crypto-1.0.7</developerConnection>
+    <developerConnection>scm:svn:https://svn.apache.org/repos/asf/turbine/fulcrum/tags/fulcrum-yaafi-crypto-1.0.7</developerConnection>
     <url>http://svn.apache.org/viewvc/turbine/fulcrum/tags/fulcrum-yaafi-crypto-1.0.7</url>
   </scm>
 	

[turbine-fulcrum-yaafi-crypto] 09/11: Update tagged fulcrum component poms for publishing to website

Posted by gk...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

gk pushed a commit to tag fulcrum-yaafi-crypto-1.0.7
in repository https://gitbox.apache.org/repos/asf/turbine-fulcrum-yaafi-crypto.git

commit 864ea59628070d36eed28b0796ac044a4f59e562
Author: Jeffery Painter <pa...@apache.org>
AuthorDate: Tue May 21 03:24:47 2019 +0000

    Update tagged fulcrum component poms for publishing to website
    
    git-svn-id: https://svn.apache.org/repos/asf/turbine/fulcrum/tags/fulcrum-yaafi-crypto-1.0.7@1859601 13f79535-47bb-0310-9956-ffa450edef68
---
 pom.xml | 19 +++++++++++++++++--
 1 file changed, 17 insertions(+), 2 deletions(-)

diff --git a/pom.xml b/pom.xml
index f3a50ae..73280ea 100644
--- a/pom.xml
+++ b/pom.xml
@@ -32,10 +32,18 @@
   <inceptionYear>2008</inceptionYear>
   <description>Fulcrum YAAFI Crypto Library</description>
   <url>http://turbine.apache.org/fulcrum/fulcrum-yaafi-crytpo</url>
+
+  <!-- Required for staging to work -->
+  <distributionManagement>
+    <site>
+      <id>turbine.apache.org</id>
+      <url>https://turbine.apache.org/fulcrum/fulcrum-yaafi-crypto</url>
+    </site>
+  </distributionManagement>
 		
   <scm>
-    <connection>scm:svn:http://svn.apache.org/repos/asf/turbine/fulcrum/tags/fulcrum-yaafi-crypto-1.0.7</connection>
-    <developerConnection>scm:svn:https://svn.apache.org/repos/asf/turbine/fulcrum/tags/fulcrum-yaafi-crypto-1.0.7</developerConnection>
+    <connection>scm:svn:http://svn.apache.org/repos/asf/turbine/fulcrum/tags/fulcrum-yaafi-crypto-1.0.7/</connection>
+    <developerConnection>scm:svn: https://svn.apache.org/repos/asf/turbine/fulcrum/tags/fulcrum-yaafi-crypto-1.0.7</developerConnection>
     <url>http://svn.apache.org/viewvc/turbine/fulcrum/tags/fulcrum-yaafi-crypto-1.0.7</url>
   </scm>
 	
@@ -65,6 +73,13 @@
     <sourceDirectory>${basedir}/src/java</sourceDirectory>
     <testSourceDirectory>${basedir}/src/test</testSourceDirectory>
   </build>
+
+  <properties>
+    <turbine.site.path>fulcrum/fulcrum-yaafi-crypto</turbine.site.path>
+    <turbine.scmPubCheckoutDirectory>${turbine.site.cache}/fulcrum/fulcrum-yaafi-crypto</turbine.scmPubCheckoutDirectory>
+    <turbine.site.cache>${project.build.directory}/turbine-sites</turbine.site.cache>
+    <siteContent.path>${project.build.directory}/staging</siteContent.path><!-- default stagingSiteURL -->
+  </properties>  
   
   <properties>
     <turbine.site.path>fulcrum/fulcrum-yaafi-crypto</turbine.site.path>

[turbine-fulcrum-yaafi-crypto] 04/11: [maven-release-plugin] copy for tag fulcrum-yaafi-crypto-1.0.7

Posted by gk...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

gk pushed a commit to tag fulcrum-yaafi-crypto-1.0.7
in repository https://gitbox.apache.org/repos/asf/turbine-fulcrum-yaafi-crypto.git

commit 39cd490f46178fa0f0825bf6d2f3db117622f2bc
Author: Jeffery Painter <pa...@apache.org>
AuthorDate: Thu Nov 8 14:17:17 2018 +0000

    [maven-release-plugin] copy for tag fulcrum-yaafi-crypto-1.0.7
    
    git-svn-id: https://svn.apache.org/repos/asf/turbine/fulcrum/tags/fulcrum-yaafi-crypto-1.0.7@1846153 13f79535-47bb-0310-9956-ffa450edef68
---
 fulcrum-yaafi-crypto-1.0.7/LICENSE.txt             | 202 ++++++
 fulcrum-yaafi-crypto-1.0.7/NOTICE.txt              |   6 +
 fulcrum-yaafi-crypto-1.0.7/pom.xml                 |  73 +++
 .../fulcrum/jce/crypto/CryptoParameters.java       |  42 ++
 .../fulcrum/jce/crypto/CryptoStreamFactory.java    | 136 ++++
 .../jce/crypto/CryptoStreamFactoryImpl.java        | 326 ++++++++++
 .../org/apache/fulcrum/jce/crypto/CryptoUtil.java  | 225 +++++++
 .../apache/fulcrum/jce/crypto/HexConverter.java    |  72 +++
 .../apache/fulcrum/jce/crypto/PasswordFactory.java | 181 ++++++
 .../fulcrum/jce/crypto/PasswordParameters.java     |  46 ++
 .../jce/crypto/SmartDecryptingInputStream.java     | 381 +++++++++++
 .../org/apache/fulcrum/jce/crypto/StreamUtil.java  | 186 ++++++
 .../resources/announcements/announcement-1.0.6.txt |   1 +
 fulcrum-yaafi-crypto-1.0.7/src/site/site.xml       |  31 +
 fulcrum-yaafi-crypto-1.0.7/src/test/data/empty.txt |   0
 .../src/test/data/plain-iso-8859-1.xml             |  56 ++
 .../src/test/data/plain-utf16.xml                  | Bin 0 -> 4372 bytes
 .../src/test/data/plain-utf8.xml                   |  56 ++
 .../src/test/data/plain.groovy                     |  44 ++
 fulcrum-yaafi-crypto-1.0.7/src/test/data/plain.pdf | 716 +++++++++++++++++++++
 fulcrum-yaafi-crypto-1.0.7/src/test/data/plain.txt | 254 ++++++++
 fulcrum-yaafi-crypto-1.0.7/src/test/data/plain.xml |  56 ++
 fulcrum-yaafi-crypto-1.0.7/src/test/data/plain.zip | Bin 0 -> 38862 bytes
 .../apache/fulcrum/jce/crypto/CryptoUtilTest.java  | 302 +++++++++
 .../test/org/apache/fulcrum/jce/crypto/Main.java   | 181 ++++++
 .../org/apache/fulcrum/jce/crypto/MainTest.java    |  81 +++
 .../jce/crypto/SmartDecryptingInputStreamTest.java | 231 +++++++
 fulcrum-yaafi-crypto-1.0.7/xdocs/changes.xml       |  51 ++
 fulcrum-yaafi-crypto-1.0.7/xdocs/downloads.xml     |  43 ++
 fulcrum-yaafi-crypto-1.0.7/xdocs/index.xml         | 123 ++++
 30 files changed, 4102 insertions(+)

diff --git a/fulcrum-yaafi-crypto-1.0.7/LICENSE.txt b/fulcrum-yaafi-crypto-1.0.7/LICENSE.txt
new file mode 100644
index 0000000..d645695
--- /dev/null
+++ b/fulcrum-yaafi-crypto-1.0.7/LICENSE.txt
@@ -0,0 +1,202 @@
+
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "[]"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright [yyyy] [name of copyright owner]
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
diff --git a/fulcrum-yaafi-crypto-1.0.7/NOTICE.txt b/fulcrum-yaafi-crypto-1.0.7/NOTICE.txt
new file mode 100644
index 0000000..0a2d75a
--- /dev/null
+++ b/fulcrum-yaafi-crypto-1.0.7/NOTICE.txt
@@ -0,0 +1,6 @@
+Turbine Fulcrum ServiceManager
+Copyright 2002-2007 The Apache Software Foundation.
+
+This product includes software developed at
+The Apache Software Foundation (http://www.apache.org/).
+
diff --git a/fulcrum-yaafi-crypto-1.0.7/pom.xml b/fulcrum-yaafi-crypto-1.0.7/pom.xml
new file mode 100644
index 0000000..f3a50ae
--- /dev/null
+++ b/fulcrum-yaafi-crypto-1.0.7/pom.xml
@@ -0,0 +1,73 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+   Licensed to the Apache Software Foundation (ASF) under one or more
+   contributor license agreements.  See the NOTICE file distributed with
+   this work for additional information regarding copyright ownership.
+   The ASF licenses this file to You under the Apache License, Version 2.0
+   (the "License"); you may not use this file except in compliance with
+   the License.  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+  <parent>
+    <artifactId>turbine-parent</artifactId>
+       <groupId>org.apache.turbine</groupId>
+       <version>5</version>
+  </parent>
+
+  <modelVersion>4.0.0</modelVersion>
+  <artifactId>fulcrum-yaafi-crypto</artifactId>
+  <groupId>org.apache.fulcrum</groupId>
+  <version>1.0.7</version>
+  <name>Fulcrum YAAFI Crypto</name>
+  <inceptionYear>2008</inceptionYear>
+  <description>Fulcrum YAAFI Crypto Library</description>
+  <url>http://turbine.apache.org/fulcrum/fulcrum-yaafi-crytpo</url>
+		
+  <scm>
+    <connection>scm:svn:http://svn.apache.org/repos/asf/turbine/fulcrum/tags/fulcrum-yaafi-crypto-1.0.7</connection>
+    <developerConnection>scm:svn:https://svn.apache.org/repos/asf/turbine/fulcrum/tags/fulcrum-yaafi-crypto-1.0.7</developerConnection>
+    <url>http://svn.apache.org/viewvc/turbine/fulcrum/tags/fulcrum-yaafi-crypto-1.0.7</url>
+  </scm>
+	
+  <developers>
+    <developer>
+      <name>Siegfried Goeschl</name>
+      <id>sgoeschl</id>
+      <email>sgoeschl@apache.org</email>
+      <organization />
+      <roles>
+        <role>Java Developer</role>
+      </roles>
+    </developer>
+  </developers>
+
+  <dependencies>
+    <!-- testing dependencies -->
+    <dependency>
+      <groupId>junit</groupId>
+      <artifactId>junit</artifactId>
+      <version>4.12</version>
+      <scope>test</scope>
+    </dependency>
+  </dependencies>
+
+  <build>
+    <sourceDirectory>${basedir}/src/java</sourceDirectory>
+    <testSourceDirectory>${basedir}/src/test</testSourceDirectory>
+  </build>
+  
+  <properties>
+    <turbine.site.path>fulcrum/fulcrum-yaafi-crypto</turbine.site.path>
+  </properties>  
+	
+</project>
diff --git a/fulcrum-yaafi-crypto-1.0.7/src/java/org/apache/fulcrum/jce/crypto/CryptoParameters.java b/fulcrum-yaafi-crypto-1.0.7/src/java/org/apache/fulcrum/jce/crypto/CryptoParameters.java
new file mode 100644
index 0000000..9ee3eb3
--- /dev/null
+++ b/fulcrum-yaafi-crypto-1.0.7/src/java/org/apache/fulcrum/jce/crypto/CryptoParameters.java
@@ -0,0 +1,42 @@
+package org.apache.fulcrum.jce.crypto;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+
+/**
+ * CryptoParameters used for encryption/decrytpion.
+ *
+ * @author <a href="mailto:siegfried.goeschl@it20one.at">Siegfried Goeschl</a>
+ */
+
+public interface CryptoParameters
+{
+    /** Parameter for PBEParameterSpec */
+    int COUNT = 20;
+
+    /** The password salt */
+    byte[] SALT = {
+        (byte)0xc7, (byte)0x73, (byte)0x21, (byte)0x8c,
+        (byte)0x7e, (byte)0xc8, (byte)0xee, (byte)0x99
+        };
+
+    /** The crypto algorithm being used */
+    String ALGORITHM = "PBEWithMD5AndDES";
+}
diff --git a/fulcrum-yaafi-crypto-1.0.7/src/java/org/apache/fulcrum/jce/crypto/CryptoStreamFactory.java b/fulcrum-yaafi-crypto-1.0.7/src/java/org/apache/fulcrum/jce/crypto/CryptoStreamFactory.java
new file mode 100644
index 0000000..34e55a3
--- /dev/null
+++ b/fulcrum-yaafi-crypto-1.0.7/src/java/org/apache/fulcrum/jce/crypto/CryptoStreamFactory.java
@@ -0,0 +1,136 @@
+package org.apache.fulcrum.jce.crypto;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.security.GeneralSecurityException;
+
+/**
+ * Interface for creating encrypting/decrypting streams. 
+ *
+ * @author <a href="mailto:siegfried.goeschl@it20one.at">Siegfried Goeschl </a>
+ */
+
+public interface CryptoStreamFactory
+{
+    /**
+     * Creates input stream based on the decryption mode
+     * using the default password.
+     *
+     * @param is the input stream to be wrapped
+     * @param decryptionMode the decryption mode (true|false|auto)
+     * @return an decrypting input stream
+     * @throws GeneralSecurityException creating the input stream failed
+     * @throws IOException creating the input stream failed
+     */
+    InputStream getInputStream(InputStream is, String decryptionMode)
+        throws GeneralSecurityException, IOException;
+
+    /**
+     * Creates input stream based on the decryption mode
+     * using the given password.
+     *
+     * @param is the input stream to be wrapped
+     * @param decryptionMode the decryption mode (true|false|auto)
+     * @param password the password to be used
+     * @return an decrypting input stream
+     * @throws GeneralSecurityException creating the input stream failed
+     * @throws IOException creating the input stream failed
+     */
+    InputStream getInputStream(InputStream is, String decryptionMode, char[] password)
+        throws GeneralSecurityException, IOException;
+
+    /**
+     * Creates a decrypting input stream using the default password.
+     *
+     * @param is the input stream to be wrapped
+     * @return an decrypting input stream
+     * @throws GeneralSecurityException creating the input stream failed
+     * @throws IOException creating the input stream failed
+     */
+    InputStream getInputStream(InputStream is)
+        throws GeneralSecurityException, IOException;
+
+    /**
+     * Creates an decrypting input stream using a given password.
+     *
+     * @param is the input stream to be wrapped
+     * @param password the password to be used
+     * @return an decrypting input stream
+     * @throws GeneralSecurityException creating the input stream failed
+     * @throws IOException creating the input stream failed
+     */
+    InputStream getInputStream(InputStream is, char[] password)
+        throws GeneralSecurityException, IOException;
+
+    /**
+     * Creates a smart decrypting input stream using the default
+     * password. The implementation looks at the binary content
+     * to decide if it was encrypted or not thereby providing
+     * transparent access to encrypted/unencrypted files.
+     *
+     * @param is the input stream to be wrapped
+     * @return an decrypting input stream
+     * @throws GeneralSecurityException creating the input stream failed
+     * @throws IOException creating the input stream failed
+     */
+    InputStream getSmartInputStream(InputStream is)
+        throws GeneralSecurityException, IOException;
+
+    /**
+     * Creates a smart decrypting input stream using a given
+     * password. The implementation looks at the binary content
+     * to decide if it was encrypted or not thereby providing
+     * transparent access to encrypted/unencrypted files.
+     *
+     * @param is the input stream to be wrapped
+     * @param password the password to be used
+     * @return an decrypting input stream
+     * @throws GeneralSecurityException creating the input stream failed
+     * @throws IOException creating the input stream failed
+     */
+    InputStream getSmartInputStream(InputStream is, char[] password)
+        throws GeneralSecurityException, IOException;
+
+    /**
+     * Creates an encrypting output stream using the default password.
+     *
+     * @param os the output stream to be wrapped
+     * @return an decrypting input stream
+     * @throws GeneralSecurityException creating the ouptut stream failed
+     * @throws IOException creating the ouptut stream failed
+     */
+    OutputStream getOutputStream(OutputStream os)
+        throws GeneralSecurityException, IOException;
+
+    /**
+     * Creates an encrypting output stream using the given password.
+     *
+     * @param os the output stream to be wrapped
+     * @param password the password to be used
+     * @return an decrypting input stream
+     * @throws GeneralSecurityException creating the ouptut stream failed
+     * @throws IOException creating the ouptut stream failed
+     */
+    OutputStream getOutputStream(OutputStream os, char[] password)
+        throws GeneralSecurityException, IOException;
+}
diff --git a/fulcrum-yaafi-crypto-1.0.7/src/java/org/apache/fulcrum/jce/crypto/CryptoStreamFactoryImpl.java b/fulcrum-yaafi-crypto-1.0.7/src/java/org/apache/fulcrum/jce/crypto/CryptoStreamFactoryImpl.java
new file mode 100644
index 0000000..2449cf4
--- /dev/null
+++ b/fulcrum-yaafi-crypto-1.0.7/src/java/org/apache/fulcrum/jce/crypto/CryptoStreamFactoryImpl.java
@@ -0,0 +1,326 @@
+package org.apache.fulcrum.jce.crypto;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.security.GeneralSecurityException;
+import java.security.Key;
+
+import javax.crypto.Cipher;
+import javax.crypto.CipherInputStream;
+import javax.crypto.CipherOutputStream;
+import javax.crypto.SecretKeyFactory;
+import javax.crypto.spec.PBEKeySpec;
+import javax.crypto.spec.PBEParameterSpec;
+
+/**
+ * Concrete factory for creating encrypting/decrypting streams. The
+ * implementation uses the JCA (Java Crypto Extension) supplied
+ * by SUN (using SunJCE 1.42).
+ *
+ * The implementation uses as PBEWithMD5AndDES for encryption which
+ * should be sufficent for most applications.
+ *
+ * The implementation also supplies a default password in the case that
+ * the programmer don't want to have additional hassles. It is easy to
+ * reengineer the password being used but much better than a hard-coded
+ * password in the application.
+ *
+ * The code uses parts from Markus Hahn's Blowfish library found at
+ * http://blowfishj.sourceforge.net/
+ *
+ * @author <a href="mailto:siegfried.goeschl@it20one.at">Siegfried Goeschl </a>
+ * @author <a href="mailto:maakus@earthlink.net">Markus Hahn</a>
+ */
+
+public final class CryptoStreamFactoryImpl implements CryptoStreamFactory
+{
+    /** the salt for the PBE algorithm */
+    private byte[] salt;
+
+    /** the count paramter for the PBE algorithm */
+    private int count;
+
+    /** the name of the JCE provider */
+    private String providerName;
+
+    /** the algorithm to use */
+    private String algorithm;
+
+    /** the default instance */
+    private static CryptoStreamFactory instance;
+
+    /**
+     * The JCE provider name known to work. If the value
+     * is set to null an appropriate provider will be
+     * used.
+     */
+    private static final String PROVIDERNAME = null;
+
+    /**
+     * Factory method to get a default instance
+     * @return an instance of the CryptoStreamFactory
+     */
+    public synchronized static CryptoStreamFactory getInstance()
+    {
+        if( CryptoStreamFactoryImpl.instance == null )
+        {
+            CryptoStreamFactoryImpl.instance = new CryptoStreamFactoryImpl();
+        }
+
+        return CryptoStreamFactoryImpl.instance;
+    }
+
+    /**
+     * Set the default instance from an external application.
+     * @param instance the new default instance
+     */
+    public static void setInstance( CryptoStreamFactory instance )
+    {
+        CryptoStreamFactoryImpl.instance = instance;
+    }
+
+    /**
+     * Constructor
+     */
+    public CryptoStreamFactoryImpl()
+    {
+        this.salt = CryptoParameters.SALT;
+        this.count = CryptoParameters.COUNT;
+        this.providerName = PROVIDERNAME;
+        this.algorithm = CryptoParameters.ALGORITHM;
+    }
+
+    /**
+     * Constructor
+     *
+     * @param salt the salt for the PBE algorithm
+     * @param count the iteration for PBEParameterSpec
+     */
+    public CryptoStreamFactoryImpl( byte[] salt, int count)
+    {
+        this.salt = salt;
+        this.count = count;
+        this.providerName = PROVIDERNAME;
+        this.algorithm = CryptoParameters.ALGORITHM;
+    }
+
+
+    /**
+     * @see org.apache.fulcrum.jce.crypto.CryptoStreamFactory#getInputStream(java.io.InputStream, String)
+     */
+    public InputStream getInputStream(InputStream is, String decryptionMode) throws GeneralSecurityException, IOException {
+
+        InputStream result = null;
+
+        if( "auto".equalsIgnoreCase(decryptionMode) )
+        {
+            result = CryptoStreamFactoryImpl.getInstance().getSmartInputStream(is);
+        }
+        else if( "true".equalsIgnoreCase(decryptionMode) )
+        {
+            result = CryptoStreamFactoryImpl.getInstance().getInputStream(is);
+        }
+        else
+        {
+            result = is;
+        }
+        return result;
+    }
+
+    /**
+     * @see org.apache.fulcrum.jce.crypto.CryptoStreamFactory#getInputStream(java.io.InputStream, String, char[])
+     */
+    public InputStream getInputStream(InputStream is, String decryptionMode, char[] password) throws GeneralSecurityException, IOException {
+
+        InputStream result = null;
+
+        if( "auto".equalsIgnoreCase(decryptionMode) )
+        {
+            result = CryptoStreamFactoryImpl.getInstance().getSmartInputStream(is, password);
+        }
+        else if( "true".equalsIgnoreCase(decryptionMode) )
+        {
+            result = CryptoStreamFactoryImpl.getInstance().getInputStream(is, password);
+        }
+        else
+        {
+            result = is;
+        }
+        return result;
+    }
+
+    /**
+     * @see org.apache.fulcrum.jce.crypto.CryptoStreamFactory#getInputStream(java.io.InputStream)
+     */
+    public InputStream getInputStream( InputStream is )
+        throws GeneralSecurityException, IOException
+    {
+        Cipher cipher = this.createCipher( Cipher.DECRYPT_MODE, PasswordFactory.create() );
+        return new CipherInputStream( is, cipher );
+    }
+
+    /**
+     * @see org.apache.fulcrum.jce.crypto.CryptoStreamFactory#getInputStream(java.io.InputStream,char[])
+     */
+    public InputStream getInputStream( InputStream is, char[] password )
+        throws GeneralSecurityException, IOException
+    {
+        Cipher cipher = this.createCipher( Cipher.DECRYPT_MODE, password );
+        return new CipherInputStream( is, cipher );
+    }
+
+    /**
+     * @see org.apache.fulcrum.jce.crypto.CryptoStreamFactory#getSmartInputStream(java.io.InputStream)
+     */
+    public InputStream getSmartInputStream(InputStream is)
+        throws GeneralSecurityException, IOException
+    {
+        return this.getSmartInputStream(
+            is,
+            PasswordFactory.create()
+            );
+    }
+
+    /**
+     * @see org.apache.fulcrum.jce.crypto.CryptoStreamFactory#getSmartInputStream(java.io.InputStream,char[])
+     */
+    public InputStream getSmartInputStream(InputStream is, char[] password )
+        throws GeneralSecurityException, IOException
+    {
+        SmartDecryptingInputStream result;
+
+        result = new SmartDecryptingInputStream(
+            getInstance(),
+            is,
+            password
+            );
+
+        return result;
+    }
+
+    /**
+     * @see org.apache.fulcrum.jce.crypto.CryptoStreamFactory#getOutputStream(java.io.OutputStream)
+     */
+    public OutputStream getOutputStream( OutputStream os )
+        throws GeneralSecurityException, IOException
+    {
+        Cipher cipher = this.createCipher( Cipher.ENCRYPT_MODE, PasswordFactory.create() );
+        return new CipherOutputStream( os, cipher );    }
+
+    /**
+     * @see org.apache.fulcrum.jce.crypto.CryptoStreamFactory#getOutputStream(java.io.OutputStream, char[])
+     */
+    public OutputStream getOutputStream( OutputStream os, char[] password )
+        throws GeneralSecurityException, IOException
+    {
+        Cipher cipher = this.createCipher( Cipher.ENCRYPT_MODE, password );
+        return new CipherOutputStream( os, cipher );
+    }
+
+    /**
+     * @return Returns the algorithm.
+     */
+    private String getAlgorithm()
+    {
+        return algorithm;
+    }
+
+    /**
+     * @return Returns the count.
+     */
+    private int getCount()
+    {
+        return count;
+    }
+
+    /**
+     * @return Returns the providerName.
+     */
+    private String getProviderName()
+    {
+        return providerName;
+    }
+
+    /**
+     * @return Returns the salt.
+     */
+    private byte [] getSalt()
+    {
+        return salt;
+    }
+
+    /**
+     * Create a PBE key.
+     *
+     * @param password the password to use.
+     * @return the key
+     * @throws GeneralSecurityException creating the key failed
+     */
+    private Key createKey( char[] password )
+        throws GeneralSecurityException
+    {
+        SecretKeyFactory keyFactory;
+        String algorithm = this.getAlgorithm();
+        PBEKeySpec keySpec =  new PBEKeySpec(password);
+
+        if( this.getProviderName() == null )
+        {
+            keyFactory = SecretKeyFactory.getInstance( algorithm );
+        }
+        else
+        {
+            keyFactory = SecretKeyFactory.getInstance( algorithm, this.getProviderName() );
+        }
+
+        return keyFactory.generateSecret(keySpec);
+    }
+
+    /**
+     * Create a Cipher.
+     *
+     * @param mode the cipher mode
+     * @param password the password
+     * @return an instance of a cipher
+     * @throws GeneralSecurityException creating a cipher failed
+     * @throws IOException creating a cipher failed
+     */
+    private Cipher createCipher( int mode, char[] password )
+        throws GeneralSecurityException, IOException
+    {
+        Cipher cipher;
+        PBEParameterSpec paramSpec = new PBEParameterSpec( this.getSalt(), this.getCount() );
+        Key key = this.createKey( password );
+
+        if( this.getProviderName() == null )
+        {
+            cipher = Cipher.getInstance( this.getAlgorithm() );
+        }
+        else
+        {
+            cipher = Cipher.getInstance( this.getAlgorithm(), this.getProviderName() );
+        }
+
+        cipher.init( mode, key, paramSpec );
+        return cipher;
+    }
+}
diff --git a/fulcrum-yaafi-crypto-1.0.7/src/java/org/apache/fulcrum/jce/crypto/CryptoUtil.java b/fulcrum-yaafi-crypto-1.0.7/src/java/org/apache/fulcrum/jce/crypto/CryptoUtil.java
new file mode 100644
index 0000000..153d905
--- /dev/null
+++ b/fulcrum-yaafi-crypto-1.0.7/src/java/org/apache/fulcrum/jce/crypto/CryptoUtil.java
@@ -0,0 +1,225 @@
+package org.apache.fulcrum.jce.crypto;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.security.GeneralSecurityException;
+
+/**
+ * Helper class to provde generic functions to work with CryptoStreams.
+ *
+ * The code uses parts from Markus Hahn's Blowfish library found at
+ * http://blowfishj.sourceforge.net/
+ *
+ * @author <a href="mailto:siegfried.goeschl@it20one.at">Siegfried Goeschl </a>
+ * @author <a href="mailto:maakus@earthlink.net">Markus Hahn</a>
+ */
+
+public final class CryptoUtil
+{
+    /**
+     * Copies from a source to a target object using encryption
+     *
+     * @param source the source object
+     * @param target the target object
+     * @param password the password to use for encryption
+     * @throws GeneralSecurityException accessing JCE failed
+     * @throws IOException accessing the souce failed
+     *
+     */
+    public static void encrypt( Object source, Object target, char[] password )
+        throws GeneralSecurityException, IOException
+    {
+        CryptoUtil.encrypt(
+            CryptoUtil.getCryptoStreamFactory(),
+            source,
+            target,
+            password
+            );
+    }
+
+    /**
+     * Copies from a source to a target object using encryption and a
+     * caller supplied CryptoStreamFactory.
+     *
+     * @param factory the factory to create the crypto streams
+     * @param source the source object
+     * @param target the target object
+     * @param password the password to use for encryption
+     * @throws GeneralSecurityException accessing JCE failed
+     * @throws IOException accessing the souce failed
+     */
+    public static void encrypt(
+        CryptoStreamFactory factory, Object source, Object target, char[] password )
+        throws GeneralSecurityException, IOException
+    {
+        InputStream is = StreamUtil.createInputStream( source );
+        OutputStream os = StreamUtil.createOutputStream( target );
+        OutputStream eos = factory.getOutputStream( os, password );
+        StreamUtil.copy( is, eos );
+    }
+
+    /**
+     * Copies from a source to a target object using decryption.
+     *
+     * @param source the source object
+     * @param target the target object
+     * @param password the password to use for decryption
+     * @throws GeneralSecurityException accessing JCE failed
+     * @throws IOException accessing the souce failed
+     */
+    public static void decrypt( Object source, Object target, char[] password )
+        throws GeneralSecurityException, IOException
+    {
+        CryptoUtil.decrypt(
+            CryptoUtil.getCryptoStreamFactory(),
+            source,
+            target,
+            password
+            );
+    }
+
+    /**
+     * Copies from a source to a target object using decryption and a
+     * caller-suppier CryptoStreamFactory.
+     *
+     * @param factory the factory to create the crypto streams
+     * @param source the source object
+     * @param target the target object
+     * @param password the password to use for decryption
+     * @throws GeneralSecurityException accessing JCE failed
+     * @throws IOException accessing the souce failed
+     */
+    public static void decrypt(
+        CryptoStreamFactory factory, Object source, Object target, char[] password )
+        throws GeneralSecurityException, IOException
+    {
+        InputStream is = StreamUtil.createInputStream( source );
+        OutputStream os = StreamUtil.createOutputStream( target );
+        InputStream dis = factory.getInputStream( is, password );
+        StreamUtil.copy( dis, os );
+    }
+
+    /**
+     * Encrypts a string into a hex string.
+     *
+     * @param plainText the plain text to be encrypted
+     * @param password the password for encryption
+     * @return the encrypted string
+     * @throws GeneralSecurityException accessing JCE failed
+     * @throws IOException accessing the souce failed
+     */
+    public static String encryptString( String plainText, char[] password )
+        throws GeneralSecurityException, IOException
+    {
+        return CryptoUtil.encryptString(
+            CryptoUtil.getCryptoStreamFactory(),
+            plainText,
+            password
+            );
+    }
+
+    /**
+     * Encrypts a string into a hex string.
+     *
+     * @param factory the factory to create the crypto streams
+     * @param plainText the plain text to be encrypted
+     * @param password the password for encryption
+     * @return the encrypted string
+     * @throws GeneralSecurityException accessing JCE failed
+     * @throws IOException accessing the souce failed
+     */
+    public static String encryptString(
+        CryptoStreamFactory factory, String plainText, char[] password )
+        throws GeneralSecurityException, IOException
+    {
+        ByteArrayOutputStream bais = new ByteArrayOutputStream();
+        CryptoUtil.encrypt( factory, plainText, bais, password );
+        return HexConverter.toString( bais.toByteArray() );
+    }
+
+    /**
+     * Decrypts an encrypted string into the plain text. The encrypted
+     * string must be a hex string created by encryptString.
+     *
+     * @param cipherText the encrypted text to be decrypted
+     * @param password the password for decryption
+     * @return the decrypted string
+     * @throws GeneralSecurityException accessing JCE failed
+     * @throws IOException accessing the souce failed
+     */
+    public static String decryptString( String cipherText, char[] password )
+        throws GeneralSecurityException, IOException
+    {
+        return CryptoUtil.decryptString(
+            CryptoUtil.getCryptoStreamFactory(),
+            cipherText,
+            password
+            );
+    }
+
+    /**
+     * Decrypts an encrypted string into the plain text. The encrypted
+     * string must be a hex string created by encryptString.
+     *
+     * @param factory the factory to create the crypto streams
+     * @param cipherText the encrypted text to be decrypted
+     * @param password the password for decryption
+     * @return the decrypted string
+     * @throws GeneralSecurityException accessing JCE failed
+     * @throws IOException accessing the souce failed
+     */
+    public static String decryptString(
+        CryptoStreamFactory factory, String cipherText, char[] password )
+        throws GeneralSecurityException, IOException
+    {
+        byte[] buffer = HexConverter.toBytes( cipherText );
+        ByteArrayOutputStream bais = new ByteArrayOutputStream();
+        CryptoUtil.decrypt( factory, buffer, bais, password );
+        return new String( bais.toByteArray(), "utf-8" );
+    }
+
+    /**
+     * Pumps the input stream to the output stream.
+     *
+     * @param is the source input stream
+     * @param os the target output stream
+     * @return the number of bytes copied
+     * @throws IOException the copying failed
+     * @deprecated use StreamUtil instead
+     */
+    public static long copy( InputStream is, OutputStream os )
+        throws IOException
+    {
+        return StreamUtil.copy(is, os);
+    }
+
+    /**
+     * @return the CryptoStreamFactory to be used
+     */
+    public static CryptoStreamFactory getCryptoStreamFactory()
+    {
+        return CryptoStreamFactoryImpl.getInstance();
+    }
+}
diff --git a/fulcrum-yaafi-crypto-1.0.7/src/java/org/apache/fulcrum/jce/crypto/HexConverter.java b/fulcrum-yaafi-crypto-1.0.7/src/java/org/apache/fulcrum/jce/crypto/HexConverter.java
new file mode 100644
index 0000000..92aa6e1
--- /dev/null
+++ b/fulcrum-yaafi-crypto-1.0.7/src/java/org/apache/fulcrum/jce/crypto/HexConverter.java
@@ -0,0 +1,72 @@
+package org.apache.fulcrum.jce.crypto;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+/**
+ * Helper class to for HEX conversion.
+ *
+ * @author <a href="mailto:painter@apache.org">Jeffery Painter</a>
+ * @author <a href="mailto:siegfried.goeschl@it20one.at">Siegfried Goeschl</a>
+ * @author <a href="mailto:maakus@earthlink.net">Markus Hahn</a>
+ */
+
+public final class HexConverter
+{
+    /**
+     * Converts a byte array to a hex string.
+     *
+     * @param data the byte array
+     * @return the hex string
+     */
+    public static String toString( byte[] data )
+    {
+        return bytesToHexStr(data);
+    }
+
+    /**
+     * Converts a hex string into a byte[]
+     *
+     * @param sHex the hex string
+     * @return the byte[]
+     */
+    public static byte[] toBytes(String sHex) {
+        int len = sHex.length();
+        byte[] data = new byte[len / 2];
+        for (int i = 0; i < len; i += 2) {
+            data[i / 2] = (byte) ((Character.digit(sHex.charAt(i), 16) << 4)
+                                 + Character.digit(sHex.charAt(i+1), 16));
+        }
+        return data;
+    }    
+    
+    /**
+     * Converts a byte array to a hex string.
+     * @param data the byte array
+     * @return the hex string
+     */
+    private static String bytesToHexStr( byte[] data )
+    {
+        StringBuilder sbuf = new StringBuilder();
+        for ( byte b : data )
+        	sbuf.append( String.format("%02x", b ) );
+        return sbuf.toString();
+    }
+
+}
diff --git a/fulcrum-yaafi-crypto-1.0.7/src/java/org/apache/fulcrum/jce/crypto/PasswordFactory.java b/fulcrum-yaafi-crypto-1.0.7/src/java/org/apache/fulcrum/jce/crypto/PasswordFactory.java
new file mode 100644
index 0000000..c96713a
--- /dev/null
+++ b/fulcrum-yaafi-crypto-1.0.7/src/java/org/apache/fulcrum/jce/crypto/PasswordFactory.java
@@ -0,0 +1,181 @@
+package org.apache.fulcrum.jce.crypto;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.UnsupportedEncodingException;
+import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
+
+/**
+ * The implementation supplies a default password in the case that
+ * the programmer don't want to have additional hassles. It is easy to
+ * reengineer the password being used but much better than a hard-coded
+ * password in the application.
+ *
+ * The code uses parts from Markus Hahn's Blowfish library found at
+ * http://blowfishj.sourceforge.net/
+ *
+ * @author <a href="mailto:siegfried.goeschl@it20one.at">Siegfried Goeschl </a>
+ * @author <a href="mailto:maakus@earthlink.net">Markus Hahn</a>
+ */
+
+public class PasswordFactory implements PasswordParameters
+{
+
+    /**
+     * Create a new password
+     * 
+     * @return a default password using "xxxx-xxxx-xxxx-xxxxx"
+     * 
+     * @throws NoSuchAlgorithmException the encryption algorithm is not supported
+     * @throws UnsupportedEncodingException the requested encoding is not supported
+     */
+    public static char[] create()
+        throws NoSuchAlgorithmException, UnsupportedEncodingException
+    {
+        return create(
+            PasswordParameters.DEFAULTPASSWORD,
+            PasswordParameters.SALT,
+            PasswordParameters.COUNT
+            );
+    }
+
+    /**
+     * Create a new password using a seed
+     * 
+     * @param seed the default password supplied by the caller
+     * @return a password using "xxxx-xxxx-xxxx-xxxxx"
+     * 
+     * @throws NoSuchAlgorithmException the encryption algorithm is not supported
+     * @throws UnsupportedEncodingException the requested encoding is not supported
+     */
+    public static char[] create( String seed )
+        throws NoSuchAlgorithmException, UnsupportedEncodingException
+    {
+        return create(
+            seed.toCharArray()
+            );
+    }
+
+    /**
+     * @param seed the default password supplied by the caller
+     * @return a password using "xxxx-xxxx-xxxx-xxxxx"
+     * @throws NoSuchAlgorithmException the encryption algorithm is not supported
+     * @throws UnsupportedEncodingException the requested encoding is not supported
+     */
+    public static final char[] create( char[] seed )
+        throws NoSuchAlgorithmException, UnsupportedEncodingException
+    {
+        return create(
+            seed,
+            PasswordFactory.SALT,
+            PasswordFactory.COUNT
+            );
+    }
+
+    /**
+     * Creates a default password using "xxxx-xxxx-xxxx-xxxxx".
+     *
+     * @param salt the password salt
+     * @param password the default password
+     * @param count number of MessageDigest iterations
+     * @return the default password
+     * @throws NoSuchAlgorithmException the encryption algorithm is not supported
+     * @throws UnsupportedEncodingException the requested encoding is not supported
+     */
+    public static char [] create( char[] password, byte[] salt, int count )
+        throws NoSuchAlgorithmException, UnsupportedEncodingException
+    {
+        char [] result = null;
+        MessageDigest sha1 = MessageDigest.getInstance( "SHA1" );
+        byte [] passwordMask = new String( password ).getBytes( "UTF-8" );
+        byte [] temp = new byte[salt.length + passwordMask.length];
+        byte [] digest = null;
+
+        StringBuilder stringBuffer = new StringBuilder();
+
+        // combine the password with the salt string into a byte[9
+
+        System.arraycopy( passwordMask, 0, temp, 0, passwordMask.length );
+        System.arraycopy( salt, 0, temp, passwordMask.length, salt.length );
+
+        // create a hash over and over to make it a bit random
+
+        digest = temp;
+
+        for (int i = 0; i < count; i++)
+        {
+            sha1.update( digest );
+            digest = sha1.digest();
+        }
+
+        // build a well-formed password string to be usable
+        // by a human
+
+        long long1 = createLong( digest, 0 );
+        long long2 = createLong( digest, 4 );
+        long long3 = createLong( digest, 8 );
+        long long4 = createLong( digest, 12 );
+
+        stringBuffer.append( Long.toHexString( long1 ).substring( 0, 4 ) );
+        stringBuffer.append( '-' );
+        stringBuffer.append( Long.toHexString( long2 ).substring( 0, 4 ) );
+        stringBuffer.append( '-' );
+        stringBuffer.append( Long.toHexString( long3 ).substring( 0, 4 ) );
+        stringBuffer.append( '-' );
+        stringBuffer.append( Long.toHexString( long4 ).substring( 0, 5 ) );
+
+        // copy the password
+        result = new char[stringBuffer.length()];
+
+        for (int i = 0; i < stringBuffer.length(); i++)
+        {
+            result[i] = stringBuffer.charAt( i );
+        }
+
+        // wipe out the StringBuilder
+        for (int i = 0; i < stringBuffer.length(); i++)
+        {
+            stringBuffer.setCharAt( i, ' ' );
+        }
+
+        return result;
+    }
+
+    /**
+     * Gets bytes from an array into a long.
+     *
+     * @param buf where to get the bytes
+     * @param nOfs index from where to read the data
+     * @return the 64bit integer
+     */
+    private static long createLong(byte [] buf, int nOfs)
+    {
+        return
+            ((long)(( buf[nOfs    ]          << 24) |
+                    ((buf[nOfs + 1] & 0x0ff) << 16) |
+                    ((buf[nOfs + 2] & 0x0ff) <<  8) |
+                    ( buf[nOfs + 3] & 0x0ff       )) << 32) |
+            ((long)(( buf[nOfs + 4]          << 24) |
+                    ((buf[nOfs + 5] & 0x0ff) << 16) |
+                    ((buf[nOfs + 6] & 0x0ff) <<  8) |
+                    ( buf[nOfs + 7] & 0x0ff       )) & 0x0ffffffffL);
+    }
+}
diff --git a/fulcrum-yaafi-crypto-1.0.7/src/java/org/apache/fulcrum/jce/crypto/PasswordParameters.java b/fulcrum-yaafi-crypto-1.0.7/src/java/org/apache/fulcrum/jce/crypto/PasswordParameters.java
new file mode 100644
index 0000000..efb5022
--- /dev/null
+++ b/fulcrum-yaafi-crypto-1.0.7/src/java/org/apache/fulcrum/jce/crypto/PasswordParameters.java
@@ -0,0 +1,46 @@
+package org.apache.fulcrum.jce.crypto;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+/**
+ * Parameters for creating a password.
+ *
+ * @author <a href="mailto:siegfried.goeschl@it20one.at">Siegfried Goeschl</a>
+ */
+
+public interface PasswordParameters
+{
+    /** Parameter for the number of SHA1 invocation */
+    int COUNT = 20;
+
+    /** The default password used for creating the internal password */
+    char[] DEFAULTPASSWORD = {
+        (char) 'f', (char) 'u', (char) 'l', (char) 'c',
+        (char) 'r', (char) 'u', (char) 'm', (char) '-',
+        (char) 'y', (char) 'a', (char) 'a', (char) 'f',
+        (char) 'i'
+        };
+
+    /** The password salt */
+    byte[] SALT = {
+        (byte)0xc6, (byte)0x74, (byte)0x81, (byte)0x8a,
+        (byte)0x7b, (byte)0xe8, (byte)0xfe, (byte)0x99
+        };
+}
diff --git a/fulcrum-yaafi-crypto-1.0.7/src/java/org/apache/fulcrum/jce/crypto/SmartDecryptingInputStream.java b/fulcrum-yaafi-crypto-1.0.7/src/java/org/apache/fulcrum/jce/crypto/SmartDecryptingInputStream.java
new file mode 100644
index 0000000..1521134
--- /dev/null
+++ b/fulcrum-yaafi-crypto-1.0.7/src/java/org/apache/fulcrum/jce/crypto/SmartDecryptingInputStream.java
@@ -0,0 +1,381 @@
+package org.apache.fulcrum.jce.crypto;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.security.GeneralSecurityException;
+
+
+/**
+ * An input stream that determine if the originating input stream
+ * was encrypted or not. This magic only works for well-known file
+ * types though.
+ *
+ * @author <a href="mailto:siegfried.goeschl@it20one.at">Siegfried Goeschl</a>
+ */
+public class SmartDecryptingInputStream extends ByteArrayInputStream
+{
+    /** The encodings to be checked for XML */
+    private static final  String[] ENCODINGS = { "ISO-8859-1", "UTF-8", "UTF-16" };
+
+    /**
+     * Constructor
+     *
+     * @param cryptoStreamFactory the CryptoStreamFactory for creating a cipher stream
+     * @param is the input stream to be decrypted
+     * @throws IOException if file not found
+     * @throws GeneralSecurityException if security check fails
+     */
+    public SmartDecryptingInputStream(
+        CryptoStreamFactory cryptoStreamFactory,
+        InputStream is )
+        throws IOException, GeneralSecurityException
+    {
+        this( cryptoStreamFactory, is, null );
+    }
+
+    /**
+     * Constructor
+     *
+     * @param cryptoStreamFactory the CryptoStreamFactory for creating a cipher stream
+     * @param is the input stream to be decrypted
+     * @param password the password for decryption
+     * 
+     * @throws IOException if file not found
+     * @throws GeneralSecurityException if security check fails 
+     */
+    public SmartDecryptingInputStream(
+        CryptoStreamFactory cryptoStreamFactory,
+        InputStream is,
+        char[] password )
+        throws IOException, GeneralSecurityException
+    {
+        super( new byte[0] );
+
+        byte[] content = null;
+        byte[] plain = null;
+
+        // store the data from the input stream
+
+        ByteArrayOutputStream baosCipher = new ByteArrayOutputStream();
+        ByteArrayOutputStream baosPlain = new ByteArrayOutputStream();
+        this.copy( is, baosCipher );
+
+        content = baosCipher.toByteArray();
+        plain = content;
+
+        if( this.isEncrypted(content) == true )
+        {
+            InputStream cis = null;
+            ByteArrayInputStream bais = new ByteArrayInputStream(content);
+
+            if( ( password != null ) && ( password.length > 0 ) )
+            {
+                cis = cryptoStreamFactory.getInputStream( bais, password );
+            }
+            else
+            {
+                cis = cryptoStreamFactory.getInputStream( bais );
+            }
+
+            copy( cis, baosPlain );
+            plain = baosPlain.toByteArray();
+        }
+
+        // initialize the inherited instance
+
+        if( plain != null )
+        {
+            this.buf = plain;
+            this.pos = 0;
+            this.count = buf.length;
+        }
+    }
+
+    /**
+     * Determine if the content is encrypted. We are
+     * using our knowledge about block lenght, check
+     * for XML, ZIP and PDF files and at the end of
+     * the day we are just guessing.
+     *
+     * @param content the data to be examined
+     * @return true if this is an encrypted file
+     * @throws IOException unable to read the content
+     */
+    private boolean isEncrypted( byte[] content )
+        throws IOException
+    {
+        if( content.length == 0 )
+        {
+            return false;
+        }
+        else if( ( content.length % 8 ) != 0 )
+        {
+            // the block length is 8 bytes - if the length
+            // is not a multipe of 8 then the content was
+            // definitely not encrypted
+            return false;
+        }
+        else if( this.isPDF(content) )
+        {
+            return false;
+        }
+        else if( this.isXML(content) )
+        {
+            return false;
+        }
+        else if( this.isZip(content) )
+        {
+            return false;
+        }
+        else if( this.isUtf16Text(content) )
+        {
+            return false;
+        }
+        else
+        {
+            for( int i=0; i<content.length; i++ )
+            {
+                // do we have control characters in it?
+
+                char ch = (char) content[i];
+
+                if( this.isAsciiControl(ch) )
+                {
+                    return true;
+                }
+            }
+
+            return false;
+        }
+    }
+
+    /**
+     * Pumps the input stream to the output stream.
+     *
+     * @param is the source input stream
+     * @param os the target output stream
+     * @return the number of bytes copied
+     * @throws IOException the copying failed
+     */
+    public long copy( InputStream is, OutputStream os )
+        throws IOException
+    {
+        byte[] buf = new byte[1024];
+        int n = 0;
+        long total = 0;
+
+        while ((n = is.read(buf)) > 0)
+        {
+            os.write(buf, 0, n);
+            total += n;
+        }
+
+        is.close();
+        os.flush();
+        os.close();
+
+        return total;
+    }
+
+    /**
+     * Count the number of occurences for the given value
+     * @param content the content to examine
+     * @param value the value to look fo
+     * @return the number of matches
+     */
+    private int count( byte[] content, byte value )
+    {
+        int result = 0;
+
+        for( int i=0; i<content.length; i++ )
+        {
+            if( content[i] == value )
+            {
+                result++;
+            }
+        }
+
+        return result;
+    }
+
+    /**
+     * Detect the BOM of an UTF-16 (mandatory) or UTF-8 document (optional)
+     * @param content the content to examine
+     * @return true if the content contains a BOM
+     */
+    private boolean hasByteOrderMark( byte[] content )
+    {
+        if( ( (content[0] == 0xFF) && (content[1] == 0xFF) ) ||
+            ( (content[0] == 0xFF) && (content[1] == 0xFF) ) )
+        {
+            return true;
+        }
+        else
+        {
+            return false;
+        }
+    }
+
+    /**
+     * Check this is a UTF-16 text document.
+     *
+     * @param content the content to examine
+     * @return true if it is a XML document
+     * @throws IOException unable to read the content
+     */
+    private boolean isUtf16Text( byte[] content ) throws IOException
+    {
+        if( content.length < 2 )
+        {
+            return false;
+        }
+
+        if( this.hasByteOrderMark( content ) )
+        {
+            // we should have plenty of 0x00 in a text file
+
+            int estimate = (content.length-2)/3;
+
+            if( this.count(content,(byte)0) > estimate )
+            {
+                return true;
+            }
+        }
+
+        return false;
+    }
+
+    /**
+     * Check various encondings to determine if "<?xml"
+     * and "?>" appears in the data.
+     *
+     * @param content the content to examine
+     * @return true if it is a XML document
+     * @throws IOException unable to read the content
+     */
+    private boolean isXML( byte[] content ) throws IOException
+    {
+        if( content.length < 3 )
+        {
+            return false;
+        }
+
+        for( int i=0; i<ENCODINGS.length; i++ )
+        {
+            String currEncoding = ENCODINGS[i];
+
+            String temp = new String( content, currEncoding );
+
+            if( ( temp.indexOf("<?xml") >= 0 ) && ( temp.indexOf("?>") > 0 ) )
+            {
+                return true;
+            }
+        }
+
+        return false;
+    }
+
+    /**
+     * Check if this is a ZIP document
+     *
+     * @param content the content to examine
+     * @return true if it is a PDF document
+     */
+
+    private boolean isZip( byte[] content )
+    {
+        if( content.length < 64 )
+        {
+            return false;
+        }
+        else
+        {
+            // A ZIP starts with Hex: "50 4B 03 04"
+
+            if( ( content[0] == (byte) 0x50 ) &&
+                ( content[1] == (byte) 0x4B ) &&
+                ( content[2] == (byte) 0x03 ) &&
+                ( content[3] == (byte) 0x04 )  )
+            {
+                return true;
+            }
+            else
+            {
+                return false;
+            }
+        }
+    }
+
+    /**
+     * Check if this is a PDF document
+     *
+     * @param content the content to examine
+     * @return true if it is a PDF document
+     * @throws IOException unable to read the content
+     */
+    private boolean isPDF(byte[] content) throws IOException
+    {
+        if( content.length < 64 )
+        {
+            return false;
+        }
+        else
+        {
+            // A PDF starts with HEX "25 50 44 46 2D 31 2E"
+
+            if( ( content[0] == (byte) 0x25 ) &&
+                ( content[1] == (byte) 0x50 ) &&
+                ( content[2] == (byte) 0x44 ) &&
+                ( content[3] == (byte) 0x46 ) &&
+                ( content[4] == (byte) 0x2D ) &&
+                ( content[5] == (byte) 0x31 ) &&
+                ( content[6] == (byte) 0x2E )  )
+            {
+                return true;
+            }
+            else
+            {
+                return false;
+            }
+        }
+    }
+
+    /**
+     * Is this an ASCII control character?
+     * @param ch the charcter
+     * @return true is this in an ASCII character
+     */
+    private boolean isAsciiControl(char ch)
+    {
+        if( ( ch >= 0x0000 ) && ( ch <= 0x001F) )
+        {
+            return true;
+        }
+        else
+        {
+            return true;
+        }
+    }
+}
diff --git a/fulcrum-yaafi-crypto-1.0.7/src/java/org/apache/fulcrum/jce/crypto/StreamUtil.java b/fulcrum-yaafi-crypto-1.0.7/src/java/org/apache/fulcrum/jce/crypto/StreamUtil.java
new file mode 100644
index 0000000..fccd6d9
--- /dev/null
+++ b/fulcrum-yaafi-crypto-1.0.7/src/java/org/apache/fulcrum/jce/crypto/StreamUtil.java
@@ -0,0 +1,186 @@
+package org.apache.fulcrum.jce.crypto;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+
+/**
+ * Helper class to provde generic stream functions.
+ *
+ * @author <a href="mailto:siegfried.goeschl@it20one.at">Siegfried Goeschl </a>
+ */
+
+public final class StreamUtil
+{
+    /** the size of the internal buffer to copy streams */
+    private static final int BUFFER_SIZE = 1024;
+
+    /**
+     * Create an input stream supporting the following types
+     *
+     * <ul>
+     *  <li>String (using the UTF-8 encoded content)</li>
+     *  <li>File</li>
+     *  <li>byte[]</li>
+     *  <li>char[]</li>
+     *  <li>ByteArrayOutputStream</li>
+     *  <li>InputStream</li>
+     * </ul>
+     *
+     * @param source the source object
+     * @return the created input stream
+     * @throws java.io.IOException creating the input stream failed
+     */
+    public static InputStream createInputStream( Object source )
+        throws IOException
+    {
+        InputStream is;
+
+        // create an InputStream
+
+        if( source instanceof String )
+        {
+            byte[] content = ((String) source).getBytes("utf-8");
+            is = new ByteArrayInputStream( content );
+        }
+        else if( source instanceof File )
+        {
+            is = new FileInputStream( (File) source );
+        }
+        else if( source instanceof byte[] )
+        {
+            is = new ByteArrayInputStream( (byte[]) source );
+        }
+        else if( source instanceof char[] )
+        {
+            byte[] content = new String((char[])source).getBytes("utf-8");
+            is = new ByteArrayInputStream( content );
+        }
+        else if( source instanceof ByteArrayOutputStream )
+        {
+            byte[] content = ((ByteArrayOutputStream) source).toByteArray();
+            is = new ByteArrayInputStream( content );
+        }
+        else if( source instanceof InputStream )
+        {
+            is = (InputStream) source;
+        }
+        else
+        {
+            throw new IllegalArgumentException("Don't know hot to handle " + source.getClass().getName());
+        }
+
+        return is;
+    }
+
+    /**
+     * Create an output stream supporting the following types
+     *
+     * <ul>
+     *  <li>File</li>
+     *  <li>String</li>
+     *  <li>OutputStream</li>
+     * </ul>
+     *
+     * @param target the target object
+     * @return the output stream
+     * @throws java.io.IOException creating the output stream failed
+     */
+    public static OutputStream createOutputStream( Object target )
+        throws IOException
+    {
+        OutputStream os;
+
+        if( target instanceof File )
+        {
+            File currFile = (File) target;
+            createParentFile(currFile);
+            os = new FileOutputStream(currFile);
+        }
+        else if( target instanceof String )
+        {
+            File currFile = new File((String) target);
+            createParentFile(currFile);
+            os = new FileOutputStream(currFile);
+        }
+        else if( target instanceof OutputStream )
+        {
+            os = (OutputStream) target;
+        }
+        else
+        {
+            throw new IllegalArgumentException("Don't know hot to handle " + target.getClass().getName());
+        }
+
+        return os;
+    }
+
+    /**
+     * Pumps the input stream to the output stream.
+     *
+     * @param is the source input stream
+     * @param os the target output stream
+     * @return the number of bytes copied
+     * @throws java.io.IOException the copying failed
+     */
+    public static long copy( InputStream is, OutputStream os )
+        throws IOException
+    {
+        byte[] buf = new byte[BUFFER_SIZE];
+        int n = 0;
+        long total = 0;
+
+        while ((n = is.read(buf)) > 0)
+        {
+            os.write(buf, 0, n);
+            total += n;
+        }
+
+        is.close();
+
+        os.flush();
+        os.close();
+
+        return total;
+    }
+
+    /**
+     * Ensure that the parent directories exists before writing to
+     * the file.
+     * 
+     * @param currFile the file to write to
+     */
+    private static void createParentFile(File currFile)
+    {
+        File parentFile = currFile.getParentFile();
+        
+        if((parentFile != null) && !parentFile.exists())
+        {
+            parentFile.mkdirs();
+        }
+    }
+}
\ No newline at end of file
diff --git a/fulcrum-yaafi-crypto-1.0.7/src/site/resources/announcements/announcement-1.0.6.txt b/fulcrum-yaafi-crypto-1.0.7/src/site/resources/announcements/announcement-1.0.6.txt
new file mode 100644
index 0000000..271f730
--- /dev/null
+++ b/fulcrum-yaafi-crypto-1.0.7/src/site/resources/announcements/announcement-1.0.6.txt
@@ -0,0 +1 @@
+The fulcrum-yaafi-crypto-team is pleased to announce the fulcrum-yaafi-crypto-1.0.6.jar release!

Fulcrum YAAFI Crypto Library

Changes in this version include:

New features:
o Moving the code out of YAAFI and make a standalone library. 


Changes:
o Using the official fulcrum-parent-1 pom. 


Have fun!
-fulcrum-yaafi-crypto-team
\ No newline at end of file
diff --git a/fulcrum-yaafi-crypto-1.0.7/src/site/site.xml b/fulcrum-yaafi-crypto-1.0.7/src/site/site.xml
new file mode 100644
index 0000000..da3532b
--- /dev/null
+++ b/fulcrum-yaafi-crypto-1.0.7/src/site/site.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements.  See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership.  The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License.  You may obtain a copy of the License at
+
+   http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied.  See the License for the
+ specific language governing permissions and limitations
+ under the License.
+-->
+<project xmlns="http://maven.apache.org/DECORATION/1.4.0" 
+  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://maven.apache.org/DECORATION/1.4.0 http://maven.apache.org/xsd/decoration-1.4.0.xsd"
+  name="Fulcrum YAAFI Crypto Library">
+  <body>
+    <menu name="Overview">
+      <item name="Overview"            href="/index.html"/>
+      <item name="Downloads"           href="/downloads.html"/>
+    </menu>  
+    <menu ref="reports"></menu>
+  </body>
+</project>
diff --git a/fulcrum-yaafi-crypto-1.0.7/src/test/data/empty.txt b/fulcrum-yaafi-crypto-1.0.7/src/test/data/empty.txt
new file mode 100644
index 0000000..e69de29
diff --git a/fulcrum-yaafi-crypto-1.0.7/src/test/data/plain-iso-8859-1.xml b/fulcrum-yaafi-crypto-1.0.7/src/test/data/plain-iso-8859-1.xml
new file mode 100644
index 0000000..2d637b1
--- /dev/null
+++ b/fulcrum-yaafi-crypto-1.0.7/src/test/data/plain-iso-8859-1.xml
@@ -0,0 +1,56 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements.  See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership.  The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License.  You may obtain a copy of the License at
+
+   http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied.  See the License for the
+ specific language governing permissions and limitations
+ under the License.
+-->
+
+<role-list>
+  <!-- Use minimal role entry -->
+  <role
+    name="org.apache.fulcrum.yaafi.service.servicemanager.ServiceManagerService"
+    default-class="org.apache.fulcrum.yaafi.service.servicemanager.ServiceManagerServiceImpl"
+  />
+  <!-- For the rest of the services use a full-blown role entry -->
+  <role
+    name="org.apache.fulcrum.yaafi.service.systemproperty.SystemPropertyService"
+    shorthand="SystemPropertyService"
+    default-class="org.apache.fulcrum.yaafi.service.systemproperty.SystemPropertyServiceImpl"
+    early-init="true"
+    description="�������"
+  />
+  <!--
+    This ReconfigurationService is instantiated during the first access. Until
+    then it is doing nothing.
+  -->
+  <role
+    name="org.apache.fulcrum.yaafi.service.reconfiguration.ReconfigurationService"
+    shorthand="ReconfigurationService"
+    default-class="org.apache.fulcrum.yaafi.service.reconfiguration.ReconfigurationServiceImpl"
+    early-init="false"
+    component-type="avalon"
+    component-flavour="yaafi"
+    description="Monitors the componentConfiguration.xml to reconfigure YAAFI"
+  />
+  <role
+    name="org.apache.fulcrum.yaafi.TestComponent"
+    shorthand="test"
+    default-class="org.apache.fulcrum.yaafi.TestComponentImpl"
+    early-init="true"
+    component-type="merlin"
+    description="A simple test component"
+  />
+</role-list>
diff --git a/fulcrum-yaafi-crypto-1.0.7/src/test/data/plain-utf16.xml b/fulcrum-yaafi-crypto-1.0.7/src/test/data/plain-utf16.xml
new file mode 100644
index 0000000..71fe210
Binary files /dev/null and b/fulcrum-yaafi-crypto-1.0.7/src/test/data/plain-utf16.xml differ
diff --git a/fulcrum-yaafi-crypto-1.0.7/src/test/data/plain-utf8.xml b/fulcrum-yaafi-crypto-1.0.7/src/test/data/plain-utf8.xml
new file mode 100644
index 0000000..14dd45c
--- /dev/null
+++ b/fulcrum-yaafi-crypto-1.0.7/src/test/data/plain-utf8.xml
@@ -0,0 +1,56 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements.  See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership.  The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License.  You may obtain a copy of the License at
+
+   http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied.  See the License for the
+ specific language governing permissions and limitations
+ under the License.
+-->
+
+<role-list>
+  <!-- Use minimal role entry -->
+  <role
+    name="org.apache.fulcrum.yaafi.service.servicemanager.ServiceManagerService"
+    default-class="org.apache.fulcrum.yaafi.service.servicemanager.ServiceManagerServiceImpl"
+  />
+  <!-- For the rest of the services use a full-blown role entry -->
+  <role
+    name="org.apache.fulcrum.yaafi.service.systemproperty.SystemPropertyService"
+    shorthand="SystemPropertyService"
+    default-class="org.apache.fulcrum.yaafi.service.systemproperty.SystemPropertyServiceImpl"
+    early-init="true"
+    description="ÜÖÄüöäß"
+  />
+  <!--
+    This ReconfigurationService is instantiated during the first access. Until
+    then it is doing nothing.
+  -->
+  <role
+    name="org.apache.fulcrum.yaafi.service.reconfiguration.ReconfigurationService"
+    shorthand="ReconfigurationService"
+    default-class="org.apache.fulcrum.yaafi.service.reconfiguration.ReconfigurationServiceImpl"
+    early-init="false"
+    component-type="avalon"
+    component-flavour="yaafi"
+    description="Monitors the componentConfiguration.xml to reconfigure YAAFI"
+  />
+  <role
+    name="org.apache.fulcrum.yaafi.TestComponent"
+    shorthand="test"
+    default-class="org.apache.fulcrum.yaafi.TestComponentImpl"
+    early-init="true"
+    component-type="merlin"
+    description="A simple test component"
+  />
+</role-list>
diff --git a/fulcrum-yaafi-crypto-1.0.7/src/test/data/plain.groovy b/fulcrum-yaafi-crypto-1.0.7/src/test/data/plain.groovy
new file mode 100644
index 0000000..8f7243e
--- /dev/null
+++ b/fulcrum-yaafi-crypto-1.0.7/src/test/data/plain.groovy
@@ -0,0 +1,44 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+import java.io.File;
+
+def getVerse() {
+    lines= []
+    lines+= ( "Karma " * 5 ) + "Chameleon,"
+    lines+= (["you come and go"] * 2).join(", ")+"."
+    lines+= "Loving would be easy if your"+
+              " colours were like my dream"
+    lines+= (["red gold and green"]*2).join(", ")+"."
+
+    verse= lines.collect { it + "\n" }
+    return verse
+}
+
+println "Writing out to file.\n"
+myFile= new File("temp/karma.txt")
+myFile.write("Karma Chameleon\n\n")
+getVerse().each { myFile.append(it) }
+
+println "\nWith line numbering ...\n"
+count=1
+myFile.eachLine { println count++ + ": " + it }
+
+println "\nAs a single string ...\n"
+println myFile.readLines().join(" | ")
+myFile.delete();
diff --git a/fulcrum-yaafi-crypto-1.0.7/src/test/data/plain.pdf b/fulcrum-yaafi-crypto-1.0.7/src/test/data/plain.pdf
new file mode 100644
index 0000000..ba2cdb4
--- /dev/null
+++ b/fulcrum-yaafi-crypto-1.0.7/src/test/data/plain.pdf
@@ -0,0 +1,716 @@
+%PDF-1.3
+%����
+4 0 obj
+<< /Type /Info
+/Producer (FOP 0.20.5) >>
+endobj
+5 0 obj
+<< /Length 340 /Filter [ /ASCII85Decode /FlateDecode ]
+ >>
+stream
+Gb!$A0i,\@&;>?.MAt:na8+`Ep0'a.QpC4s(dd:_!@8=)/`PYt[t-@>p=dDUet)KIpMTB:eOG.$,]L/a<2s&&;dj&a,Z),d$:4ob1`?J!KuX@'hH@]/\3"]j`1*F@c;L?:(361t!b#'%U;#QZ((XlFPij/jU[f)'bSE2K.Q1rc*sFS*;r@E;h1pDWq5b';lTb78\qH$MM8(V8a@$1dWIIbP4//sIU!,RB:M1a'ZndDn1[[!&F65TY(j0B'&,hEiL5GE2YBI&:L2pu(DM4PCs(CiPi9Klc5IH2omB/qOD9K%C7%%krZ:I'l+?c."n]tWFL<o*1`B$Ha"aJOqDZ~>
+endstream
+endobj
+6 0 obj
+<< /Type /Page
+/Parent 1 0 R
+/MediaBox [ 0 0 594 842 ]
+/Resources 3 0 R
+/Contents 5 0 R
+>>
+endobj
+7 0 obj
+<< /Length 21 /Filter [ /ASCII85Decode /FlateDecode ]
+ >>
+stream
+Garg^iGoCd!WWA\!CQ~>
+endstream
+endobj
+8 0 obj
+<< /Type /Page
+/Parent 1 0 R
+/MediaBox [ 0 0 594 842 ]
+/Resources 3 0 R
+/Contents 7 0 R
+>>
+endobj
+9 0 obj
+<< /Length 997 /Filter [ /ASCII85Decode /FlateDecode ]
+ >>
+stream
+Gb"/j95iNL&:j6IMS1l-FLpq]0b;^.,,#?E022tARL#nF(!oAEpK`@[]>2GRTlNO*0)<T44pLfr]Cqh.SIZNg0Fa7WismC0*CcuW1SQ9g@Y=p(36A&YlVTS<r\Hbcn%#\er2:TRr]Vij7:%P-a5e2]55@)S@D$=g\=q(5[*1N9.p"=?l[&dkEM->Gd@)!l:;d-BQ=sV-bOfO!Cn2t4,m\Ouooi`pd!G9]LOAeLaWLP[8*POa7C8qb\>sq/]$K2]_RSpjUo4B>^(\Q&G82L@o)"[f"S8<X84Z:TK6D@7Qj#)6Q5S;c96jKWi0)\5j[kMfEEg06FX^gB-.=QKoo^IA+WW>7V&5)G2bK2?E(\YY'M0a.EP9IR+$GULl[tE:W<)1(SCW#2OH>R\%](0`C.TZkBdcfqM5J`$bH;krG7![GCdhYFUZ&9k/gb.lp8$2GKo$IIY8\)edVJJUW!V/</S,Y&b;S52\)_u2<YThKO31oo\c [...]
+endstream
+endobj
+10 0 obj
+<< /Type /Page
+/Parent 1 0 R
+/MediaBox [ 0 0 594 842 ]
+/Resources 3 0 R
+/Contents 9 0 R
+/Annots 11 0 R
+>>
+endobj
+11 0 obj
+[
+12 0 R
+14 0 R
+16 0 R
+18 0 R
+20 0 R
+22 0 R
+24 0 R
+26 0 R
+28 0 R
+30 0 R
+32 0 R
+]
+endobj
+12 0 obj
+<< /Type /Annot
+/Subtype /Link
+/Rect [ 68.4 667.35 88.986 657.85 ]
+/C [ 0 0 0 ]
+/Border [ 0 0 0 ]
+/A 13 0 R
+/H /I
+>>
+endobj
+14 0 obj
+<< /Type /Annot
+/Subtype /Link
+/Rect [ 68.4 649.063 107.986 639.563 ]
+/C [ 0 0 0 ]
+/Border [ 0 0 0 ]
+/A 15 0 R
+/H /I
+>>
+endobj
+16 0 obj
+<< /Type /Annot
+/Subtype /Link
+/Rect [ 68.4 630.776 105.355 621.276 ]
+/C [ 0 0 0 ]
+/Border [ 0 0 0 ]
+/A 17 0 R
+/H /I
+>>
+endobj
+18 0 obj
+<< /Type /Annot
+/Subtype /Link
+/Rect [ 97.2 611.489 144.196 601.989 ]
+/C [ 0 0 0 ]
+/Border [ 0 0 0 ]
+/A 19 0 R
+/H /I
+>>
+endobj
+20 0 obj
+<< /Type /Annot
+/Subtype /Link
+/Rect [ 97.2 592.202 163.728 582.702 ]
+/C [ 0 0 0 ]
+/Border [ 0 0 0 ]
+/A 21 0 R
+/H /I
+>>
+endobj
+22 0 obj
+<< /Type /Annot
+/Subtype /Link
+/Rect [ 97.2 572.915 154.731 563.415 ]
+/C [ 0 0 0 ]
+/Border [ 0 0 0 ]
+/A 23 0 R
+/H /I
+>>
+endobj
+24 0 obj
+<< /Type /Annot
+/Subtype /Link
+/Rect [ 68.4 554.628 104.822 545.128 ]
+/C [ 0 0 0 ]
+/Border [ 0 0 0 ]
+/A 25 0 R
+/H /I
+>>
+endobj
+26 0 obj
+<< /Type /Annot
+/Subtype /Link
+/Rect [ 97.2 535.341 198.03 525.841 ]
+/C [ 0 0 0 ]
+/Border [ 0 0 0 ]
+/A 27 0 R
+/H /I
+>>
+endobj
+28 0 obj
+<< /Type /Annot
+/Subtype /Link
+/Rect [ 97.2 516.054 196.443 506.554 ]
+/C [ 0 0 0 ]
+/Border [ 0 0 0 ]
+/A 29 0 R
+/H /I
+>>
+endobj
+30 0 obj
+<< /Type /Annot
+/Subtype /Link
+/Rect [ 68.4 497.767 101.127 488.267 ]
+/C [ 0 0 0 ]
+/Border [ 0 0 0 ]
+/A 31 0 R
+/H /I
+>>
+endobj
+32 0 obj
+<< /Type /Annot
+/Subtype /Link
+/Rect [ 68.4 479.48 96.614 469.98 ]
+/C [ 0 0 0 ]
+/Border [ 0 0 0 ]
+/A 33 0 R
+/H /I
+>>
+endobj
+34 0 obj
+<< /Length 223 /Filter [ /ASCII85Decode /FlateDecode ]
+ >>
+stream
+GarW30b8k$%#+HQ'cgkip<"DrNM)&9#UIj.Lm*[M_>h9-_S@J+;d]+Pqc\m2<>mV<OJa:57lH-hdQl8rY_34NB/H2GhJh4?;)TSKD5K1fe%hi]U3#5"&mFN5\:^<$nK.';5IETfXn1!MS^HA9Nu@i*@N8J+"cX>eImW1W]q4$^>KoP_JuXO(CLcd`fg\<U1sp`NO/MFgCFSo7EXdd-0SoQ*\m.Ru~>
+endstream
+endobj
+35 0 obj
+<< /Type /Page
+/Parent 1 0 R
+/MediaBox [ 0 0 594 842 ]
+/Resources 3 0 R
+/Contents 34 0 R
+>>
+endobj
+36 0 obj
+<< /Length 1077 /Filter [ /ASCII85Decode /FlateDecode ]
+ >>
+stream
+Gb!#[95bIu&AI=/pm<+;...@UD>ll-dV%Rr-P)fF$,p,i.6#7_R:$Z"X'$T/%NFKLCNQDf%<FYjnb?K^/@nOHO[#"V@?6a)BgCYa58rr9ZdiT!?$;JE:$$m36dIpK9O[!NOW5Q:#aIp+D+="jF"#R93=VUgF]8-O6E<E3OqYY/;*9>Zt?m4,STQVM^`?#.&1m[p.bf=$dpfsS<T5gntl"B8.:9)s2UJ0\k'Th_C&0*Qsoa^2#8UWJl$"<%-jn*8'Y+q;;i\X"FoY6_B&Yb4Qm4'-,'p;sK?aV[X)K<V4\AH#qEq<Xaehf]5_e(?p@iqRP9*k-Eg@<5HuG2=h_8hc,%8;T.eE"^TdlOBP0kk69I.,l0-O_f615snNq.e++?J^DJ8$=UnB"d).K??iam!ArpbSF3/eUI [...]
+endstream
+endobj
+37 0 obj
+<< /Type /Page
+/Parent 1 0 R
+/MediaBox [ 0 0 594 842 ]
+/Resources 3 0 R
+/Contents 36 0 R
+>>
+endobj
+38 0 obj
+<< /Length 1087 /Filter [ /ASCII85Decode /FlateDecode ]
+ >>
+stream
+Gb!#[95bIu&AI=/pt-X&G%T>Z#o+2;6;U+IG1?ps%XDl`#;1PLhoB&aGQ$0IKQ82tQ,K*R2rBSGYM7`g943J^eo#+8Y?8EF+/gZ_fp<S\b.`G#k$S<j[G_<!CVR,M-c#8:I:hknCS>>_SZXg^Bo.^+<_%33k]O&#]'iFUh60*V(a(7C:;&\4YBAmUq>^2H+i#*08>Wj,3S]*ir]Fb)B_O!"o(Z_mrpf"-Eq*mt7PFg\0sr>R7k2C!Wi?uLKO+0(=q[ukDHF@h]6(>olrr,NErQ8*]@M\c`idUi/P.U*$)jASQN6M5!(kW,6_-b,?4$hgPG;/#N@&$+'4gTF^T2F:7@J[2F"P@m^7p.;%h"iE[<%U"cm?H8,\%)g(W)>uOnjK\jeJ#3I+oZDm>_Wt.#orNmr=m7)HK@n@cQhW70t=25>^?13ZJjuJG"eoFO>4V\LmB0E?s;PB$cX(M+W.(bs9[t8IAnF70NdI\l!]b0ga6SQZ [...]
+endstream
+endobj
+39 0 obj
+<< /Type /Page
+/Parent 1 0 R
+/MediaBox [ 0 0 594 842 ]
+/Resources 3 0 R
+/Contents 38 0 R
+>>
+endobj
+40 0 obj
+<< /Length 873 /Filter [ /ASCII85Decode /FlateDecode ]
+ >>
+stream
+Gb!#Z95>J$&AJ$Cka3?aC8@+qJeDbG:$Z7,LmLGBHEc#5-I?(>..lCuDsLi$2<geE,.k0;UMml7Olh),G]OBd@?11u5qkV'T`<E*E/F8r5XbVQU(W+<W+?;dW_i^'ID5j-Y0dd0J(>YX!b#oQMo:Jdgh7X`3Da@pHCi.8cgZ"7Q@OL3bA(*k:FTn]EVB2-qkY:Z'-)g/@MrWWO"\8?#L1$neRF,jOhq]\o9K43!`RGF>=(lU(Y;=8C1l=4:J3tlM-bg@48l=S@48P)jM,N%[aBWQCJL-j,;ko/]o<!==dsVsRGY.:R7YEjNIq/Do9RBH5AqQc+\>WKF207t";0rPYm=H3[[TD%hq$OXIMkiOUlWnX%fF,;nTu-(kAk0M,*i8M$Aes@eMZ@0J-I<tJmS.!l3gJTa$9h6hep$qcdI<Pac:iE"TZ\a_dP`Z>b;E2=2([ClS`M>lXRF1&E-a4G!;QcTB1S'r";3()2Pp>C-\Xp\K [...]
+endstream
+endobj
+41 0 obj
+<< /Type /Page
+/Parent 1 0 R
+/MediaBox [ 0 0 594 842 ]
+/Resources 3 0 R
+/Contents 40 0 R
+/Annots 42 0 R
+>>
+endobj
+42 0 obj
+[
+43 0 R
+45 0 R
+47 0 R
+]
+endobj
+43 0 obj
+<< /Type /Annot
+/Subtype /Link
+/Rect [ 66.9 650.686 114.75 639.686 ]
+/C [ 0 0 0 ]
+/Border [ 0 0 0 ]
+/A 44 0 R
+/H /I
+>>
+endobj
+45 0 obj
+<< /Type /Annot
+/Subtype /Link
+/Rect [ 66.9 632.922 132.361 621.922 ]
+/C [ 0 0 0 ]
+/Border [ 0 0 0 ]
+/A 46 0 R
+/H /I
+>>
+endobj
+47 0 obj
+<< /Type /Annot
+/Subtype /Link
+/Rect [ 66.9 615.158 141.414 604.158 ]
+/C [ 0 0 0 ]
+/Border [ 0 0 0 ]
+/A 48 0 R
+/H /I
+>>
+endobj
+49 0 obj
+<< /Length 2056 /Filter [ /ASCII85Decode /FlateDecode ]
+ >>
+stream
+Gb"/)>Ar7S'Roe[d%g1DQ5B(c@OTT]gLVd</2=SgV@Tt#VoB]<Q0kF$Y9->5&h-\`>]db&ide7%Ob`,rST>LY=\N/77o9>$Zrg$FJC,Q>?^O21U:U_hT__"fel+Qf,QS3HU;_QQH&;S&kT]j9/UgVT8;*AeXb\t6-j6g/,lgBDgi^$LdUJ[ef"5e4(I\Va]q(?[$5`jhifXB<s*\-(i#XI(/qBm2#\no[#aLnXNKaH[Q2V/E0NNh+_-TQsQthha=iAf`WkL:^/_.qbC\(c_qb'*8ma<n)l-2b[WmKp2C3`CiSD^$1=k\/-)@;J)#kFKgb3UCGZBPQWi43%ZV<'=,,I_dp1YIc,Hm94)"J[?'['Ydnm*I:ka*<HM)Hd7ojXmkA3i]<@*HVNr&q(*9C$GRuZj!*FM&9.Y8Ppc6f&TrW8ocn21bC7O=fH,1'4L@1hcSWI)*@sMpD1F)#]!+D^fBF-(g1-ImLcp3$/Kf>,d(H*>H [...]
+endstream
+endobj
+50 0 obj
+<< /Type /Page
+/Parent 1 0 R
+/MediaBox [ 0 0 594 842 ]
+/Resources 3 0 R
+/Contents 49 0 R
+>>
+endobj
+51 0 obj
+<< /Length 1812 /Filter [ /ASCII85Decode /FlateDecode ]
+ >>
+stream
+GauHL9lo&I&A@C2i+O3aie%6QR8.@a6qQ3+S^uBa''DMXPg-2A8l9TV?XEd9#XEncWpMV\NJSqfm(RoF(>t\8jG3IDA.X=F@Y3[5C4a7M"9TqKA&&Ao5tVcW0Fh\FnG2@P=Ol$]'i$R%@?rZf2>b*fQAf5&>MdoBWbo1MZWUXf04=MFA3-4X.45$Jq><\*3sQ21"Je#2N9"@M=@+1Se%r<m#VtlN*[\WrhFJ_C8:)G,`t3l*qc.K6gWd<9G;n:DrFXMMNtS%?q,.X(*kJd_57&8p=XqupM=CCF\kQ'?rDc__2TpO3=LLZmCe)g@Q#gm#Zuso9g@*V"=kN%8cE-"`ma;M2SnET:.3oes>qWS?AQ'=,9S4Qc7C._l4F:shG2utJgWe>^?I,`bZ"`Tu/?1p@MKXHmP:VIq[b(mFb%B=K:.R$tMno5gZ>0+aa4%H&oW!1_m[V7%Yj-(0<*aq-'+>c/Qo++2(l-c;h7g#M.6_a6f` [...]
+endstream
+endobj
+52 0 obj
+<< /Type /Page
+/Parent 1 0 R
+/MediaBox [ 0 0 594 842 ]
+/Resources 3 0 R
+/Contents 51 0 R
+>>
+endobj
+53 0 obj
+<< /Length 858 /Filter [ /ASCII85Decode /FlateDecode ]
+ >>
+stream
+Gb!#Zhf%4&&:WfGn0:'FZd6C_WD_?rNi=K@A:#2@#UEA?K2+-"s4OXjiZs>Q<R[ltK7!@g]C50(InBne*[rjHTO^2.R%Ru$-W!3EoK&Y$fKY8//HJbn?ipTZ>P*>70uG\35>^pi@PC3Ho<oc!5=%!4?5a1YhJ8F\hKJ50lZ&QrhRr5*Iu5WWs46TZ"TU@'4UV2g5'810N"T$&XNMG%X:j:Tjq+L7&>e5DFqbQV&H3mtK\I[:OLOEXKM.e=?+C\:W10,sV"VEkWEV0%AAKV%6i2"E(SNgLA[IWPIo5TW.?Lic^1q\f3+OCPWZtL!'nbONpoVGQC`m\>nX.Cd#4rPO=p+@X'oH$9$>bgb'SBCFL^7m.aeacElkXSAJ7^u9.KXk[6(MgW""b=r$?g(K_9L.u,/>lK[$q>brNk.Pe%5ZlTP(F0Pd;MFJYcE9WGNADWA1Le01iZs$\qg50L@85(%[tS59>:8].@7ebjiN!?ORaGMd [...]
+endstream
+endobj
+54 0 obj
+<< /Type /Page
+/Parent 1 0 R
+/MediaBox [ 0 0 594 842 ]
+/Resources 3 0 R
+/Contents 53 0 R
+>>
+endobj
+55 0 obj
+<< /Length 926 /Filter [ /ASCII85Decode /FlateDecode ]
+ >>
+stream
+Gb!#Z9lJc?%)(h*ka3Ek8^sYhTtn+6>DBQe)Io+F#<Qp[!)6BK3UPEoOt#"gSL+M`Qik5a,Ebi`O-2]iUCT;RA5n\=4^sY<I-D\[R'PfIL_Jp"S:EO!0d<A1A0g&qT4:V"'c5pIahPG)JoL+j?'(AE@T5BA9,369lag9f[bK&UZ[6G73T5M&^!(U%!%P(O,LHJZC9mn1=O>&c)s8orJg-`:cDdSe'ThsJN%sR7j_fK8/j];r3@bAR@>lkqZZK!'\$t&el0YQcH\ISn@]A'ghU=u+53`KM/\AQ':-Tq_ju/'2LG3eVnl7gsbeYNU/l&P\6Q,LIUP!1ichVVfbVs&_RLq,3"]l!U)gl$F23Nn`=bYi(*?<ICN<M#'dNVp$*=@"WKBYWtWVCEn+^4P;)"'pe3&XgPR@Yk-XVjn&1BcAF39,/[m5bpf]m>r,/g-!iPr;S[;(I*E-sdBPq,l&C@J@DO0.p!,?TBB>Fb=S^Ai2/"P- [...]
+endstream
+endobj
+56 0 obj
+<< /Type /Page
+/Parent 1 0 R
+/MediaBox [ 0 0 594 842 ]
+/Resources 3 0 R
+/Contents 55 0 R
+>>
+endobj
+57 0 obj
+<< /Length 837 /Filter [ /ASCII85Decode /FlateDecode ]
+ >>
+stream
+Gb"/%95iQ=%)2U?kh$rV8[A!jL&u(YG1jHECQ&9]gOnN7=b,Tga6h6'5K]:/a[t)*G=Vd%(<)?1BThL\)SNbY87R\.=[Xr0BatN7KI\m?-mJ/YLac"T7l&Xt1QBg/\iZWG3CXN-r<O<N7"rU3$4k)^:&q%CVl[ms:%>U3c*ddR7%"/F(p2bUiE.B`*<1LQ56U>,&.#8>C@:S$0Xr)CUD!i*K(_Tc,>)`?Tb8t3F0U3j#a%B`-41,T:-g8:D\,ZX%]fu<p.3!!r)7'TAjCWiCA07`.21oQ5k\.XnGlp9/2iT^e2Ai%1M=JMOhn%"C#s/8+/ZF[c1cL!-!MC8heM=IhuDu-47Z?4]:!<hFC+]N0^V!1pTo3%gTcppq"\/69em%91)HLP2dp8bFJCYaV:')Vi8"h\?5&eX:+h-8?E.<i0s$LnU#*/Wb+!3]CdomHC^M7iQu0RiP`,4WA`YV*IR@:G7<]98@d4Sh`AeVQ/J1cf/D [...]
+endstream
+endobj
+58 0 obj
+<< /Type /Page
+/Parent 1 0 R
+/MediaBox [ 0 0 594 842 ]
+/Resources 3 0 R
+/Contents 57 0 R
+/Annots 59 0 R
+>>
+endobj
+59 0 obj
+[
+60 0 R
+62 0 R
+]
+endobj
+60 0 obj
+<< /Type /Annot
+/Subtype /Link
+/Rect [ 52.9 616.022 127.198 609.022 ]
+/C [ 0 0 0 ]
+/Border [ 0 0 0 ]
+/A 61 0 R
+/H /I
+>>
+endobj
+62 0 obj
+<< /Type /Annot
+/Subtype /Link
+/Rect [ 52.9 597.283 126.029 590.283 ]
+/C [ 0 0 0 ]
+/Border [ 0 0 0 ]
+/A 63 0 R
+/H /I
+>>
+endobj
+64 0 obj
+<< /Length 983 /Filter [ /ASCII85Decode /FlateDecode ]
+ >>
+stream
+Gb!#Z9lo#B&A@Zc1n;F6N?mi-RO66(.7qu[_N_RDe3+YQ.8p;I"6nn(GD5/2$774hV(`fjd_;X0HM:R?;=!_A&He1a=c3>-d24sJW=6nU`<aFI,MZ%6U&tLP)\UthY6PI=YR^IuU6!A-&>gus8SU4V5p.W[a`rBJ:%QEY35&'&aY_8uka@,:`Z<6g%g<d4&;6e9K)b:@NsFPS&#DW!b;0PJD$\Qs<<sjYX?cV1WIVV5+&PW62G#>rfYS]oEbXFfOWEBfcI+GUM6jG4b-MGFQ!KY.3G=:%nRaU9;`'4L'-<WS9&/93M(eVB?MCl1iua=*Q-5;rjW^0gf6OZj/JkgN\h*Mn;@DDT(;SmLNk*[$(gorSC&1]m-g$^m>RPp4M?@=a_JD#_#UP$8MS%pua]b<?VbmNr?]`WJ'Zc956*(^2&X$o8pOa/dQ&$cj%aPU3IMA%O6R8!0(`12eHkVOb\P&u"J0pEc#[J0@dO\PI=5EC/H$ [...]
+endstream
+endobj
+65 0 obj
+<< /Type /Page
+/Parent 1 0 R
+/MediaBox [ 0 0 594 842 ]
+/Resources 3 0 R
+/Contents 64 0 R
+>>
+endobj
+66 0 obj
+<< /Length 1163 /Filter [ /ASCII85Decode /FlateDecode ]
+ >>
+stream
+Gb!#Z95iQE&AJ$C&3dK,e)^!A&o\79Xg=Kc[n^dWJR[Ad@`sT/^K.dIjPTE&Ugc&V2KdEbg7TN%kF7lXAiOk"G5>:1=K4p'kV1.M3l<UAQnma*_[44>-fDF`,f3FeQDA<epFAubL"GB98cM$a6+D*d#Z?jbN(T<i<,qD*dtdlF?f)RP?!\KlVKq]K3QiLA38kEF)E)gk!%Ns"=S2XfWq-8;n=^L_:$':fS"h,+I\K(>cFma>V)3nArI?ULE@Jo;`asn##KfJRi;V[Kggr9Ho5MSFf$PqUF,SoVK/IU?N!u'C=RE$]D:%@JGU.4?L$a1,ZBHlBZaf,u-hie#2YT=B%%+rPO%"_$\*s$%bqL4P@7nX(YS<IFfT=__:c/GOh/d5TcpoPqNY']R<<Yl@mnbHH)ALCk5q4=N2dA-dpKBnM#;bNP@bm5!U*B>'^]N%/SeC^p8"?)ugp<+IW-P0Wp,5I$:8f8.[i+$l@[l:S.GM(8G- [...]
+endstream
+endobj
+67 0 obj
+<< /Type /Page
+/Parent 1 0 R
+/MediaBox [ 0 0 594 842 ]
+/Resources 3 0 R
+/Contents 66 0 R
+>>
+endobj
+68 0 obj
+<< /Length 1946 /Filter [ /ASCII85Decode /FlateDecode ]
+ >>
+stream
+Gb!#]hf%7-&:Vr4+lk'Q<e`_7P_^n3g+HN4F=Yo\)iA2;Z7KQ.*%SAOAc;(A'M4.GW7Z"^cif(TMKc^?r4\ruI!0OMbn<InA6,=!6BbQ/?]`Yl:Mrs16LgZoO;"M>,iab1:s&&Vq>H87oK;poRCu'!4CM.2U'a[GV*ptM:/V9ck%4.'SihQTa2qu#VNYX!""QT>gLpU14;UHpq>1*g8AIV=,eBO.+/U6u>qSH@_$P16%n(V9s8-62gf==7h5C6ro<@X9[ajN4AQaH=LHeKM1KJ_CVF2^C3!!T2pDp(QT-d@0d$`Hd.AaDIPY(eunY>R4TXi5q*1>j]6I-#,Zu_3X>o7ifNo]kl_J-G/TfuZ!B'W;W)u*57A,+H;ejb_7VS;K@I(/EUrC*Af@I/-f0GU[hjjT>Db4sM%Y%(YO7]l@(HI&*gp$n0K2J,`Z5/S)_PbaD];lECo4q*neAh`56cl+tQ_u,&#PVs@g(YtY!\CLjS\` [...]
+endstream
+endobj
+69 0 obj
+<< /Type /Page
+/Parent 1 0 R
+/MediaBox [ 0 0 594 842 ]
+/Resources 3 0 R
+/Contents 68 0 R
+>>
+endobj
+70 0 obj
+<< /Length 212 /Filter [ /ASCII85Decode /FlateDecode ]
+ >>
+stream
+GarW3Ymu@N%#4M'MN0AmgN!PSW::Q1OTZRC`5tCphg^p4%:!@(ohYQ??h\<D7tqW_oOS<),$2\:0[RH@NmL,S"g&Tf&)8s1Qc#\2`aU"1Rf8W.g?7r*4o`#5h85`Q:IAo:6!/@:<UI%*+5*sb7OO&Ks(\u/n[u4VE@aL9d:lUZ^P!l%7+*0#?'j>6HYRXrUG.G])@fUuW;-MHDEmR~>
+endstream
+endobj
+71 0 obj
+<< /Type /Page
+/Parent 1 0 R
+/MediaBox [ 0 0 594 842 ]
+/Resources 3 0 R
+/Contents 70 0 R
+>>
+endobj
+72 0 obj
+<< /Length 1223 /Filter [ /ASCII85Decode /FlateDecode ]
+ >>
+stream
+Gb!#[95i<6&AIm?pdTV/Z,^hs9;k`#b=dX`1u\QVZIu$WWD-F:p;"G`NlR/#mt1[.lmhS/4l^g9o/V8&SNVJIM5$/4h&2uH</hrl@'V&%B:L[SjTJ2uPpD&[<.Q7D"8Qu_Bmr@^Om9X:5nKV,?+i\",oOt7:.Z`:X&BJ.iRrFY`X)lL92&N#!%Q.8.b"Fd'.*\h,Tna4>.PQNRo_P"'';?CcNN>^ag[>#c*6#0OA!sT0QQ"ZgZ_Mg2qoFd9tQjkR\B3$GE:L)[iYB2D11:GH'a2*lY^MW3)uBKeI0BA`u(lMf]Z0s][`(m^Ip`PH<f0HTgo[jGCE0X8in:-b$N^<^5QYBPV[LSBVi,&5_QH`jZ,h8k`>7D*6WcY@miuU'j(67U#l!8[n\1@c005HBD,BbWbAOl1uoKAL[ILeJ6$47FeRs;Qk(fSJIEPV.2L3RA<<L<S;.)%g<4==,8fG:1Yo*#l0?U!IUcFND^]J)KaYa\"U [...]
+endstream
+endobj
+73 0 obj
+<< /Type /Page
+/Parent 1 0 R
+/MediaBox [ 0 0 594 842 ]
+/Resources 3 0 R
+/Contents 72 0 R
+>>
+endobj
+74 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F3
+/BaseFont /Helvetica-Bold
+/Encoding /WinAnsiEncoding >>
+endobj
+75 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F1
+/BaseFont /Helvetica
+/Encoding /WinAnsiEncoding >>
+endobj
+76 0 obj
+<< /Type /FontDescriptor
+/FontName /1Ef4f2Garamond
+/FontBBox  [-138 -306 1062 986] 
+/Flags 33
+/CapHeight 639
+/Ascent 986
+/Descent -306
+/ItalicAngle 0
+/StemV 0
+/FontFile2 77 0 R
+/MissingWidth 500
+
+ >>
+endobj
+77 0 obj
+<< /Length 27890 /Filter [ /ASCII85Decode /FlateDecode ]
+ /Length1 28676 >>
+stream
+Gas`*$!\Fih)@MRHgg6%h$5&/#pbT4#p^"K6d#qY#)k9+*!TmlA&gJ/)r%pFBubB0g,+"W]-ON5oLXq2Mkkc)Vm"i&D4\abT-eF'k-=O-8c,lkFe?6Zg;`X-XM@E"kC*?%^VoK_cH`S9B7@nqG:W^q!!Ei6'H#]4J"Oct5s#';!rtJHRbGLQDo\Oh!-T18Dqi"lqU*3q[;?,`\.=,+43+dHhYQLt^u?k,JP4Z5mZ9L!eH#@N/idFRpDs1"%ohT_8%;gW283Y.\-:@^@(:d[mG<4E7K47p!5RLNI8=Tu>O(7p^_m-j=7C/-1EcFH*02*65Oe6*^?X#e!tWACB6;29&TI"Nj$S`kXrcVAj"@<,!S&t+fs:'RI3/IgQ]%1Gs3BN1h#GKoRU'g(j[/ujl!rEK>gru)c6u?#6Q88oF5>7dEM!c.<qJ829:]4s67JQ;^'R2R)H=!cOMbm:q@.QO`6atrKZDd90`]OMKBTdPJpIuAd5 [...]
+endstream
+endobj
+78 0 obj
+<< /Type /Font
+/Subtype /Type0
+/Name /F15
+/BaseFont /1Ef4f2Garamond
+/Encoding /Identity-H
+/DescendantFonts [ 79 0 R ]  >>
+endobj
+79 0 obj
+<< /Type /Font
+/BaseFont /1Ef4f2Garamond 
+/Subtype /CIDFontType2
+/CIDSystemInfo << /Registry (Adobe)/Ordering (UCS)/Supplement 0 >>
+/FontDescriptor 76 0 R
+/DW 0
+/W [ 0 [750 0 250 250 614 510 416 656 291 677 510 510 333 468 406 229 562 770 666 468 354 510 229 218 364 447 312 322 416 489 416 656 458 510 218 500 833 885 354 427 218 635 291 291 572 479 562 177 760 229 697 770 781 770 625 770 468 333 468 500 614 ] ] 
+>>
+endobj
+80 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F9
+/BaseFont /Courier
+/Encoding /WinAnsiEncoding >>
+endobj
+1 0 obj
+<< /Type /Pages
+/Count 17
+/Kids [6 0 R 8 0 R 10 0 R 35 0 R 37 0 R 39 0 R 41 0 R 50 0 R 52 0 R 54 0 R 56 0 R 58 0 R 65 0 R 67 0 R 69 0 R 71 0 R 73 0 R ] >>
+endobj
+2 0 obj
+<< /Type /Catalog
+/Pages 1 0 R
+ >>
+endobj
+3 0 obj
+<< 
+/Font << /F3 74 0 R /F1 75 0 R /F15 78 0 R /F9 80 0 R >> 
+/ProcSet [ /PDF /ImageC /Text ] >> 
+endobj
+13 0 obj
+<<
+/S /GoTo
+/D [37 0 R /XYZ 45.4 711.7 null]
+>>
+endobj
+15 0 obj
+<<
+/S /GoTo
+/D [39 0 R /XYZ 45.4 711.7 null]
+>>
+endobj
+17 0 obj
+<<
+/S /GoTo
+/D [41 0 R /XYZ 45.4 711.7 null]
+>>
+endobj
+19 0 obj
+<<
+/S /GoTo
+/D [50 0 R /XYZ 45.4 711.7 null]
+>>
+endobj
+21 0 obj
+<<
+/S /GoTo
+/D [54 0 R /XYZ 45.4 711.7 null]
+>>
+endobj
+23 0 obj
+<<
+/S /GoTo
+/D [56 0 R /XYZ 45.4 711.7 null]
+>>
+endobj
+25 0 obj
+<<
+/S /GoTo
+/D [58 0 R /XYZ 45.4 711.7 null]
+>>
+endobj
+27 0 obj
+<<
+/S /GoTo
+/D [65 0 R /XYZ 45.4 711.7 null]
+>>
+endobj
+29 0 obj
+<<
+/S /GoTo
+/D [67 0 R /XYZ 45.4 711.7 null]
+>>
+endobj
+31 0 obj
+<<
+/S /GoTo
+/D [69 0 R /XYZ 45.4 711.7 null]
+>>
+endobj
+33 0 obj
+<<
+/S /GoTo
+/D [73 0 R /XYZ 45.4 711.7 null]
+>>
+endobj
+44 0 obj
+<<
+/S /GoTo
+/D [null /XYZ 0.0 0.0 null]
+>>
+endobj
+46 0 obj
+<<
+/S /GoTo
+/D [null /XYZ 0.0 0.0 null]
+>>
+endobj
+48 0 obj
+<<
+/S /GoTo
+/D [null /XYZ 0.0 0.0 null]
+>>
+endobj
+61 0 obj
+<<
+/S /GoTo
+/D [null /XYZ 0.0 0.0 null]
+>>
+endobj
+63 0 obj
+<<
+/S /GoTo
+/D [null /XYZ 0.0 0.0 null]
+>>
+endobj
+xref
+0 81
+0000000000 65535 f 
+0000051603 00000 n 
+0000051773 00000 n 
+0000051823 00000 n 
+0000000015 00000 n 
+0000000071 00000 n 
+0000000502 00000 n 
+0000000608 00000 n 
+0000000719 00000 n 
+0000000825 00000 n 
+0000001913 00000 n 
+0000002035 00000 n 
+0000002132 00000 n 
+0000051936 00000 n 
+0000002265 00000 n 
+0000052000 00000 n 
+0000002401 00000 n 
+0000052064 00000 n 
+0000002537 00000 n 
+0000052128 00000 n 
+0000002673 00000 n 
+0000052192 00000 n 
+0000002809 00000 n 
+0000052256 00000 n 
+0000002945 00000 n 
+0000052320 00000 n 
+0000003081 00000 n 
+0000052384 00000 n 
+0000003216 00000 n 
+0000052448 00000 n 
+0000003352 00000 n 
+0000052512 00000 n 
+0000003488 00000 n 
+0000052576 00000 n 
+0000003621 00000 n 
+0000003936 00000 n 
+0000004044 00000 n 
+0000005214 00000 n 
+0000005322 00000 n 
+0000006502 00000 n 
+0000006610 00000 n 
+0000007575 00000 n 
+0000007698 00000 n 
+0000007739 00000 n 
+0000052640 00000 n 
+0000007874 00000 n 
+0000052699 00000 n 
+0000008010 00000 n 
+0000052758 00000 n 
+0000008146 00000 n 
+0000010295 00000 n 
+0000010403 00000 n 
+0000012308 00000 n 
+0000012416 00000 n 
+0000013366 00000 n 
+0000013474 00000 n 
+0000014492 00000 n 
+0000014600 00000 n 
+0000015529 00000 n 
+0000015652 00000 n 
+0000015686 00000 n 
+0000052817 00000 n 
+0000015822 00000 n 
+0000052876 00000 n 
+0000015958 00000 n 
+0000017033 00000 n 
+0000017141 00000 n 
+0000018397 00000 n 
+0000018505 00000 n 
+0000020544 00000 n 
+0000020652 00000 n 
+0000020956 00000 n 
+0000021064 00000 n 
+0000022380 00000 n 
+0000022488 00000 n 
+0000022601 00000 n 
+0000022709 00000 n 
+0000022925 00000 n 
+0000050924 00000 n 
+0000051062 00000 n 
+0000051497 00000 n 
+trailer
+<<
+/Size 81
+/Root 2 0 R
+/Info 4 0 R
+>>
+startxref
+52935
+%%EOF
diff --git a/fulcrum-yaafi-crypto-1.0.7/src/test/data/plain.txt b/fulcrum-yaafi-crypto-1.0.7/src/test/data/plain.txt
new file mode 100644
index 0000000..1612967
--- /dev/null
+++ b/fulcrum-yaafi-crypto-1.0.7/src/test/data/plain.txt
@@ -0,0 +1,254 @@
+# -------------------------------------------------------------------
+# Copyright 2001-2004 The Apache Software Foundation.
+# 
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+# 
+#      http://www.apache.org/licenses/LICENSE-2.0
+#  
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+# -------------------------------------------------------------------
+
+# -------------------------------------------------------------------
+# D E F A U L T  M A V E N  P R O P E R T I E S
+# -------------------------------------------------------------------
+# These are the properties that we believe are immutable so we
+# keep them apart from the project specific properties.
+# -------------------------------------------------------------------
+
+# Properties for the dashboard reactor
+# ------------------------------------
+
+maven.dashboard.basedir=${basedir}
+maven.dashboard.includes=*/project.xml
+maven.dashboard.excludes=**/target/**/project.xml
+maven.dashboard.ignoreFailures=false
+
+# Generated dashboard xml data file
+maven.dashboard.report.xml = ${maven.build.dir}/dashboard-data.xml
+
+# Generated dashboard main report xdoc file name (without the extension). 
+# Note: The value must not include any path as the xdoc will be 
+# generated in ${maven.gen.docs}.
+maven.dashboard.report.xdoc = dashboard-report
+
+# Generated dashboard legend xdoc file name (without the extension). 
+# Note: The value must not include any path as the xdoc will be 
+# generated in ${maven.gen.docs}.
+maven.dashboard.report.legend.xdoc = dashboard-report-legend
+
+# Location of JSL template to generate the main report xdoc file
+maven.dashboard.template = ${plugin.resources}/templates/dashboard.jsl
+
+# Location of JSL template to generate the legend report xdoc file
+maven.dashboard.template.legend = ${plugin.resources}/templates/legend.jsl
+
+# Decide whether a call to dashboard:report will call the reactor
+# on the child projects to generate individual dashboard data. If you
+# already using the multiproject project or the reactor, a better option
+# is to add dashboard:report-single to the list of goals you're running.
+# In which case, you'll need to set the following property to false
+# (otherwise the reactor will be run again on your child projects).
+maven.dashboard.runreactor = true
+
+# If false, do not show projects for which gathered data is empty for all
+# aggregators.
+maven.dashboard.report.showempty = true
+
+# Images used when generating the progress bar for the dashboard HTML color
+# for left bar
+maven.dashboard.report.bar.left = green
+
+# HTML color for right bar
+maven.dashboard.report.bar.right = red
+
+# Image to set cells with (should be transparent)
+maven.dashboard.report.bar.image = images/trans.gif
+maven.dashboard.report.bar.height = 10
+maven.dashboard.report.bar.border = 0
+maven.dashboard.report.bar.displayLabel = true
+
+# Properties for gathering dashboard data for a single project
+# ------------------------------------------------------------
+
+# Location of default dashboard aggregators
+maven.dashboard.aggregators.dir = ${plugin.resources}/aggregators
+
+# Comma-separated list of aggregators to use
+maven.dashboard.aggregators = cserrors,cswarnings,clovertpc,cloverloc,cloverncloc
+
+# Generated dashboard data for a single project
+maven.dashboard.report.single = ${maven.build.dir}/dashboard-single.xml
+
+# Decide whether to call goals associated with report types or not
+maven.dashboard.rungoals = true
+
+# Default aggregators
+# -------------------
+
+# Properties for the Checkstyle files aggregator
+maven.dashboard.aggregator.csfiles.script = ${maven.dashboard.aggregators.dir}/csfiles.jelly
+maven.dashboard.aggregator.csfiles.artifact = ${maven.build.dir}/checkstyle-raw-report.xml
+maven.dashboard.aggregator.csfiles.label = CS Files
+maven.dashboard.aggregator.csfiles.goal = checkstyle
+maven.dashboard.aggregator.csfiles.description = Number of files checked with Checkstyle
+
+# Properties for the Checkstyle error/warning aggregator (all errors/warnings)
+maven.dashboard.aggregator.csall.script = ${maven.dashboard.aggregators.dir}/csall.jelly
+maven.dashboard.aggregator.csall.artifact = ${maven.build.dir}/checkstyle-raw-report.xml
+maven.dashboard.aggregator.csall.label = CS err/warn
+maven.dashboard.aggregator.csall.goal = checkstyle
+maven.dashboard.aggregator.csall.description = Number of Checkstyle errors and warnings
+
+# Properties for the Checkstyle error aggregator (only errors)
+maven.dashboard.aggregator.cserrors.script = ${maven.dashboard.aggregators.dir}/cserrors.jelly
+maven.dashboard.aggregator.cserrors.artifact = ${maven.build.dir}/checkstyle-raw-report.xml
+maven.dashboard.aggregator.cserrors.label = CS errors
+maven.dashboard.aggregator.cserrors.goal = checkstyle
+maven.dashboard.aggregator.cserrors.description = Number of Checkstyle errors
+
+# Properties for the Checkstyle warning aggregator (only warnings)
+maven.dashboard.aggregator.cswarnings.script = ${maven.dashboard.aggregators.dir}/cswarnings.jelly
+maven.dashboard.aggregator.cswarnings.artifact = ${maven.build.dir}/checkstyle-raw-report.xml
+maven.dashboard.aggregator.cswarnings.label = CS warnings
+maven.dashboard.aggregator.cswarnings.goal = checkstyle
+maven.dashboard.aggregator.cswarnings.description = Number of Checkstyle warnings
+
+# Properties for the Clover TPC aggregator (TPC = Total Percent Coverage)
+maven.dashboard.aggregator.clovertpc.script = ${maven.dashboard.aggregators.dir}/clovertpc.jelly
+maven.dashboard.aggregator.clovertpc.artifact = ${maven.build.dir}/clover.xml
+maven.dashboard.aggregator.clovertpc.label = Clover TPC
+maven.dashboard.aggregator.clovertpc.goal = clover
+maven.dashboard.aggregator.clovertpc.description = Number of test coverage percentage
+
+# Properties for the Clover LOC aggregator (LOC = Line Of Code)
+maven.dashboard.aggregator.cloverloc.script = ${maven.dashboard.aggregators.dir}/cloverloc.jelly
+maven.dashboard.aggregator.cloverloc.artifact = ${maven.build.dir}/clover.xml
+maven.dashboard.aggregator.cloverloc.label = Clover LOC
+maven.dashboard.aggregator.cloverloc.goal = clover
+maven.dashboard.aggregator.cloverloc.description = Number of line of code (including comments)
+
+# Properties for the Clover NCLOC aggregator (NCLOC = Non Comment Line Of Code)
+maven.dashboard.aggregator.cloverncloc.script = ${maven.dashboard.aggregators.dir}/cloverncloc.jelly
+maven.dashboard.aggregator.cloverncloc.artifact = ${maven.build.dir}/clover.xml
+maven.dashboard.aggregator.cloverncloc.label = Clover NCLOC
+maven.dashboard.aggregator.cloverncloc.goal = clover
+maven.dashboard.aggregator.cloverncloc.description = Number of non-commented lines of code
+
+# Properties for the JUnit Test aggregator 
+maven.dashboard.aggregator.junittests.script = ${maven.dashboard.aggregators.dir}/junittests.jelly
+maven.dashboard.aggregator.junittests.artifact = ${maven.build.dir}/TESTS-TestSuites.xml
+maven.dashboard.aggregator.junittests.label = JUnit Tests
+maven.dashboard.aggregator.junittests.goal = junit-report:report
+maven.dashboard.aggregator.junittests.description = Number of JUnit tests
+
+# Properties for the JUnit Failures aggregator 
+maven.dashboard.aggregator.junitfailures.script = ${maven.dashboard.aggregators.dir}/junitfailures.jelly
+maven.dashboard.aggregator.junitfailures.artifact = ${maven.build.dir}/TESTS-TestSuites.xml
+maven.dashboard.aggregator.junitfailures.label = JUnit Failures
+maven.dashboard.aggregator.junitfailures.goal = junit-report:report
+maven.dashboard.aggregator.junitfailures.description = Number of JUnit test failures
+
+# Properties for the JUnit Errors aggregator 
+maven.dashboard.aggregator.juniterrors.script = ${maven.dashboard.aggregators.dir}/juniterrors.jelly
+maven.dashboard.aggregator.juniterrors.artifact = ${maven.build.dir}/TESTS-TestSuites.xml
+maven.dashboard.aggregator.juniterrors.label = JUnit Errors
+maven.dashboard.aggregator.juniterrors.goal = junit-report:report
+maven.dashboard.aggregator.juniterrors.description = Number of JUnit test errors
+
+# Properties for the JUnit Pass Rate aggregator 
+maven.dashboard.aggregator.junitpassrate.script = ${maven.dashboard.aggregators.dir}/junitpassrate.jelly
+maven.dashboard.aggregator.junitpassrate.artifact = ${maven.build.dir}/TESTS-TestSuites.xml
+maven.dashboard.aggregator.junitpassrate.label = JUnit Pass Rate
+maven.dashboard.aggregator.junitpassrate.goal = junit-report:report
+maven.dashboard.aggregator.junitpassrate.description = Percentage of JUnit tests that have passed vs tests in error or failed
+
+# Properties for the PMD violations aggregator 
+maven.dashboard.aggregator.pmdfiles.script = ${maven.dashboard.aggregators.dir}/pmdfiles.jelly
+maven.dashboard.aggregator.pmdfiles.artifact = ${maven.build.dir}/pmd-raw-report.xml
+maven.dashboard.aggregator.pmdfiles.label = PMD Files with Violations
+maven.dashboard.aggregator.pmdfiles.goal = pmd:report
+maven.dashboard.aggregator.pmdfiles.description = Number of files with PMD violations
+
+# Properties for the PMD violations aggregator 
+maven.dashboard.aggregator.pmdviolations.script = ${maven.dashboard.aggregators.dir}/pmdviolations.jelly
+maven.dashboard.aggregator.pmdviolations.artifact = ${maven.build.dir}/pmd-raw-report.xml
+maven.dashboard.aggregator.pmdviolations.label = PMD Violations
+maven.dashboard.aggregator.pmdviolations.goal = pmd:report
+maven.dashboard.aggregator.pmdviolations.description = Number of PMD violations
+
+# Properties for the Simian duplicate lines aggregator 
+maven.dashboard.aggregator.simiantdl.script = ${maven.dashboard.aggregators.dir}/simiantdl.jelly
+maven.dashboard.aggregator.simiantdl.artifact = ${maven.build.dir}/generated-xdocs/simian-report.xml
+maven.dashboard.aggregator.simiantdl.label = Simian TDL
+maven.dashboard.aggregator.simiantdl.goal = maven-simian-plugin:report
+maven.dashboard.aggregator.simiantdl.description = Simian Total Duplicate Lines
+
+# Properties for the JCoverage covered lines percent aggregator 
+maven.dashboard.aggregator.jcoveragelipc.script = ${maven.dashboard.aggregators.dir}/jcoveragelipc.jelly
+maven.dashboard.aggregator.jcoveragelipc.artifact = ${maven.build.dir}/jcoverage/coverage.xml
+maven.dashboard.aggregator.jcoveragelipc.label = JCoverage %lines
+maven.dashboard.aggregator.jcoveragelipc.goal = maven-jcoverage-plugin:report
+maven.dashboard.aggregator.jcoveragelipc.description = JCoverage covered lines percentile
+
+# Properties for the JCoverage total lines aggregator 
+maven.dashboard.aggregator.jcoverageloc.script = ${maven.dashboard.aggregators.dir}/jcoverageloc.jelly
+maven.dashboard.aggregator.jcoverageloc.artifact = ${maven.build.dir}/jcoverage/coverage.xml
+maven.dashboard.aggregator.jcoverageloc.label = JCoverage LOC
+maven.dashboard.aggregator.jcoverageloc.goal = maven-jcoverage-plugin:report
+maven.dashboard.aggregator.jcoverageloc.description = JCoverage total lines of code
+
+# Properties for the FindBugs file violations aggregator 
+maven.dashboard.aggregator.fbfiles.script = ${maven.dashboard.aggregators.dir}/fbfiles.jelly
+maven.dashboard.aggregator.fbfiles.artifact = ${maven.build.dir}/findbugs-raw-report.xml
+maven.dashboard.aggregator.fbfiles.label = FindBugs Files with Violations
+maven.dashboard.aggregator.fbfiles.goal = maven-findbugs-plugin:report
+maven.dashboard.aggregator.fbfiles.description = Number of files with FindBugs violations
+
+# Properties for the FindBugs violations aggregator 
+maven.dashboard.aggregator.fbviolations.script = ${maven.dashboard.aggregators.dir}/fbviolations.jelly
+maven.dashboard.aggregator.fbviolations.artifact = ${maven.build.dir}/findbugs-raw-report.xml
+maven.dashboard.aggregator.fbviolations.label = FindBugs Violations
+maven.dashboard.aggregator.fbviolations.goal = maven-findbugs-plugin:report
+maven.dashboard.aggregator.fbviolations.description = Number of FindBugs violations
+
+# Classes Tasks aggregator
+maven.dashboard.aggregator.tasklistclass.script = ${maven.dashboard.aggregators.dir}/task-list-classes.jelly
+maven.dashboard.aggregator.tasklistclass.artifact = ${maven.build.dir}/generated-xdocs/task-list.xml
+maven.dashboard.aggregator.tasklistclass.label = Classes Tasks 
+maven.dashboard.aggregator.tasklistclass.goal = maven-tasklist-plugin:report
+maven.dashboard.aggregator.tasklistclass.description = Total number of classes with task definition (@todo tag).
+
+# Methods Tasks aggregator
+maven.dashboard.aggregator.tasklistmethod.script = ${maven.dashboard.aggregators.dir}/task-list-methods.jelly
+maven.dashboard.aggregator.tasklistmethod.artifact = ${maven.build.dir}/generated-xdocs/task-list.xml
+maven.dashboard.aggregator.tasklistmethod.label = Methods Tasks 
+maven.dashboard.aggregator.tasklistmethod.goal = maven-tasklist-plugin:report
+maven.dashboard.aggregator.tasklistmethod.description = Total number of methods with task definition (@todo tag).
+
+# All Tasks aggregator
+maven.dashboard.aggregator.tasklist.script = ${maven.dashboard.aggregators.dir}/task-list-all.jelly
+maven.dashboard.aggregator.tasklist.artifact = ${maven.build.dir}/generated-xdocs/task-list.xml
+maven.dashboard.aggregator.tasklist.label = All Tasks 
+maven.dashboard.aggregator.tasklist.goal = maven-tasklist-plugin:report
+maven.dashboard.aggregator.tasklist.description = Total number of task definition (@todo tag).
+
+# Changed log: total number of scm changed files aggregator
+maven.dashboard.aggregator.scmchangedfiles.script = ${maven.dashboard.aggregators.dir}/scmchangedfiles.jelly
+maven.dashboard.aggregator.scmchangedfiles.artifact = ${maven.build.dir}/changelog.xml
+maven.dashboard.aggregator.scmchangedfiles.label = SCM Changed Files
+maven.dashboard.aggregator.scmchangedfiles.goal = maven-changelog-plugin:report
+maven.dashboard.aggregator.scmchangedfiles.description = Total number of changed files in scm.
+
+# Changed log: total number of scm commit aggregator
+maven.dashboard.aggregator.scmchangedcommit.script = ${maven.dashboard.aggregators.dir}/scmchangedcommit.jelly
+maven.dashboard.aggregator.scmchangedcommit.artifact = ${maven.build.dir}/changelog.xml
+maven.dashboard.aggregator.scmchangedcommit.label = SCM commits
+maven.dashboard.aggregator.scmchangedcommit.goal = maven-changelog-plugin:report
+maven.dashboard.aggregator.scmchangedcommit.description = Total number of scm commit.
+
diff --git a/fulcrum-yaafi-crypto-1.0.7/src/test/data/plain.xml b/fulcrum-yaafi-crypto-1.0.7/src/test/data/plain.xml
new file mode 100644
index 0000000..8890c58
--- /dev/null
+++ b/fulcrum-yaafi-crypto-1.0.7/src/test/data/plain.xml
@@ -0,0 +1,56 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements.  See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership.  The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License.  You may obtain a copy of the License at
+ 
+ http://www.apache.org/licenses/LICENSE-2.0
+ 
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied.  See the License for the
+ specific language governing permissions and limitations
+ under the License.
+-->
+
+<role-list>
+ <!-- Use minimal role entry -->
+ <role
+  name="org.apache.fulcrum.yaafi.service.servicemanager.ServiceManagerService"
+  default-class="org.apache.fulcrum.yaafi.service.servicemanager.ServiceManagerServiceImpl"
+ />
+ <!-- For the rest of the services use a full-blown role entry -->
+ <role
+  name="org.apache.fulcrum.yaafi.service.systemproperty.SystemPropertyService"
+  shorthand="SystemPropertyService"
+  default-class="org.apache.fulcrum.yaafi.service.systemproperty.SystemPropertyServiceImpl"
+  early-init="true"
+  description="ÜÖÄüöäß"
+ />
+ <!--
+  This ReconfigurationService is instantiated during the first access. Until
+  then it is doing nothing.
+ -->
+ <role
+  name="org.apache.fulcrum.yaafi.service.reconfiguration.ReconfigurationService"
+  shorthand="ReconfigurationService"
+  default-class="org.apache.fulcrum.yaafi.service.reconfiguration.ReconfigurationServiceImpl"
+  early-init="false"
+  component-type="avalon"
+  component-flavour="yaafi"
+  description="Monitors the componentConfiguration.xml to reconfigure YAAFI"
+ />
+ <role
+  name="org.apache.fulcrum.yaafi.TestComponent"
+  shorthand="test"
+  default-class="org.apache.fulcrum.yaafi.TestComponentImpl"
+  early-init="true"
+  component-type="merlin"
+  description="A simple test component"
+ />
+</role-list>
\ No newline at end of file
diff --git a/fulcrum-yaafi-crypto-1.0.7/src/test/data/plain.zip b/fulcrum-yaafi-crypto-1.0.7/src/test/data/plain.zip
new file mode 100644
index 0000000..37ddfc5
Binary files /dev/null and b/fulcrum-yaafi-crypto-1.0.7/src/test/data/plain.zip differ
diff --git a/fulcrum-yaafi-crypto-1.0.7/src/test/org/apache/fulcrum/jce/crypto/CryptoUtilTest.java b/fulcrum-yaafi-crypto-1.0.7/src/test/org/apache/fulcrum/jce/crypto/CryptoUtilTest.java
new file mode 100644
index 0000000..2d59bc5
--- /dev/null
+++ b/fulcrum-yaafi-crypto-1.0.7/src/test/org/apache/fulcrum/jce/crypto/CryptoUtilTest.java
@@ -0,0 +1,302 @@
+package org.apache.fulcrum.jce.crypto;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+
+import junit.framework.TestCase;
+
+/**
+ * Test suite for crypto functionality
+ *
+ * @author <a href="mailto:siegfried.goeschl@it20one.at">Siegfried Goeschl</a>
+ */
+
+public class CryptoUtilTest extends TestCase
+{
+    /** the password to be used */
+    private String password;
+
+    /** the test data directory */
+    private File testDataDirectory;
+
+    /** the temp data director */
+    private File tempDataDirectory;
+
+    /**
+     * Constructor
+     * @param name the name of the test case
+     */
+    public CryptoUtilTest( String name )
+    {
+        super(name);
+
+        this.password = "mysecret";
+        this.testDataDirectory = new File( "./src/test/data" );
+        this.tempDataDirectory = new File( "./target/temp" );
+        this.tempDataDirectory.mkdirs();
+    }
+
+    /**
+     * @see junit.framework.TestCase#setUp()
+     *         byte[] salt,
+        int count,
+        String algorithm,
+        String providerName )
+
+     */
+    protected void setUp() throws Exception
+    {
+        CryptoStreamFactoryImpl factory = new CryptoStreamFactoryImpl(
+            CryptoParameters.SALT,
+            CryptoParameters.COUNT
+            );
+
+        CryptoStreamFactoryImpl.setInstance( factory );
+    }
+
+    /**
+     * @return Returns the password.
+     */
+    protected char[] getPassword()
+    {
+        return password.toCharArray();
+    }
+
+    /**
+     * @return Returns the tempDataDirectory.
+     */
+    protected File getTempDataDirectory()
+    {
+        return tempDataDirectory;
+    }
+
+    /**
+     * @return Returns the testDataDirectory.
+     */
+    protected File getTestDataDirectory()
+    {
+        return testDataDirectory;
+    }
+
+    /** Encrypt a text file */
+    public void testTextEncryption() throws Exception
+    {
+        File sourceFile = new File( this.getTestDataDirectory(), "plain.txt" );
+        File targetFile = new File( this.getTempDataDirectory(), "plain.enc.txt" );
+        CryptoUtil.encrypt( sourceFile, targetFile, this.getPassword() );
+    }
+
+    /** Decrypt a text file */
+    public void testTextDecryption() throws Exception
+    {
+        testTextEncryption();
+        File sourceFile = new File( this.getTempDataDirectory(), "plain.enc.txt" );
+        File targetFile = new File( this.getTempDataDirectory(), "plain.dec.txt" );
+        CryptoUtil.decrypt( sourceFile, targetFile.getAbsolutePath(), this.getPassword() );
+    }
+
+    /** Encrypt an empty text file */
+    public void testEmptyTextEncryption() throws Exception
+    {
+        File sourceFile = new File( this.getTestDataDirectory(), "empty.txt" );
+        File targetFile = new File( this.getTempDataDirectory(), "empty.enc.txt" );
+        CryptoUtil.encrypt( sourceFile, targetFile, this.getPassword() );
+    }
+
+    /** Decrypt a text file */
+    public void testEmptyTextDecryption() throws Exception
+    {
+        testEmptyTextEncryption();
+        File sourceFile = new File( this.getTempDataDirectory(), "empty.enc.txt" );
+        File targetFile = new File( this.getTempDataDirectory(), "empty.dec.txt" );
+        CryptoUtil.decrypt( sourceFile, targetFile, this.getPassword() );
+    }
+
+    /** Encrypt a PDF file */
+    public void testPdfEncryption() throws Exception
+    {
+        File sourceFile = new File( this.getTestDataDirectory(), "plain.pdf" );
+        File targetFile = new File( this.getTempDataDirectory(), "plain.enc.pdf" );
+        CryptoUtil.encrypt( sourceFile, targetFile, this.getPassword() );
+    }
+
+    /** Decrypt a PDF file */
+    public void testPdfDecryption() throws Exception
+    {
+        testPdfEncryption();
+        File sourceFile = new File( this.getTempDataDirectory(), "plain.enc.pdf" );
+        File targetFile = new File( this.getTempDataDirectory(), "plain.dec.pdf" );
+        CryptoUtil.decrypt( sourceFile, targetFile, this.getPassword() );
+    }
+
+    /** Encrypt a ZIP file */
+    public void testZipEncryption() throws Exception
+    {
+        File sourceFile = new File( this.getTestDataDirectory(), "plain.zip" );
+        File targetFile = new File( this.getTempDataDirectory(), "plain.enc.zip" );
+        CryptoUtil.encrypt( sourceFile, targetFile, this.getPassword() );
+    }
+
+    /** Decrypt a ZIP file */
+    public void testZipDecryption() throws Exception
+    {
+        testZipEncryption();
+        File sourceFile = new File( this.getTempDataDirectory(), "plain.enc.zip" );
+        File targetFile = new File( this.getTempDataDirectory(), "plain.dec.zip" );
+        CryptoUtil.decrypt( sourceFile, targetFile, this.getPassword() );
+    }
+
+    /** Encrypt a UTF-16 XML file */
+    public void testXmlUTF16Encryption() throws Exception
+    {
+        File sourceFile = new File( this.getTestDataDirectory(), "plain-utf16.xml" );
+        File targetFile = new File( this.getTempDataDirectory(), "plain-utf16.enc.xml" );
+        CryptoUtil.encrypt( sourceFile, targetFile, this.getPassword() );
+    }
+
+    /** Decrypt a UTF-16 XML file */
+    public void testXMLUTF16Decryption() throws Exception
+    {
+        testXmlUTF16Encryption();
+        File sourceFile = new File( this.getTempDataDirectory(), "plain-utf16.enc.xml" );
+        File targetFile = new File( this.getTempDataDirectory(), "plain-utf16.dec.xml" );
+        CryptoUtil.decrypt( sourceFile, targetFile, this.getPassword() );
+    }
+
+    /** Encrypt a UTF-8 XML file */
+    public void testXmlUTF8Encryption() throws Exception
+    {
+        File sourceFile = new File( this.getTestDataDirectory(), "plain-utf8.xml" );
+        File targetFile = new File( this.getTempDataDirectory(), "plain-utf8.enc.xml" );
+        CryptoUtil.encrypt( sourceFile, targetFile, this.getPassword() );
+    }
+
+    /** Decrypt a UTF-8 XML file */
+    public void testXMLUTF8Decryption() throws Exception
+    {
+        testXmlUTF8Encryption();
+        File sourceFile = new File( this.getTempDataDirectory(), "plain-utf8.enc.xml" );
+        File targetFile = new File( this.getTempDataDirectory(), "plain-utf8.dec.xml" );
+        CryptoUtil.decrypt( sourceFile, targetFile, this.getPassword() );
+    }
+
+    /** Encrypt a ISO-8859-1 XML file */
+    public void testXmlISO88591Encryption() throws Exception
+    {
+        File sourceFile = new File( this.getTestDataDirectory(), "plain-iso-8859-1.xml" );
+        File targetFile = new File( this.getTempDataDirectory(), "plain-iso-8859-1.enc.xml" );
+        CryptoUtil.encrypt( sourceFile, targetFile, this.getPassword() );
+    }
+
+    /** Decrypt a UTF-8 XML file */
+    public void testXmlISO88591Decryption() throws Exception
+    {
+        testXmlISO88591Encryption();
+        File sourceFile = new File( this.getTempDataDirectory(), "plain-iso-8859-1.enc.xml" );
+        File targetFile = new File( this.getTempDataDirectory(), "plain-iso-8859-1.dec.xml" );
+        CryptoUtil.decrypt( sourceFile, targetFile, this.getPassword() );
+    }
+    /** Test encryption and decryption of Strings */
+    public void testStringEncryption() throws Exception
+    {
+        char[] testVector = new char[513];
+
+        for( int i=0; i<testVector.length; i++ )
+        {
+            testVector[i] = (char) i;
+        }
+
+        String source = new String( testVector );
+        String cipherText = CryptoUtil.encryptString( source, this.getPassword() );
+        String plainText = CryptoUtil.decryptString( cipherText, this.getPassword() );
+        assertEquals( source, plainText );
+    }
+
+    /** Test encryption and decryption of Strings */
+    public void testStringHandling() throws Exception
+    {
+        String source = "Nobody knows the toubles I have seen ...";
+        String cipherText = CryptoUtil.encryptString( source, this.getPassword() );
+        String plainText = CryptoUtil.decryptString( cipherText, this.getPassword() );
+        assertEquals( source, plainText );
+    }
+
+    /** Test encryption and decryption of binary data */
+    public void testBinaryHandling() throws Exception
+    {
+        byte[] source = new byte[256];
+        byte[] result = null;
+
+        for( int i=0; i<source.length; i++ )
+        {
+            source[i] = (byte) i;
+        }
+
+        ByteArrayOutputStream cipherText = new ByteArrayOutputStream();
+        ByteArrayOutputStream plainText = new ByteArrayOutputStream();
+
+        CryptoUtil.encrypt( source, cipherText, this.getPassword() );
+        CryptoUtil.decrypt( cipherText, plainText, this.getPassword() );
+
+        result = plainText.toByteArray();
+
+        for( int i=0; i<source.length; i++ )
+        {
+            if( source[i] != result[i] )
+            {
+                fail( "Binary data are different at position " + i );
+            }
+        }
+    }
+
+    /** Test creating a password */
+    public void testPasswordFactory() throws Exception
+    {
+        char[] result = null;
+        result = PasswordFactory.create();
+        System.out.println( new String(result) );
+        result = PasswordFactory.create( this.getPassword() );
+        System.out.println( new String(result) );        
+        assertNotNull(result);
+        return;
+    }
+
+    public void testHexConverter() throws Exception
+    {
+        String source = "DceuATAABWSaVTSIK";
+        String hexString = HexConverter.toString( source.getBytes() );
+        String result = new String( HexConverter.toBytes( hexString ) );
+        assertEquals( source, result );
+    }
+
+    /** Test encryption and decryption of Strings */
+    public void testPasswordEncryption() throws Exception
+    {
+        char[] password = "57cb-4a23-d838-45222".toCharArray();
+        String source = "e02c-3b76-ff1e-5d9a1";
+        String cipherText = CryptoUtil.encryptString( source, password );
+        String plainText = CryptoUtil.decryptString( cipherText, password );
+        assertEquals( source, plainText );
+    }
+
+}
diff --git a/fulcrum-yaafi-crypto-1.0.7/src/test/org/apache/fulcrum/jce/crypto/Main.java b/fulcrum-yaafi-crypto-1.0.7/src/test/org/apache/fulcrum/jce/crypto/Main.java
new file mode 100644
index 0000000..c4488ec
--- /dev/null
+++ b/fulcrum-yaafi-crypto-1.0.7/src/test/org/apache/fulcrum/jce/crypto/Main.java
@@ -0,0 +1,181 @@
+package org.apache.fulcrum.jce.crypto;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+
+/**
+ * Command line tool for encrypting/decrypting files
+ *
+ * file [enc|dec] passwd [file]*
+ * string [enc|dec] passwd plaintext
+ *
+ * @author <a href="mailto:siegfried.goeschl@it20one.at">Siegfried Goeschl</a>
+ */
+
+public class Main
+{
+    /**
+     * Allows testing on the command line.
+     * 
+     * @param args the command line parameters
+     */
+    public static void main( String[] args )
+    {
+        try
+        {
+            if( args.length < 3 )
+            {
+                printHelp();
+                throw new IllegalArgumentException("Invalid command line");
+            }
+
+            String operationMode = args[0];
+
+            if( operationMode.equals("file") )
+            {
+                processFiles(args);
+            }
+            else if( operationMode.equals("string") )
+            {
+                processString(args);
+            }
+        }
+        catch (Exception e)
+        {
+            System.out.println("Error : " + e.getMessage());
+        }
+    }
+
+    /**
+     * Prints usage information.
+     */
+    public static void printHelp()
+    {
+        System.out.println("Main file [enc|dec] passwd source [target]");
+        System.out.println("Main string [enc|dec] passwd ");
+    }
+
+    /**
+     * Decrypt/encrypt a list of files
+     * @param args the command line
+     * @throws Exception the operation failed
+     */
+    public static void processFiles(String[] args)
+        throws Exception
+    {
+        String cipherMode = args[1];
+        char[] password = args[2].toCharArray();
+        File sourceFile = new File(args[3]);
+        File targetFile = null;
+
+        if( args.length == 4 )
+        {
+            targetFile = sourceFile;
+        }
+        else
+        {
+            targetFile = new File(args[4]);
+            File parentFile = targetFile.getParentFile(); 
+
+            if(parentFile != null)
+            {
+                parentFile.mkdirs();
+            }
+        }
+
+        processFile(cipherMode,password,sourceFile,targetFile);
+    }
+
+    /**
+     * Decrypt/encrypt a single file
+     * @param cipherMode the mode
+     * @param password the passwors
+     * @param sourceFile the file to process
+     * @param targetFile the targetf file
+     * @throws Exception the operation failed
+     */
+    public static void processFile(String cipherMode, char[] password, File sourceFile, File targetFile)
+        throws Exception
+    {
+        FileInputStream fis = new FileInputStream(sourceFile);
+        ByteArrayOutputStream baos = new ByteArrayOutputStream();
+
+        if( cipherMode.equals("dec") )
+        {
+            System.out.println("Decrypting " + sourceFile.getAbsolutePath() );
+            CryptoUtil.decrypt( fis, baos, password );
+            fis.close();
+
+            ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
+            FileOutputStream fos = new FileOutputStream(targetFile);
+            CryptoUtil.copy(bais,fos);
+            bais.close();
+            fos.close();
+        }
+        else if( cipherMode.equals("enc") )
+        {
+            System.out.println("Enrypting " + sourceFile.getAbsolutePath() );
+            CryptoUtil.encrypt( fis, baos, password );
+            fis.close();
+
+            ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
+            FileOutputStream fos = new FileOutputStream(targetFile);
+            CryptoUtil.copy(bais,fos);
+            bais.close();
+            fos.close();
+        }
+        else
+        {
+            String msg = "Don't know what to do with : " + cipherMode;
+            throw new IllegalArgumentException(msg);
+        }
+    }
+
+    /**
+     * Decrypt/encrypt a string.
+     * 
+     * @param args the command line
+     * @throws Exception the operation failed
+     */
+    public static void processString(String[] args)
+        throws Exception
+    {
+        String cipherMode = args[1];
+        char[] password = args[2].toCharArray();
+        String value = args[3];
+        String result = null;
+
+        if( cipherMode.equals("dec") )
+        {
+            result = CryptoUtil.decryptString(value,password);
+        }
+        else
+        {
+            result = CryptoUtil.encryptString(value,password);
+        }
+
+        System.out.println( result );
+    }
+}
\ No newline at end of file
diff --git a/fulcrum-yaafi-crypto-1.0.7/src/test/org/apache/fulcrum/jce/crypto/MainTest.java b/fulcrum-yaafi-crypto-1.0.7/src/test/org/apache/fulcrum/jce/crypto/MainTest.java
new file mode 100644
index 0000000..352990f
--- /dev/null
+++ b/fulcrum-yaafi-crypto-1.0.7/src/test/org/apache/fulcrum/jce/crypto/MainTest.java
@@ -0,0 +1,81 @@
+package org.apache.fulcrum.jce.crypto;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import junit.framework.TestCase;
+
+/**
+ * Test suite for crypto functionality
+ *
+ * @author <a href="mailto:siegfried.goeschl@it20one.at">Siegfried Goeschl</a>
+ */
+
+public class MainTest extends TestCase
+{
+    /** the password to be used */
+    private String password;
+
+    /**
+     * Constructor
+     * @param name the name of the test case
+     */
+    public MainTest( String name )
+    {
+        super(name);
+
+        this.password = "foobar";
+    }
+
+    /**
+     * @return Returns the password.
+     */
+    protected char[] getPassword()
+    {
+        return password.toCharArray();
+    }
+
+    /** Encrypt a string on the command line */
+    public void testStringEncryption()
+    {
+        String[] encryptionArgs = { "string", "enc", this.password, "mysecretpassword"};
+        Main.main(encryptionArgs);
+        String[] decryptionArgs = { "string", "dec", this.password, "9330419fc003b4e1461986782625db13f4c8c81c340a9caa"};
+        Main.main(decryptionArgs);
+    }
+
+    /** Encrypt a text file on the command line */
+    public void testFileEncryption1()
+    {
+        String[] encryptionArgs = { "file", "enc", this.password, "./src/test/data/plain.txt", "./target/main/plain.enc.txt" };
+        String[] decryptionArgs = { "file", "dec", this.password, "./target/main/plain.enc.txt", "./target/main/plain.dec.txt" };
+        Main.main(encryptionArgs);
+        Main.main(decryptionArgs);
+    }
+
+    /** Encrypt a text file in-place on the command line */
+    public void testFileEncryption2()
+    {
+        String[] encryptionArgs = { "file", "enc", this.password, "./src/test/data/plain.txt", "./target/main/plain.txt" };
+        String[] decryptionArgs = { "file", "dec", this.password, "./target/main/plain.txt" };
+        Main.main(encryptionArgs);
+        Main.main(decryptionArgs);
+    }
+
+}
\ No newline at end of file
diff --git a/fulcrum-yaafi-crypto-1.0.7/src/test/org/apache/fulcrum/jce/crypto/SmartDecryptingInputStreamTest.java b/fulcrum-yaafi-crypto-1.0.7/src/test/org/apache/fulcrum/jce/crypto/SmartDecryptingInputStreamTest.java
new file mode 100644
index 0000000..7bcfd96
--- /dev/null
+++ b/fulcrum-yaafi-crypto-1.0.7/src/test/org/apache/fulcrum/jce/crypto/SmartDecryptingInputStreamTest.java
@@ -0,0 +1,231 @@
+package org.apache.fulcrum.jce.crypto;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+import java.io.FileInputStream;
+
+import junit.framework.TestCase;
+
+/**
+ * Test suite for SmartDecryptingInputStream
+ *
+ * @author <a href="mailto:siegfried.goeschl@it20one.at">Siegfried Goeschl</a>
+ */
+
+public class SmartDecryptingInputStreamTest extends TestCase
+{
+    /** the password to be used */
+    private String password;
+
+    /** the test data directory */
+    private File testDataDirectory;
+
+    /** the temp data director */
+    private File tempDataDirectory;
+
+    /**
+     * Constructor
+     * @param name the name of the test case
+     */
+    public SmartDecryptingInputStreamTest( String name )
+    {
+        super(name);
+
+        this.password = "mysecret";
+        this.testDataDirectory = new File( "./src/test/data" );
+        this.tempDataDirectory = new File( "./temp" );
+    }
+
+    /**
+     * @see junit.framework.TestCase#setUp()
+     */
+    protected void setUp() throws Exception
+    {
+        CryptoStreamFactoryImpl factory = new CryptoStreamFactoryImpl(
+            CryptoParameters.SALT,
+            CryptoParameters.COUNT
+            );
+
+        CryptoStreamFactoryImpl.setInstance( factory );
+    }
+
+    /**
+     * @return Returns the password.
+     */
+    protected char[] getPassword()
+    {
+        return password.toCharArray();
+    }
+
+    /**
+     * @return Returns the tempDataDirectory.
+     */
+    protected File getTempDataDirectory()
+    {
+        return tempDataDirectory;
+    }
+
+    /**
+     * @return Returns the testDataDirectory.
+     */
+    protected File getTestDataDirectory()
+    {
+        return testDataDirectory;
+    }
+
+    public void testSmartEmtpyDecryption() throws Exception
+    {
+        this.testSmartDecryption("empty.txt","ISO-8859-1");
+    }
+
+    public void testSmartTextDecryption() throws Exception
+    {
+        this.testSmartDecryption("plain.txt","ISO-8859-1");
+    }
+
+    public void testSmartGroovyDecryption() throws Exception
+    {
+        this.testSmartDecryption("plain.groovy","ISO-8859-1");
+    }
+
+    public void testSmartXmlIso8859Utf8Decryption() throws Exception
+    {
+        this.testSmartDecryption("plain-iso-8859-1.xml","ISO-8859-1");
+    }
+
+    public void testSmartXmlUtf8Decryption() throws Exception
+    {
+        this.testSmartDecryption("plain-utf8.xml","UTF-8");
+    }
+
+    public void testSmartXmlUtf16Decryption() throws Exception
+    {
+        this.testSmartDecryption("plain-utf16.xml","UTF-16");
+    }
+
+    public void testPDFDecryption() throws Exception
+    {
+        this.testSmartDecryption("plain.pdf","ISO-8859-1");
+    }
+
+    public void testZIPDecryption() throws Exception
+    {
+        this.testSmartDecryption("plain.zip","ISO-8859-1");
+    }
+
+    /** Test smart decryption for a given file */
+    private void testSmartDecryption( String fileName, String enc ) throws Exception
+    {
+        File sourceFile = new File( this.getTestDataDirectory(), fileName );
+        String plainText = this.loadTextFile(sourceFile,enc);
+        String smartText = this.smartDecrypt(sourceFile,enc);
+        byte[] cipherText = this.encryptTextFile(sourceFile);
+        String decryptedText = this.smartDecrypt(cipherText,enc);
+
+        assertTrue( plainText.length() == smartText.length() );
+        assertTrue( plainText.length() == decryptedText.length() );
+        assertEquals( plainText, smartText );
+        assertEquals( plainText, decryptedText );
+    }
+
+    /**
+     * Loads a plain text file.
+     * @param file the file to load
+     */
+    private String loadTextFile( File file, String enc ) throws Exception
+    {
+        String result = null;
+        FileInputStream fis = new FileInputStream( file );
+        ByteArrayOutputStream baos = new ByteArrayOutputStream();
+        CryptoUtil.copy(fis,baos);
+        fis.close();
+        result = new String( baos.toByteArray(), enc );
+        return result;
+    }
+
+    /**
+     * Encrypt a plain text file.
+     * @param file the file to encrypt
+     */
+    private byte[] encryptTextFile( File file ) throws Exception
+    {
+        ByteArrayOutputStream baos = new ByteArrayOutputStream();
+        FileInputStream fis = new FileInputStream( file );
+
+        CryptoUtil.encrypt(
+            CryptoStreamFactoryImpl.getInstance(),
+            fis,
+            baos,
+            this.getPassword()
+            );
+
+        fis.close();
+
+        return baos.toByteArray();
+    }
+
+    /**
+     * Use smart decryption on a cipherText.
+     *
+     * @param cipherText the encrypted text
+     * @return the decrypeted content
+     */
+    private String smartDecrypt( byte[] cipherText, String enc ) throws Exception
+    {
+        ByteArrayInputStream bais = new ByteArrayInputStream(cipherText);
+        ByteArrayOutputStream baos = new ByteArrayOutputStream();
+
+        SmartDecryptingInputStream sdis = new SmartDecryptingInputStream(
+            CryptoStreamFactoryImpl.getInstance(),
+            bais,
+            this.getPassword()
+            );
+
+        CryptoUtil.copy(sdis,baos);
+
+        return new String( baos.toByteArray(), enc );
+    }
+
+    /**
+     * Use smart decryption on a plain text file.
+     *
+     * @param file the file to load
+     * @return the content
+     */
+    private String smartDecrypt( File file, String enc ) throws Exception
+    {
+        ByteArrayOutputStream baos = new ByteArrayOutputStream();
+        FileInputStream fis = new FileInputStream( file );
+
+        SmartDecryptingInputStream sdis = new SmartDecryptingInputStream(
+            CryptoStreamFactoryImpl.getInstance(),
+            fis,
+            this.getPassword()
+            );
+
+        CryptoUtil.copy(sdis,baos);
+        return new String( baos.toByteArray(), enc );
+    }
+
+}
diff --git a/fulcrum-yaafi-crypto-1.0.7/xdocs/changes.xml b/fulcrum-yaafi-crypto-1.0.7/xdocs/changes.xml
new file mode 100644
index 0000000..56db47f
--- /dev/null
+++ b/fulcrum-yaafi-crypto-1.0.7/xdocs/changes.xml
@@ -0,0 +1,51 @@
+<?xml version="1.0"?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements.  See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership.  The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License.  You may obtain a copy of the License at
+
+   http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied.  See the License for the
+ specific language governing permissions and limitations
+ under the License.
+-->
+<document>
+  <properties>
+    <title>Fulcrum YAAFI Crytpo Library</title>
+    <author email="siegfried.goeschl@it20one.at">Siegfried Goeschl</author>
+  </properties>
+
+  <body>
+    <release version="1.0.7" date="as in SVN">
+      <action dev="painter" type="update">
+        Simplify the HexConverter code, more Java 8 friendly
+      </action>
+      <action dev="painter" type="update">
+        Update parent pom to Turbine 5
+      </action>
+      <action dev="painter" type="update">
+        Remove references to StringBuffer
+      </action>
+      <action dev="painter" type="update">
+        Fix missing license from rat report
+      </action>
+    </release>
+    <release version="1.0.6" date="as in SVN">
+      <action dev="sgoeschl" type="update">
+        Using the official fulcrum-parent-1 pom.	
+      </action>
+      <action dev="sgoeschl" type="add">
+        Moving the code out of YAAFI and make a standalone library.
+      </action>
+    </release>
+  </body>
+</document>
+
diff --git a/fulcrum-yaafi-crypto-1.0.7/xdocs/downloads.xml b/fulcrum-yaafi-crypto-1.0.7/xdocs/downloads.xml
new file mode 100644
index 0000000..dc80df1
--- /dev/null
+++ b/fulcrum-yaafi-crypto-1.0.7/xdocs/downloads.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements.  See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership.  The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License.  You may obtain a copy of the License at
+
+   http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied.  See the License for the
+ specific language governing permissions and limitations
+ under the License.
+-->
+<document>
+  <properties>
+    <title>Fulcrum YAAFI Avalon Container</title>
+  </properties>
+  <body>
+    <section name="Downloads">
+      <p>List of available downloads.</p>
+      <table>
+        <tr>
+          <th>Download Links</th>
+          <th>Release Notes</th>
+        </tr>
+        <tr>
+          <td>
+            <a href="http://www.apache.org/dyn/closer.cgi/turbine/fulcrum/fulcrum-yaafi-crypto/binaries/fulcrum-yaafi-crypto-1.0.6-bin.zip">Fulcrum's YAAFI Crypto v1.0.6</a>
+          </td>
+          <td>
+            <a href="announcements/announcement-1.0.6.txt">1.0.6</a>
+          </td>
+        </tr>
+      </table>
+    </section>
+  </body>
+</document>
diff --git a/fulcrum-yaafi-crypto-1.0.7/xdocs/index.xml b/fulcrum-yaafi-crypto-1.0.7/xdocs/index.xml
new file mode 100644
index 0000000..47079d7
--- /dev/null
+++ b/fulcrum-yaafi-crypto-1.0.7/xdocs/index.xml
@@ -0,0 +1,123 @@
+<?xml version="1.0"?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements.  See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership.  The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License.  You may obtain a copy of the License at
+
+   http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied.  See the License for the
+ specific language governing permissions and limitations
+ under the License.
+-->
+
+<document>
+
+  <properties>
+    <title>Fulcrum Crypto Library</title>
+    <author email="siegfried.goeschl@it20one.at">Siegfried Goeschl</author>
+  </properties>
+
+  <body>
+
+    <section name="Overview">
+      <p> Fulcrum YAFFI Crypto Library is an extension library for Fulcrum YAAFI to support
+        transparent decryption of configuration files. The encryption/decryption is based on DES
+        using 56 bit key length. </p>
+    </section>
+
+    <section name="Functionality">
+      <p> This library exposes the following functionality <ul>
+          <li>password factory to create safer passwords</li>
+          <li>creation of decrypting input streams</li>
+          <li>creation of enrypting output streams</li>
+        </ul>
+      </p>
+      <subsection name="Password Creation">
+        <p> Why someone need a password factory to create safer password?! People tend to use weak
+          password vunerable to dictionary attacks. To improve the situation you have a base
+          password which you convert into the real password using the PasswordFactory. For the
+          password generation the base password is salted and repeatedly hashed to generate a UUID
+          string (which you can still manually enter on the keyboard). Furthermore the password
+          generation allows you to hide the "real" password in the case that you need to store your
+          password directly in your code or configuration.<table>
+            <tr>
+              <td>Base Text Password</td>
+              <td>Computed Text Password</td>
+            </tr>
+            <tr>
+              <td>fulcrum-yaafi</td>
+              <td>727a-98b9-93be-4537c</td>
+            </tr>
+            <tr>
+              <td>mysecret</td>
+              <td>62cc-bf14-1814-672da</td>
+            </tr>
+          </table>
+        </p>
+      </subsection>
+      <subsection name="Decrypting InputStreams">
+        <p> A decrypting input stream allows to apply transparent decryption of an input stream.
+          Transparently also means that the implementation is able to look at the content to decide
+          if it is encrypted at all - this is a so-called "SmartDecryptingInputStream". </p>
+      </subsection>
+      <subsection name="Encrypting OutputStreams">
+        <p> A encrypting output stream allows to apply transparent encryption of an output stream.
+        </p>
+      </subsection>
+    </section>
+
+    <section name="Cryptography Support">
+      <subsection name="JDK Support">
+        <table>
+          <tr>
+            <td>JDK 1.3.x</td>
+            <td> For JDK 1.3.x the <a href="http://java.sun.com/products/jce/index-122.html"> Java
+                Cryptography Extension (JCE) 1.2.2</a> needs to be installed. Furthermore you need
+              to add the jce1_2_2.jar to your Maven repository and project.xml </td>
+          </tr>
+          <tr>
+            <td>JDK 1.4.x</td>
+            <td> The current JDK's have the JCA built-in therefore no extra configuration is
+              required. </td>
+          </tr>
+          <tr>
+            <td>JDK 1.5.x</td>
+            <td> The current JDK's have the JCA built-in therefore no extra configuration is
+              required. </td>
+          </tr>
+          <tr>
+            <td>JDK 1.6.x</td>
+            <td> The current JDK's have the JCA built-in therefore no extra configuration is
+              required. </td>
+          </tr>
+        </table>
+      </subsection>
+      <subsection name="Availabe Algorithms">
+        <table>
+          <tr>
+            <th>Provider Version</th>
+            <th>Algorithms</th>
+          </tr>
+          <tr>
+            <td>SunJCE 1.22</td>
+            <td>PBEWithMD5AndDES</td>
+          </tr>
+          <tr>
+            <td>SunJCE 1.42</td>
+            <td> PBEWithMD5AndDES </td>
+          </tr>
+        </table>
+      </subsection>
+    </section>
+
+  </body>
+
+</document>

[turbine-fulcrum-yaafi-crypto] 07/11: Not sure why the code got duplicated within the tagged version, but I am deleting it. Hopefully this won't impact our vote

Posted by gk...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

gk pushed a commit to tag fulcrum-yaafi-crypto-1.0.7
in repository https://gitbox.apache.org/repos/asf/turbine-fulcrum-yaafi-crypto.git

commit d4f107c59b5d164300c3d41c4d87131b40268f0d
Author: Jeffery Painter <pa...@apache.org>
AuthorDate: Thu Nov 8 20:58:11 2018 +0000

    Not sure why the code got duplicated within the tagged version, but I am deleting it.  Hopefully this won't impact our vote
    
    
    git-svn-id: https://svn.apache.org/repos/asf/turbine/fulcrum/tags/fulcrum-yaafi-crypto-1.0.7@1846194 13f79535-47bb-0310-9956-ffa450edef68
---
 fulcrum-yaafi-crypto-1.0.7/LICENSE.txt             | 202 ------
 fulcrum-yaafi-crypto-1.0.7/NOTICE.txt              |   6 -
 fulcrum-yaafi-crypto-1.0.7/pom.xml                 |  73 ---
 .../fulcrum/jce/crypto/CryptoParameters.java       |  42 --
 .../fulcrum/jce/crypto/CryptoStreamFactory.java    | 136 ----
 .../jce/crypto/CryptoStreamFactoryImpl.java        | 326 ----------
 .../org/apache/fulcrum/jce/crypto/CryptoUtil.java  | 225 -------
 .../apache/fulcrum/jce/crypto/HexConverter.java    |  72 ---
 .../apache/fulcrum/jce/crypto/PasswordFactory.java | 181 ------
 .../fulcrum/jce/crypto/PasswordParameters.java     |  46 --
 .../jce/crypto/SmartDecryptingInputStream.java     | 381 -----------
 .../org/apache/fulcrum/jce/crypto/StreamUtil.java  | 186 ------
 .../resources/announcements/announcement-1.0.6.txt |   1 -
 fulcrum-yaafi-crypto-1.0.7/src/site/site.xml       |  31 -
 fulcrum-yaafi-crypto-1.0.7/src/test/data/empty.txt |   0
 .../src/test/data/plain-iso-8859-1.xml             |  56 --
 .../src/test/data/plain-utf16.xml                  | Bin 4372 -> 0 bytes
 .../src/test/data/plain-utf8.xml                   |  56 --
 .../src/test/data/plain.groovy                     |  44 --
 fulcrum-yaafi-crypto-1.0.7/src/test/data/plain.pdf | 716 ---------------------
 fulcrum-yaafi-crypto-1.0.7/src/test/data/plain.txt | 254 --------
 fulcrum-yaafi-crypto-1.0.7/src/test/data/plain.xml |  56 --
 fulcrum-yaafi-crypto-1.0.7/src/test/data/plain.zip | Bin 38862 -> 0 bytes
 .../apache/fulcrum/jce/crypto/CryptoUtilTest.java  | 302 ---------
 .../test/org/apache/fulcrum/jce/crypto/Main.java   | 181 ------
 .../org/apache/fulcrum/jce/crypto/MainTest.java    |  81 ---
 .../jce/crypto/SmartDecryptingInputStreamTest.java | 231 -------
 fulcrum-yaafi-crypto-1.0.7/xdocs/changes.xml       |  51 --
 fulcrum-yaafi-crypto-1.0.7/xdocs/downloads.xml     |  43 --
 fulcrum-yaafi-crypto-1.0.7/xdocs/index.xml         | 123 ----
 30 files changed, 4102 deletions(-)

diff --git a/fulcrum-yaafi-crypto-1.0.7/LICENSE.txt b/fulcrum-yaafi-crypto-1.0.7/LICENSE.txt
deleted file mode 100644
index d645695..0000000
--- a/fulcrum-yaafi-crypto-1.0.7/LICENSE.txt
+++ /dev/null
@@ -1,202 +0,0 @@
-
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-   APPENDIX: How to apply the Apache License to your work.
-
-      To apply the Apache License to your work, attach the following
-      boilerplate notice, with the fields enclosed by brackets "[]"
-      replaced with your own identifying information. (Don't include
-      the brackets!)  The text should be enclosed in the appropriate
-      comment syntax for the file format. We also recommend that a
-      file or class name and description of purpose be included on the
-      same "printed page" as the copyright notice for easier
-      identification within third-party archives.
-
-   Copyright [yyyy] [name of copyright owner]
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
diff --git a/fulcrum-yaafi-crypto-1.0.7/NOTICE.txt b/fulcrum-yaafi-crypto-1.0.7/NOTICE.txt
deleted file mode 100644
index 0a2d75a..0000000
--- a/fulcrum-yaafi-crypto-1.0.7/NOTICE.txt
+++ /dev/null
@@ -1,6 +0,0 @@
-Turbine Fulcrum ServiceManager
-Copyright 2002-2007 The Apache Software Foundation.
-
-This product includes software developed at
-The Apache Software Foundation (http://www.apache.org/).
-
diff --git a/fulcrum-yaafi-crypto-1.0.7/pom.xml b/fulcrum-yaafi-crypto-1.0.7/pom.xml
deleted file mode 100644
index f3a50ae..0000000
--- a/fulcrum-yaafi-crypto-1.0.7/pom.xml
+++ /dev/null
@@ -1,73 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
-   Licensed to the Apache Software Foundation (ASF) under one or more
-   contributor license agreements.  See the NOTICE file distributed with
-   this work for additional information regarding copyright ownership.
-   The ASF licenses this file to You under the Apache License, Version 2.0
-   (the "License"); you may not use this file except in compliance with
-   the License.  You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
-
--->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-  <parent>
-    <artifactId>turbine-parent</artifactId>
-       <groupId>org.apache.turbine</groupId>
-       <version>5</version>
-  </parent>
-
-  <modelVersion>4.0.0</modelVersion>
-  <artifactId>fulcrum-yaafi-crypto</artifactId>
-  <groupId>org.apache.fulcrum</groupId>
-  <version>1.0.7</version>
-  <name>Fulcrum YAAFI Crypto</name>
-  <inceptionYear>2008</inceptionYear>
-  <description>Fulcrum YAAFI Crypto Library</description>
-  <url>http://turbine.apache.org/fulcrum/fulcrum-yaafi-crytpo</url>
-		
-  <scm>
-    <connection>scm:svn:http://svn.apache.org/repos/asf/turbine/fulcrum/tags/fulcrum-yaafi-crypto-1.0.7</connection>
-    <developerConnection>scm:svn:https://svn.apache.org/repos/asf/turbine/fulcrum/tags/fulcrum-yaafi-crypto-1.0.7</developerConnection>
-    <url>http://svn.apache.org/viewvc/turbine/fulcrum/tags/fulcrum-yaafi-crypto-1.0.7</url>
-  </scm>
-	
-  <developers>
-    <developer>
-      <name>Siegfried Goeschl</name>
-      <id>sgoeschl</id>
-      <email>sgoeschl@apache.org</email>
-      <organization />
-      <roles>
-        <role>Java Developer</role>
-      </roles>
-    </developer>
-  </developers>
-
-  <dependencies>
-    <!-- testing dependencies -->
-    <dependency>
-      <groupId>junit</groupId>
-      <artifactId>junit</artifactId>
-      <version>4.12</version>
-      <scope>test</scope>
-    </dependency>
-  </dependencies>
-
-  <build>
-    <sourceDirectory>${basedir}/src/java</sourceDirectory>
-    <testSourceDirectory>${basedir}/src/test</testSourceDirectory>
-  </build>
-  
-  <properties>
-    <turbine.site.path>fulcrum/fulcrum-yaafi-crypto</turbine.site.path>
-  </properties>  
-	
-</project>
diff --git a/fulcrum-yaafi-crypto-1.0.7/src/java/org/apache/fulcrum/jce/crypto/CryptoParameters.java b/fulcrum-yaafi-crypto-1.0.7/src/java/org/apache/fulcrum/jce/crypto/CryptoParameters.java
deleted file mode 100644
index 9ee3eb3..0000000
--- a/fulcrum-yaafi-crypto-1.0.7/src/java/org/apache/fulcrum/jce/crypto/CryptoParameters.java
+++ /dev/null
@@ -1,42 +0,0 @@
-package org.apache.fulcrum.jce.crypto;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-
-/**
- * CryptoParameters used for encryption/decrytpion.
- *
- * @author <a href="mailto:siegfried.goeschl@it20one.at">Siegfried Goeschl</a>
- */
-
-public interface CryptoParameters
-{
-    /** Parameter for PBEParameterSpec */
-    int COUNT = 20;
-
-    /** The password salt */
-    byte[] SALT = {
-        (byte)0xc7, (byte)0x73, (byte)0x21, (byte)0x8c,
-        (byte)0x7e, (byte)0xc8, (byte)0xee, (byte)0x99
-        };
-
-    /** The crypto algorithm being used */
-    String ALGORITHM = "PBEWithMD5AndDES";
-}
diff --git a/fulcrum-yaafi-crypto-1.0.7/src/java/org/apache/fulcrum/jce/crypto/CryptoStreamFactory.java b/fulcrum-yaafi-crypto-1.0.7/src/java/org/apache/fulcrum/jce/crypto/CryptoStreamFactory.java
deleted file mode 100644
index 34e55a3..0000000
--- a/fulcrum-yaafi-crypto-1.0.7/src/java/org/apache/fulcrum/jce/crypto/CryptoStreamFactory.java
+++ /dev/null
@@ -1,136 +0,0 @@
-package org.apache.fulcrum.jce.crypto;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.security.GeneralSecurityException;
-
-/**
- * Interface for creating encrypting/decrypting streams. 
- *
- * @author <a href="mailto:siegfried.goeschl@it20one.at">Siegfried Goeschl </a>
- */
-
-public interface CryptoStreamFactory
-{
-    /**
-     * Creates input stream based on the decryption mode
-     * using the default password.
-     *
-     * @param is the input stream to be wrapped
-     * @param decryptionMode the decryption mode (true|false|auto)
-     * @return an decrypting input stream
-     * @throws GeneralSecurityException creating the input stream failed
-     * @throws IOException creating the input stream failed
-     */
-    InputStream getInputStream(InputStream is, String decryptionMode)
-        throws GeneralSecurityException, IOException;
-
-    /**
-     * Creates input stream based on the decryption mode
-     * using the given password.
-     *
-     * @param is the input stream to be wrapped
-     * @param decryptionMode the decryption mode (true|false|auto)
-     * @param password the password to be used
-     * @return an decrypting input stream
-     * @throws GeneralSecurityException creating the input stream failed
-     * @throws IOException creating the input stream failed
-     */
-    InputStream getInputStream(InputStream is, String decryptionMode, char[] password)
-        throws GeneralSecurityException, IOException;
-
-    /**
-     * Creates a decrypting input stream using the default password.
-     *
-     * @param is the input stream to be wrapped
-     * @return an decrypting input stream
-     * @throws GeneralSecurityException creating the input stream failed
-     * @throws IOException creating the input stream failed
-     */
-    InputStream getInputStream(InputStream is)
-        throws GeneralSecurityException, IOException;
-
-    /**
-     * Creates an decrypting input stream using a given password.
-     *
-     * @param is the input stream to be wrapped
-     * @param password the password to be used
-     * @return an decrypting input stream
-     * @throws GeneralSecurityException creating the input stream failed
-     * @throws IOException creating the input stream failed
-     */
-    InputStream getInputStream(InputStream is, char[] password)
-        throws GeneralSecurityException, IOException;
-
-    /**
-     * Creates a smart decrypting input stream using the default
-     * password. The implementation looks at the binary content
-     * to decide if it was encrypted or not thereby providing
-     * transparent access to encrypted/unencrypted files.
-     *
-     * @param is the input stream to be wrapped
-     * @return an decrypting input stream
-     * @throws GeneralSecurityException creating the input stream failed
-     * @throws IOException creating the input stream failed
-     */
-    InputStream getSmartInputStream(InputStream is)
-        throws GeneralSecurityException, IOException;
-
-    /**
-     * Creates a smart decrypting input stream using a given
-     * password. The implementation looks at the binary content
-     * to decide if it was encrypted or not thereby providing
-     * transparent access to encrypted/unencrypted files.
-     *
-     * @param is the input stream to be wrapped
-     * @param password the password to be used
-     * @return an decrypting input stream
-     * @throws GeneralSecurityException creating the input stream failed
-     * @throws IOException creating the input stream failed
-     */
-    InputStream getSmartInputStream(InputStream is, char[] password)
-        throws GeneralSecurityException, IOException;
-
-    /**
-     * Creates an encrypting output stream using the default password.
-     *
-     * @param os the output stream to be wrapped
-     * @return an decrypting input stream
-     * @throws GeneralSecurityException creating the ouptut stream failed
-     * @throws IOException creating the ouptut stream failed
-     */
-    OutputStream getOutputStream(OutputStream os)
-        throws GeneralSecurityException, IOException;
-
-    /**
-     * Creates an encrypting output stream using the given password.
-     *
-     * @param os the output stream to be wrapped
-     * @param password the password to be used
-     * @return an decrypting input stream
-     * @throws GeneralSecurityException creating the ouptut stream failed
-     * @throws IOException creating the ouptut stream failed
-     */
-    OutputStream getOutputStream(OutputStream os, char[] password)
-        throws GeneralSecurityException, IOException;
-}
diff --git a/fulcrum-yaafi-crypto-1.0.7/src/java/org/apache/fulcrum/jce/crypto/CryptoStreamFactoryImpl.java b/fulcrum-yaafi-crypto-1.0.7/src/java/org/apache/fulcrum/jce/crypto/CryptoStreamFactoryImpl.java
deleted file mode 100644
index 2449cf4..0000000
--- a/fulcrum-yaafi-crypto-1.0.7/src/java/org/apache/fulcrum/jce/crypto/CryptoStreamFactoryImpl.java
+++ /dev/null
@@ -1,326 +0,0 @@
-package org.apache.fulcrum.jce.crypto;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.security.GeneralSecurityException;
-import java.security.Key;
-
-import javax.crypto.Cipher;
-import javax.crypto.CipherInputStream;
-import javax.crypto.CipherOutputStream;
-import javax.crypto.SecretKeyFactory;
-import javax.crypto.spec.PBEKeySpec;
-import javax.crypto.spec.PBEParameterSpec;
-
-/**
- * Concrete factory for creating encrypting/decrypting streams. The
- * implementation uses the JCA (Java Crypto Extension) supplied
- * by SUN (using SunJCE 1.42).
- *
- * The implementation uses as PBEWithMD5AndDES for encryption which
- * should be sufficent for most applications.
- *
- * The implementation also supplies a default password in the case that
- * the programmer don't want to have additional hassles. It is easy to
- * reengineer the password being used but much better than a hard-coded
- * password in the application.
- *
- * The code uses parts from Markus Hahn's Blowfish library found at
- * http://blowfishj.sourceforge.net/
- *
- * @author <a href="mailto:siegfried.goeschl@it20one.at">Siegfried Goeschl </a>
- * @author <a href="mailto:maakus@earthlink.net">Markus Hahn</a>
- */
-
-public final class CryptoStreamFactoryImpl implements CryptoStreamFactory
-{
-    /** the salt for the PBE algorithm */
-    private byte[] salt;
-
-    /** the count paramter for the PBE algorithm */
-    private int count;
-
-    /** the name of the JCE provider */
-    private String providerName;
-
-    /** the algorithm to use */
-    private String algorithm;
-
-    /** the default instance */
-    private static CryptoStreamFactory instance;
-
-    /**
-     * The JCE provider name known to work. If the value
-     * is set to null an appropriate provider will be
-     * used.
-     */
-    private static final String PROVIDERNAME = null;
-
-    /**
-     * Factory method to get a default instance
-     * @return an instance of the CryptoStreamFactory
-     */
-    public synchronized static CryptoStreamFactory getInstance()
-    {
-        if( CryptoStreamFactoryImpl.instance == null )
-        {
-            CryptoStreamFactoryImpl.instance = new CryptoStreamFactoryImpl();
-        }
-
-        return CryptoStreamFactoryImpl.instance;
-    }
-
-    /**
-     * Set the default instance from an external application.
-     * @param instance the new default instance
-     */
-    public static void setInstance( CryptoStreamFactory instance )
-    {
-        CryptoStreamFactoryImpl.instance = instance;
-    }
-
-    /**
-     * Constructor
-     */
-    public CryptoStreamFactoryImpl()
-    {
-        this.salt = CryptoParameters.SALT;
-        this.count = CryptoParameters.COUNT;
-        this.providerName = PROVIDERNAME;
-        this.algorithm = CryptoParameters.ALGORITHM;
-    }
-
-    /**
-     * Constructor
-     *
-     * @param salt the salt for the PBE algorithm
-     * @param count the iteration for PBEParameterSpec
-     */
-    public CryptoStreamFactoryImpl( byte[] salt, int count)
-    {
-        this.salt = salt;
-        this.count = count;
-        this.providerName = PROVIDERNAME;
-        this.algorithm = CryptoParameters.ALGORITHM;
-    }
-
-
-    /**
-     * @see org.apache.fulcrum.jce.crypto.CryptoStreamFactory#getInputStream(java.io.InputStream, String)
-     */
-    public InputStream getInputStream(InputStream is, String decryptionMode) throws GeneralSecurityException, IOException {
-
-        InputStream result = null;
-
-        if( "auto".equalsIgnoreCase(decryptionMode) )
-        {
-            result = CryptoStreamFactoryImpl.getInstance().getSmartInputStream(is);
-        }
-        else if( "true".equalsIgnoreCase(decryptionMode) )
-        {
-            result = CryptoStreamFactoryImpl.getInstance().getInputStream(is);
-        }
-        else
-        {
-            result = is;
-        }
-        return result;
-    }
-
-    /**
-     * @see org.apache.fulcrum.jce.crypto.CryptoStreamFactory#getInputStream(java.io.InputStream, String, char[])
-     */
-    public InputStream getInputStream(InputStream is, String decryptionMode, char[] password) throws GeneralSecurityException, IOException {
-
-        InputStream result = null;
-
-        if( "auto".equalsIgnoreCase(decryptionMode) )
-        {
-            result = CryptoStreamFactoryImpl.getInstance().getSmartInputStream(is, password);
-        }
-        else if( "true".equalsIgnoreCase(decryptionMode) )
-        {
-            result = CryptoStreamFactoryImpl.getInstance().getInputStream(is, password);
-        }
-        else
-        {
-            result = is;
-        }
-        return result;
-    }
-
-    /**
-     * @see org.apache.fulcrum.jce.crypto.CryptoStreamFactory#getInputStream(java.io.InputStream)
-     */
-    public InputStream getInputStream( InputStream is )
-        throws GeneralSecurityException, IOException
-    {
-        Cipher cipher = this.createCipher( Cipher.DECRYPT_MODE, PasswordFactory.create() );
-        return new CipherInputStream( is, cipher );
-    }
-
-    /**
-     * @see org.apache.fulcrum.jce.crypto.CryptoStreamFactory#getInputStream(java.io.InputStream,char[])
-     */
-    public InputStream getInputStream( InputStream is, char[] password )
-        throws GeneralSecurityException, IOException
-    {
-        Cipher cipher = this.createCipher( Cipher.DECRYPT_MODE, password );
-        return new CipherInputStream( is, cipher );
-    }
-
-    /**
-     * @see org.apache.fulcrum.jce.crypto.CryptoStreamFactory#getSmartInputStream(java.io.InputStream)
-     */
-    public InputStream getSmartInputStream(InputStream is)
-        throws GeneralSecurityException, IOException
-    {
-        return this.getSmartInputStream(
-            is,
-            PasswordFactory.create()
-            );
-    }
-
-    /**
-     * @see org.apache.fulcrum.jce.crypto.CryptoStreamFactory#getSmartInputStream(java.io.InputStream,char[])
-     */
-    public InputStream getSmartInputStream(InputStream is, char[] password )
-        throws GeneralSecurityException, IOException
-    {
-        SmartDecryptingInputStream result;
-
-        result = new SmartDecryptingInputStream(
-            getInstance(),
-            is,
-            password
-            );
-
-        return result;
-    }
-
-    /**
-     * @see org.apache.fulcrum.jce.crypto.CryptoStreamFactory#getOutputStream(java.io.OutputStream)
-     */
-    public OutputStream getOutputStream( OutputStream os )
-        throws GeneralSecurityException, IOException
-    {
-        Cipher cipher = this.createCipher( Cipher.ENCRYPT_MODE, PasswordFactory.create() );
-        return new CipherOutputStream( os, cipher );    }
-
-    /**
-     * @see org.apache.fulcrum.jce.crypto.CryptoStreamFactory#getOutputStream(java.io.OutputStream, char[])
-     */
-    public OutputStream getOutputStream( OutputStream os, char[] password )
-        throws GeneralSecurityException, IOException
-    {
-        Cipher cipher = this.createCipher( Cipher.ENCRYPT_MODE, password );
-        return new CipherOutputStream( os, cipher );
-    }
-
-    /**
-     * @return Returns the algorithm.
-     */
-    private String getAlgorithm()
-    {
-        return algorithm;
-    }
-
-    /**
-     * @return Returns the count.
-     */
-    private int getCount()
-    {
-        return count;
-    }
-
-    /**
-     * @return Returns the providerName.
-     */
-    private String getProviderName()
-    {
-        return providerName;
-    }
-
-    /**
-     * @return Returns the salt.
-     */
-    private byte [] getSalt()
-    {
-        return salt;
-    }
-
-    /**
-     * Create a PBE key.
-     *
-     * @param password the password to use.
-     * @return the key
-     * @throws GeneralSecurityException creating the key failed
-     */
-    private Key createKey( char[] password )
-        throws GeneralSecurityException
-    {
-        SecretKeyFactory keyFactory;
-        String algorithm = this.getAlgorithm();
-        PBEKeySpec keySpec =  new PBEKeySpec(password);
-
-        if( this.getProviderName() == null )
-        {
-            keyFactory = SecretKeyFactory.getInstance( algorithm );
-        }
-        else
-        {
-            keyFactory = SecretKeyFactory.getInstance( algorithm, this.getProviderName() );
-        }
-
-        return keyFactory.generateSecret(keySpec);
-    }
-
-    /**
-     * Create a Cipher.
-     *
-     * @param mode the cipher mode
-     * @param password the password
-     * @return an instance of a cipher
-     * @throws GeneralSecurityException creating a cipher failed
-     * @throws IOException creating a cipher failed
-     */
-    private Cipher createCipher( int mode, char[] password )
-        throws GeneralSecurityException, IOException
-    {
-        Cipher cipher;
-        PBEParameterSpec paramSpec = new PBEParameterSpec( this.getSalt(), this.getCount() );
-        Key key = this.createKey( password );
-
-        if( this.getProviderName() == null )
-        {
-            cipher = Cipher.getInstance( this.getAlgorithm() );
-        }
-        else
-        {
-            cipher = Cipher.getInstance( this.getAlgorithm(), this.getProviderName() );
-        }
-
-        cipher.init( mode, key, paramSpec );
-        return cipher;
-    }
-}
diff --git a/fulcrum-yaafi-crypto-1.0.7/src/java/org/apache/fulcrum/jce/crypto/CryptoUtil.java b/fulcrum-yaafi-crypto-1.0.7/src/java/org/apache/fulcrum/jce/crypto/CryptoUtil.java
deleted file mode 100644
index 153d905..0000000
--- a/fulcrum-yaafi-crypto-1.0.7/src/java/org/apache/fulcrum/jce/crypto/CryptoUtil.java
+++ /dev/null
@@ -1,225 +0,0 @@
-package org.apache.fulcrum.jce.crypto;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.security.GeneralSecurityException;
-
-/**
- * Helper class to provde generic functions to work with CryptoStreams.
- *
- * The code uses parts from Markus Hahn's Blowfish library found at
- * http://blowfishj.sourceforge.net/
- *
- * @author <a href="mailto:siegfried.goeschl@it20one.at">Siegfried Goeschl </a>
- * @author <a href="mailto:maakus@earthlink.net">Markus Hahn</a>
- */
-
-public final class CryptoUtil
-{
-    /**
-     * Copies from a source to a target object using encryption
-     *
-     * @param source the source object
-     * @param target the target object
-     * @param password the password to use for encryption
-     * @throws GeneralSecurityException accessing JCE failed
-     * @throws IOException accessing the souce failed
-     *
-     */
-    public static void encrypt( Object source, Object target, char[] password )
-        throws GeneralSecurityException, IOException
-    {
-        CryptoUtil.encrypt(
-            CryptoUtil.getCryptoStreamFactory(),
-            source,
-            target,
-            password
-            );
-    }
-
-    /**
-     * Copies from a source to a target object using encryption and a
-     * caller supplied CryptoStreamFactory.
-     *
-     * @param factory the factory to create the crypto streams
-     * @param source the source object
-     * @param target the target object
-     * @param password the password to use for encryption
-     * @throws GeneralSecurityException accessing JCE failed
-     * @throws IOException accessing the souce failed
-     */
-    public static void encrypt(
-        CryptoStreamFactory factory, Object source, Object target, char[] password )
-        throws GeneralSecurityException, IOException
-    {
-        InputStream is = StreamUtil.createInputStream( source );
-        OutputStream os = StreamUtil.createOutputStream( target );
-        OutputStream eos = factory.getOutputStream( os, password );
-        StreamUtil.copy( is, eos );
-    }
-
-    /**
-     * Copies from a source to a target object using decryption.
-     *
-     * @param source the source object
-     * @param target the target object
-     * @param password the password to use for decryption
-     * @throws GeneralSecurityException accessing JCE failed
-     * @throws IOException accessing the souce failed
-     */
-    public static void decrypt( Object source, Object target, char[] password )
-        throws GeneralSecurityException, IOException
-    {
-        CryptoUtil.decrypt(
-            CryptoUtil.getCryptoStreamFactory(),
-            source,
-            target,
-            password
-            );
-    }
-
-    /**
-     * Copies from a source to a target object using decryption and a
-     * caller-suppier CryptoStreamFactory.
-     *
-     * @param factory the factory to create the crypto streams
-     * @param source the source object
-     * @param target the target object
-     * @param password the password to use for decryption
-     * @throws GeneralSecurityException accessing JCE failed
-     * @throws IOException accessing the souce failed
-     */
-    public static void decrypt(
-        CryptoStreamFactory factory, Object source, Object target, char[] password )
-        throws GeneralSecurityException, IOException
-    {
-        InputStream is = StreamUtil.createInputStream( source );
-        OutputStream os = StreamUtil.createOutputStream( target );
-        InputStream dis = factory.getInputStream( is, password );
-        StreamUtil.copy( dis, os );
-    }
-
-    /**
-     * Encrypts a string into a hex string.
-     *
-     * @param plainText the plain text to be encrypted
-     * @param password the password for encryption
-     * @return the encrypted string
-     * @throws GeneralSecurityException accessing JCE failed
-     * @throws IOException accessing the souce failed
-     */
-    public static String encryptString( String plainText, char[] password )
-        throws GeneralSecurityException, IOException
-    {
-        return CryptoUtil.encryptString(
-            CryptoUtil.getCryptoStreamFactory(),
-            plainText,
-            password
-            );
-    }
-
-    /**
-     * Encrypts a string into a hex string.
-     *
-     * @param factory the factory to create the crypto streams
-     * @param plainText the plain text to be encrypted
-     * @param password the password for encryption
-     * @return the encrypted string
-     * @throws GeneralSecurityException accessing JCE failed
-     * @throws IOException accessing the souce failed
-     */
-    public static String encryptString(
-        CryptoStreamFactory factory, String plainText, char[] password )
-        throws GeneralSecurityException, IOException
-    {
-        ByteArrayOutputStream bais = new ByteArrayOutputStream();
-        CryptoUtil.encrypt( factory, plainText, bais, password );
-        return HexConverter.toString( bais.toByteArray() );
-    }
-
-    /**
-     * Decrypts an encrypted string into the plain text. The encrypted
-     * string must be a hex string created by encryptString.
-     *
-     * @param cipherText the encrypted text to be decrypted
-     * @param password the password for decryption
-     * @return the decrypted string
-     * @throws GeneralSecurityException accessing JCE failed
-     * @throws IOException accessing the souce failed
-     */
-    public static String decryptString( String cipherText, char[] password )
-        throws GeneralSecurityException, IOException
-    {
-        return CryptoUtil.decryptString(
-            CryptoUtil.getCryptoStreamFactory(),
-            cipherText,
-            password
-            );
-    }
-
-    /**
-     * Decrypts an encrypted string into the plain text. The encrypted
-     * string must be a hex string created by encryptString.
-     *
-     * @param factory the factory to create the crypto streams
-     * @param cipherText the encrypted text to be decrypted
-     * @param password the password for decryption
-     * @return the decrypted string
-     * @throws GeneralSecurityException accessing JCE failed
-     * @throws IOException accessing the souce failed
-     */
-    public static String decryptString(
-        CryptoStreamFactory factory, String cipherText, char[] password )
-        throws GeneralSecurityException, IOException
-    {
-        byte[] buffer = HexConverter.toBytes( cipherText );
-        ByteArrayOutputStream bais = new ByteArrayOutputStream();
-        CryptoUtil.decrypt( factory, buffer, bais, password );
-        return new String( bais.toByteArray(), "utf-8" );
-    }
-
-    /**
-     * Pumps the input stream to the output stream.
-     *
-     * @param is the source input stream
-     * @param os the target output stream
-     * @return the number of bytes copied
-     * @throws IOException the copying failed
-     * @deprecated use StreamUtil instead
-     */
-    public static long copy( InputStream is, OutputStream os )
-        throws IOException
-    {
-        return StreamUtil.copy(is, os);
-    }
-
-    /**
-     * @return the CryptoStreamFactory to be used
-     */
-    public static CryptoStreamFactory getCryptoStreamFactory()
-    {
-        return CryptoStreamFactoryImpl.getInstance();
-    }
-}
diff --git a/fulcrum-yaafi-crypto-1.0.7/src/java/org/apache/fulcrum/jce/crypto/HexConverter.java b/fulcrum-yaafi-crypto-1.0.7/src/java/org/apache/fulcrum/jce/crypto/HexConverter.java
deleted file mode 100644
index 92aa6e1..0000000
--- a/fulcrum-yaafi-crypto-1.0.7/src/java/org/apache/fulcrum/jce/crypto/HexConverter.java
+++ /dev/null
@@ -1,72 +0,0 @@
-package org.apache.fulcrum.jce.crypto;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-/**
- * Helper class to for HEX conversion.
- *
- * @author <a href="mailto:painter@apache.org">Jeffery Painter</a>
- * @author <a href="mailto:siegfried.goeschl@it20one.at">Siegfried Goeschl</a>
- * @author <a href="mailto:maakus@earthlink.net">Markus Hahn</a>
- */
-
-public final class HexConverter
-{
-    /**
-     * Converts a byte array to a hex string.
-     *
-     * @param data the byte array
-     * @return the hex string
-     */
-    public static String toString( byte[] data )
-    {
-        return bytesToHexStr(data);
-    }
-
-    /**
-     * Converts a hex string into a byte[]
-     *
-     * @param sHex the hex string
-     * @return the byte[]
-     */
-    public static byte[] toBytes(String sHex) {
-        int len = sHex.length();
-        byte[] data = new byte[len / 2];
-        for (int i = 0; i < len; i += 2) {
-            data[i / 2] = (byte) ((Character.digit(sHex.charAt(i), 16) << 4)
-                                 + Character.digit(sHex.charAt(i+1), 16));
-        }
-        return data;
-    }    
-    
-    /**
-     * Converts a byte array to a hex string.
-     * @param data the byte array
-     * @return the hex string
-     */
-    private static String bytesToHexStr( byte[] data )
-    {
-        StringBuilder sbuf = new StringBuilder();
-        for ( byte b : data )
-        	sbuf.append( String.format("%02x", b ) );
-        return sbuf.toString();
-    }
-
-}
diff --git a/fulcrum-yaafi-crypto-1.0.7/src/java/org/apache/fulcrum/jce/crypto/PasswordFactory.java b/fulcrum-yaafi-crypto-1.0.7/src/java/org/apache/fulcrum/jce/crypto/PasswordFactory.java
deleted file mode 100644
index c96713a..0000000
--- a/fulcrum-yaafi-crypto-1.0.7/src/java/org/apache/fulcrum/jce/crypto/PasswordFactory.java
+++ /dev/null
@@ -1,181 +0,0 @@
-package org.apache.fulcrum.jce.crypto;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import java.io.UnsupportedEncodingException;
-import java.security.MessageDigest;
-import java.security.NoSuchAlgorithmException;
-
-/**
- * The implementation supplies a default password in the case that
- * the programmer don't want to have additional hassles. It is easy to
- * reengineer the password being used but much better than a hard-coded
- * password in the application.
- *
- * The code uses parts from Markus Hahn's Blowfish library found at
- * http://blowfishj.sourceforge.net/
- *
- * @author <a href="mailto:siegfried.goeschl@it20one.at">Siegfried Goeschl </a>
- * @author <a href="mailto:maakus@earthlink.net">Markus Hahn</a>
- */
-
-public class PasswordFactory implements PasswordParameters
-{
-
-    /**
-     * Create a new password
-     * 
-     * @return a default password using "xxxx-xxxx-xxxx-xxxxx"
-     * 
-     * @throws NoSuchAlgorithmException the encryption algorithm is not supported
-     * @throws UnsupportedEncodingException the requested encoding is not supported
-     */
-    public static char[] create()
-        throws NoSuchAlgorithmException, UnsupportedEncodingException
-    {
-        return create(
-            PasswordParameters.DEFAULTPASSWORD,
-            PasswordParameters.SALT,
-            PasswordParameters.COUNT
-            );
-    }
-
-    /**
-     * Create a new password using a seed
-     * 
-     * @param seed the default password supplied by the caller
-     * @return a password using "xxxx-xxxx-xxxx-xxxxx"
-     * 
-     * @throws NoSuchAlgorithmException the encryption algorithm is not supported
-     * @throws UnsupportedEncodingException the requested encoding is not supported
-     */
-    public static char[] create( String seed )
-        throws NoSuchAlgorithmException, UnsupportedEncodingException
-    {
-        return create(
-            seed.toCharArray()
-            );
-    }
-
-    /**
-     * @param seed the default password supplied by the caller
-     * @return a password using "xxxx-xxxx-xxxx-xxxxx"
-     * @throws NoSuchAlgorithmException the encryption algorithm is not supported
-     * @throws UnsupportedEncodingException the requested encoding is not supported
-     */
-    public static final char[] create( char[] seed )
-        throws NoSuchAlgorithmException, UnsupportedEncodingException
-    {
-        return create(
-            seed,
-            PasswordFactory.SALT,
-            PasswordFactory.COUNT
-            );
-    }
-
-    /**
-     * Creates a default password using "xxxx-xxxx-xxxx-xxxxx".
-     *
-     * @param salt the password salt
-     * @param password the default password
-     * @param count number of MessageDigest iterations
-     * @return the default password
-     * @throws NoSuchAlgorithmException the encryption algorithm is not supported
-     * @throws UnsupportedEncodingException the requested encoding is not supported
-     */
-    public static char [] create( char[] password, byte[] salt, int count )
-        throws NoSuchAlgorithmException, UnsupportedEncodingException
-    {
-        char [] result = null;
-        MessageDigest sha1 = MessageDigest.getInstance( "SHA1" );
-        byte [] passwordMask = new String( password ).getBytes( "UTF-8" );
-        byte [] temp = new byte[salt.length + passwordMask.length];
-        byte [] digest = null;
-
-        StringBuilder stringBuffer = new StringBuilder();
-
-        // combine the password with the salt string into a byte[9
-
-        System.arraycopy( passwordMask, 0, temp, 0, passwordMask.length );
-        System.arraycopy( salt, 0, temp, passwordMask.length, salt.length );
-
-        // create a hash over and over to make it a bit random
-
-        digest = temp;
-
-        for (int i = 0; i < count; i++)
-        {
-            sha1.update( digest );
-            digest = sha1.digest();
-        }
-
-        // build a well-formed password string to be usable
-        // by a human
-
-        long long1 = createLong( digest, 0 );
-        long long2 = createLong( digest, 4 );
-        long long3 = createLong( digest, 8 );
-        long long4 = createLong( digest, 12 );
-
-        stringBuffer.append( Long.toHexString( long1 ).substring( 0, 4 ) );
-        stringBuffer.append( '-' );
-        stringBuffer.append( Long.toHexString( long2 ).substring( 0, 4 ) );
-        stringBuffer.append( '-' );
-        stringBuffer.append( Long.toHexString( long3 ).substring( 0, 4 ) );
-        stringBuffer.append( '-' );
-        stringBuffer.append( Long.toHexString( long4 ).substring( 0, 5 ) );
-
-        // copy the password
-        result = new char[stringBuffer.length()];
-
-        for (int i = 0; i < stringBuffer.length(); i++)
-        {
-            result[i] = stringBuffer.charAt( i );
-        }
-
-        // wipe out the StringBuilder
-        for (int i = 0; i < stringBuffer.length(); i++)
-        {
-            stringBuffer.setCharAt( i, ' ' );
-        }
-
-        return result;
-    }
-
-    /**
-     * Gets bytes from an array into a long.
-     *
-     * @param buf where to get the bytes
-     * @param nOfs index from where to read the data
-     * @return the 64bit integer
-     */
-    private static long createLong(byte [] buf, int nOfs)
-    {
-        return
-            ((long)(( buf[nOfs    ]          << 24) |
-                    ((buf[nOfs + 1] & 0x0ff) << 16) |
-                    ((buf[nOfs + 2] & 0x0ff) <<  8) |
-                    ( buf[nOfs + 3] & 0x0ff       )) << 32) |
-            ((long)(( buf[nOfs + 4]          << 24) |
-                    ((buf[nOfs + 5] & 0x0ff) << 16) |
-                    ((buf[nOfs + 6] & 0x0ff) <<  8) |
-                    ( buf[nOfs + 7] & 0x0ff       )) & 0x0ffffffffL);
-    }
-}
diff --git a/fulcrum-yaafi-crypto-1.0.7/src/java/org/apache/fulcrum/jce/crypto/PasswordParameters.java b/fulcrum-yaafi-crypto-1.0.7/src/java/org/apache/fulcrum/jce/crypto/PasswordParameters.java
deleted file mode 100644
index efb5022..0000000
--- a/fulcrum-yaafi-crypto-1.0.7/src/java/org/apache/fulcrum/jce/crypto/PasswordParameters.java
+++ /dev/null
@@ -1,46 +0,0 @@
-package org.apache.fulcrum.jce.crypto;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-/**
- * Parameters for creating a password.
- *
- * @author <a href="mailto:siegfried.goeschl@it20one.at">Siegfried Goeschl</a>
- */
-
-public interface PasswordParameters
-{
-    /** Parameter for the number of SHA1 invocation */
-    int COUNT = 20;
-
-    /** The default password used for creating the internal password */
-    char[] DEFAULTPASSWORD = {
-        (char) 'f', (char) 'u', (char) 'l', (char) 'c',
-        (char) 'r', (char) 'u', (char) 'm', (char) '-',
-        (char) 'y', (char) 'a', (char) 'a', (char) 'f',
-        (char) 'i'
-        };
-
-    /** The password salt */
-    byte[] SALT = {
-        (byte)0xc6, (byte)0x74, (byte)0x81, (byte)0x8a,
-        (byte)0x7b, (byte)0xe8, (byte)0xfe, (byte)0x99
-        };
-}
diff --git a/fulcrum-yaafi-crypto-1.0.7/src/java/org/apache/fulcrum/jce/crypto/SmartDecryptingInputStream.java b/fulcrum-yaafi-crypto-1.0.7/src/java/org/apache/fulcrum/jce/crypto/SmartDecryptingInputStream.java
deleted file mode 100644
index 1521134..0000000
--- a/fulcrum-yaafi-crypto-1.0.7/src/java/org/apache/fulcrum/jce/crypto/SmartDecryptingInputStream.java
+++ /dev/null
@@ -1,381 +0,0 @@
-package org.apache.fulcrum.jce.crypto;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.security.GeneralSecurityException;
-
-
-/**
- * An input stream that determine if the originating input stream
- * was encrypted or not. This magic only works for well-known file
- * types though.
- *
- * @author <a href="mailto:siegfried.goeschl@it20one.at">Siegfried Goeschl</a>
- */
-public class SmartDecryptingInputStream extends ByteArrayInputStream
-{
-    /** The encodings to be checked for XML */
-    private static final  String[] ENCODINGS = { "ISO-8859-1", "UTF-8", "UTF-16" };
-
-    /**
-     * Constructor
-     *
-     * @param cryptoStreamFactory the CryptoStreamFactory for creating a cipher stream
-     * @param is the input stream to be decrypted
-     * @throws IOException if file not found
-     * @throws GeneralSecurityException if security check fails
-     */
-    public SmartDecryptingInputStream(
-        CryptoStreamFactory cryptoStreamFactory,
-        InputStream is )
-        throws IOException, GeneralSecurityException
-    {
-        this( cryptoStreamFactory, is, null );
-    }
-
-    /**
-     * Constructor
-     *
-     * @param cryptoStreamFactory the CryptoStreamFactory for creating a cipher stream
-     * @param is the input stream to be decrypted
-     * @param password the password for decryption
-     * 
-     * @throws IOException if file not found
-     * @throws GeneralSecurityException if security check fails 
-     */
-    public SmartDecryptingInputStream(
-        CryptoStreamFactory cryptoStreamFactory,
-        InputStream is,
-        char[] password )
-        throws IOException, GeneralSecurityException
-    {
-        super( new byte[0] );
-
-        byte[] content = null;
-        byte[] plain = null;
-
-        // store the data from the input stream
-
-        ByteArrayOutputStream baosCipher = new ByteArrayOutputStream();
-        ByteArrayOutputStream baosPlain = new ByteArrayOutputStream();
-        this.copy( is, baosCipher );
-
-        content = baosCipher.toByteArray();
-        plain = content;
-
-        if( this.isEncrypted(content) == true )
-        {
-            InputStream cis = null;
-            ByteArrayInputStream bais = new ByteArrayInputStream(content);
-
-            if( ( password != null ) && ( password.length > 0 ) )
-            {
-                cis = cryptoStreamFactory.getInputStream( bais, password );
-            }
-            else
-            {
-                cis = cryptoStreamFactory.getInputStream( bais );
-            }
-
-            copy( cis, baosPlain );
-            plain = baosPlain.toByteArray();
-        }
-
-        // initialize the inherited instance
-
-        if( plain != null )
-        {
-            this.buf = plain;
-            this.pos = 0;
-            this.count = buf.length;
-        }
-    }
-
-    /**
-     * Determine if the content is encrypted. We are
-     * using our knowledge about block lenght, check
-     * for XML, ZIP and PDF files and at the end of
-     * the day we are just guessing.
-     *
-     * @param content the data to be examined
-     * @return true if this is an encrypted file
-     * @throws IOException unable to read the content
-     */
-    private boolean isEncrypted( byte[] content )
-        throws IOException
-    {
-        if( content.length == 0 )
-        {
-            return false;
-        }
-        else if( ( content.length % 8 ) != 0 )
-        {
-            // the block length is 8 bytes - if the length
-            // is not a multipe of 8 then the content was
-            // definitely not encrypted
-            return false;
-        }
-        else if( this.isPDF(content) )
-        {
-            return false;
-        }
-        else if( this.isXML(content) )
-        {
-            return false;
-        }
-        else if( this.isZip(content) )
-        {
-            return false;
-        }
-        else if( this.isUtf16Text(content) )
-        {
-            return false;
-        }
-        else
-        {
-            for( int i=0; i<content.length; i++ )
-            {
-                // do we have control characters in it?
-
-                char ch = (char) content[i];
-
-                if( this.isAsciiControl(ch) )
-                {
-                    return true;
-                }
-            }
-
-            return false;
-        }
-    }
-
-    /**
-     * Pumps the input stream to the output stream.
-     *
-     * @param is the source input stream
-     * @param os the target output stream
-     * @return the number of bytes copied
-     * @throws IOException the copying failed
-     */
-    public long copy( InputStream is, OutputStream os )
-        throws IOException
-    {
-        byte[] buf = new byte[1024];
-        int n = 0;
-        long total = 0;
-
-        while ((n = is.read(buf)) > 0)
-        {
-            os.write(buf, 0, n);
-            total += n;
-        }
-
-        is.close();
-        os.flush();
-        os.close();
-
-        return total;
-    }
-
-    /**
-     * Count the number of occurences for the given value
-     * @param content the content to examine
-     * @param value the value to look fo
-     * @return the number of matches
-     */
-    private int count( byte[] content, byte value )
-    {
-        int result = 0;
-
-        for( int i=0; i<content.length; i++ )
-        {
-            if( content[i] == value )
-            {
-                result++;
-            }
-        }
-
-        return result;
-    }
-
-    /**
-     * Detect the BOM of an UTF-16 (mandatory) or UTF-8 document (optional)
-     * @param content the content to examine
-     * @return true if the content contains a BOM
-     */
-    private boolean hasByteOrderMark( byte[] content )
-    {
-        if( ( (content[0] == 0xFF) && (content[1] == 0xFF) ) ||
-            ( (content[0] == 0xFF) && (content[1] == 0xFF) ) )
-        {
-            return true;
-        }
-        else
-        {
-            return false;
-        }
-    }
-
-    /**
-     * Check this is a UTF-16 text document.
-     *
-     * @param content the content to examine
-     * @return true if it is a XML document
-     * @throws IOException unable to read the content
-     */
-    private boolean isUtf16Text( byte[] content ) throws IOException
-    {
-        if( content.length < 2 )
-        {
-            return false;
-        }
-
-        if( this.hasByteOrderMark( content ) )
-        {
-            // we should have plenty of 0x00 in a text file
-
-            int estimate = (content.length-2)/3;
-
-            if( this.count(content,(byte)0) > estimate )
-            {
-                return true;
-            }
-        }
-
-        return false;
-    }
-
-    /**
-     * Check various encondings to determine if "<?xml"
-     * and "?>" appears in the data.
-     *
-     * @param content the content to examine
-     * @return true if it is a XML document
-     * @throws IOException unable to read the content
-     */
-    private boolean isXML( byte[] content ) throws IOException
-    {
-        if( content.length < 3 )
-        {
-            return false;
-        }
-
-        for( int i=0; i<ENCODINGS.length; i++ )
-        {
-            String currEncoding = ENCODINGS[i];
-
-            String temp = new String( content, currEncoding );
-
-            if( ( temp.indexOf("<?xml") >= 0 ) && ( temp.indexOf("?>") > 0 ) )
-            {
-                return true;
-            }
-        }
-
-        return false;
-    }
-
-    /**
-     * Check if this is a ZIP document
-     *
-     * @param content the content to examine
-     * @return true if it is a PDF document
-     */
-
-    private boolean isZip( byte[] content )
-    {
-        if( content.length < 64 )
-        {
-            return false;
-        }
-        else
-        {
-            // A ZIP starts with Hex: "50 4B 03 04"
-
-            if( ( content[0] == (byte) 0x50 ) &&
-                ( content[1] == (byte) 0x4B ) &&
-                ( content[2] == (byte) 0x03 ) &&
-                ( content[3] == (byte) 0x04 )  )
-            {
-                return true;
-            }
-            else
-            {
-                return false;
-            }
-        }
-    }
-
-    /**
-     * Check if this is a PDF document
-     *
-     * @param content the content to examine
-     * @return true if it is a PDF document
-     * @throws IOException unable to read the content
-     */
-    private boolean isPDF(byte[] content) throws IOException
-    {
-        if( content.length < 64 )
-        {
-            return false;
-        }
-        else
-        {
-            // A PDF starts with HEX "25 50 44 46 2D 31 2E"
-
-            if( ( content[0] == (byte) 0x25 ) &&
-                ( content[1] == (byte) 0x50 ) &&
-                ( content[2] == (byte) 0x44 ) &&
-                ( content[3] == (byte) 0x46 ) &&
-                ( content[4] == (byte) 0x2D ) &&
-                ( content[5] == (byte) 0x31 ) &&
-                ( content[6] == (byte) 0x2E )  )
-            {
-                return true;
-            }
-            else
-            {
-                return false;
-            }
-        }
-    }
-
-    /**
-     * Is this an ASCII control character?
-     * @param ch the charcter
-     * @return true is this in an ASCII character
-     */
-    private boolean isAsciiControl(char ch)
-    {
-        if( ( ch >= 0x0000 ) && ( ch <= 0x001F) )
-        {
-            return true;
-        }
-        else
-        {
-            return true;
-        }
-    }
-}
diff --git a/fulcrum-yaafi-crypto-1.0.7/src/java/org/apache/fulcrum/jce/crypto/StreamUtil.java b/fulcrum-yaafi-crypto-1.0.7/src/java/org/apache/fulcrum/jce/crypto/StreamUtil.java
deleted file mode 100644
index fccd6d9..0000000
--- a/fulcrum-yaafi-crypto-1.0.7/src/java/org/apache/fulcrum/jce/crypto/StreamUtil.java
+++ /dev/null
@@ -1,186 +0,0 @@
-package org.apache.fulcrum.jce.crypto;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-
-/**
- * Helper class to provde generic stream functions.
- *
- * @author <a href="mailto:siegfried.goeschl@it20one.at">Siegfried Goeschl </a>
- */
-
-public final class StreamUtil
-{
-    /** the size of the internal buffer to copy streams */
-    private static final int BUFFER_SIZE = 1024;
-
-    /**
-     * Create an input stream supporting the following types
-     *
-     * <ul>
-     *  <li>String (using the UTF-8 encoded content)</li>
-     *  <li>File</li>
-     *  <li>byte[]</li>
-     *  <li>char[]</li>
-     *  <li>ByteArrayOutputStream</li>
-     *  <li>InputStream</li>
-     * </ul>
-     *
-     * @param source the source object
-     * @return the created input stream
-     * @throws java.io.IOException creating the input stream failed
-     */
-    public static InputStream createInputStream( Object source )
-        throws IOException
-    {
-        InputStream is;
-
-        // create an InputStream
-
-        if( source instanceof String )
-        {
-            byte[] content = ((String) source).getBytes("utf-8");
-            is = new ByteArrayInputStream( content );
-        }
-        else if( source instanceof File )
-        {
-            is = new FileInputStream( (File) source );
-        }
-        else if( source instanceof byte[] )
-        {
-            is = new ByteArrayInputStream( (byte[]) source );
-        }
-        else if( source instanceof char[] )
-        {
-            byte[] content = new String((char[])source).getBytes("utf-8");
-            is = new ByteArrayInputStream( content );
-        }
-        else if( source instanceof ByteArrayOutputStream )
-        {
-            byte[] content = ((ByteArrayOutputStream) source).toByteArray();
-            is = new ByteArrayInputStream( content );
-        }
-        else if( source instanceof InputStream )
-        {
-            is = (InputStream) source;
-        }
-        else
-        {
-            throw new IllegalArgumentException("Don't know hot to handle " + source.getClass().getName());
-        }
-
-        return is;
-    }
-
-    /**
-     * Create an output stream supporting the following types
-     *
-     * <ul>
-     *  <li>File</li>
-     *  <li>String</li>
-     *  <li>OutputStream</li>
-     * </ul>
-     *
-     * @param target the target object
-     * @return the output stream
-     * @throws java.io.IOException creating the output stream failed
-     */
-    public static OutputStream createOutputStream( Object target )
-        throws IOException
-    {
-        OutputStream os;
-
-        if( target instanceof File )
-        {
-            File currFile = (File) target;
-            createParentFile(currFile);
-            os = new FileOutputStream(currFile);
-        }
-        else if( target instanceof String )
-        {
-            File currFile = new File((String) target);
-            createParentFile(currFile);
-            os = new FileOutputStream(currFile);
-        }
-        else if( target instanceof OutputStream )
-        {
-            os = (OutputStream) target;
-        }
-        else
-        {
-            throw new IllegalArgumentException("Don't know hot to handle " + target.getClass().getName());
-        }
-
-        return os;
-    }
-
-    /**
-     * Pumps the input stream to the output stream.
-     *
-     * @param is the source input stream
-     * @param os the target output stream
-     * @return the number of bytes copied
-     * @throws java.io.IOException the copying failed
-     */
-    public static long copy( InputStream is, OutputStream os )
-        throws IOException
-    {
-        byte[] buf = new byte[BUFFER_SIZE];
-        int n = 0;
-        long total = 0;
-
-        while ((n = is.read(buf)) > 0)
-        {
-            os.write(buf, 0, n);
-            total += n;
-        }
-
-        is.close();
-
-        os.flush();
-        os.close();
-
-        return total;
-    }
-
-    /**
-     * Ensure that the parent directories exists before writing to
-     * the file.
-     * 
-     * @param currFile the file to write to
-     */
-    private static void createParentFile(File currFile)
-    {
-        File parentFile = currFile.getParentFile();
-        
-        if((parentFile != null) && !parentFile.exists())
-        {
-            parentFile.mkdirs();
-        }
-    }
-}
\ No newline at end of file
diff --git a/fulcrum-yaafi-crypto-1.0.7/src/site/resources/announcements/announcement-1.0.6.txt b/fulcrum-yaafi-crypto-1.0.7/src/site/resources/announcements/announcement-1.0.6.txt
deleted file mode 100644
index 271f730..0000000
--- a/fulcrum-yaafi-crypto-1.0.7/src/site/resources/announcements/announcement-1.0.6.txt
+++ /dev/null
@@ -1 +0,0 @@
-The fulcrum-yaafi-crypto-team is pleased to announce the fulcrum-yaafi-crypto-1.0.6.jar release!

Fulcrum YAAFI Crypto Library

Changes in this version include:

New features:
o Moving the code out of YAAFI and make a standalone library. 


Changes:
o Using the official fulcrum-parent-1 pom. 


Have fun!
-fulcrum-yaafi-crypto-team
\ No newline at end of file
diff --git a/fulcrum-yaafi-crypto-1.0.7/src/site/site.xml b/fulcrum-yaafi-crypto-1.0.7/src/site/site.xml
deleted file mode 100644
index da3532b..0000000
--- a/fulcrum-yaafi-crypto-1.0.7/src/site/site.xml
+++ /dev/null
@@ -1,31 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- Licensed to the Apache Software Foundation (ASF) under one
- or more contributor license agreements.  See the NOTICE file
- distributed with this work for additional information
- regarding copyright ownership.  The ASF licenses this file
- to you under the Apache License, Version 2.0 (the
- "License"); you may not use this file except in compliance
- with the License.  You may obtain a copy of the License at
-
-   http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing,
- software distributed under the License is distributed on an
- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- KIND, either express or implied.  See the License for the
- specific language governing permissions and limitations
- under the License.
--->
-<project xmlns="http://maven.apache.org/DECORATION/1.4.0" 
-  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xsi:schemaLocation="http://maven.apache.org/DECORATION/1.4.0 http://maven.apache.org/xsd/decoration-1.4.0.xsd"
-  name="Fulcrum YAAFI Crypto Library">
-  <body>
-    <menu name="Overview">
-      <item name="Overview"            href="/index.html"/>
-      <item name="Downloads"           href="/downloads.html"/>
-    </menu>  
-    <menu ref="reports"></menu>
-  </body>
-</project>
diff --git a/fulcrum-yaafi-crypto-1.0.7/src/test/data/empty.txt b/fulcrum-yaafi-crypto-1.0.7/src/test/data/empty.txt
deleted file mode 100644
index e69de29..0000000
diff --git a/fulcrum-yaafi-crypto-1.0.7/src/test/data/plain-iso-8859-1.xml b/fulcrum-yaafi-crypto-1.0.7/src/test/data/plain-iso-8859-1.xml
deleted file mode 100644
index 2d637b1..0000000
--- a/fulcrum-yaafi-crypto-1.0.7/src/test/data/plain-iso-8859-1.xml
+++ /dev/null
@@ -1,56 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!--
- Licensed to the Apache Software Foundation (ASF) under one
- or more contributor license agreements.  See the NOTICE file
- distributed with this work for additional information
- regarding copyright ownership.  The ASF licenses this file
- to you under the Apache License, Version 2.0 (the
- "License"); you may not use this file except in compliance
- with the License.  You may obtain a copy of the License at
-
-   http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing,
- software distributed under the License is distributed on an
- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- KIND, either express or implied.  See the License for the
- specific language governing permissions and limitations
- under the License.
--->
-
-<role-list>
-  <!-- Use minimal role entry -->
-  <role
-    name="org.apache.fulcrum.yaafi.service.servicemanager.ServiceManagerService"
-    default-class="org.apache.fulcrum.yaafi.service.servicemanager.ServiceManagerServiceImpl"
-  />
-  <!-- For the rest of the services use a full-blown role entry -->
-  <role
-    name="org.apache.fulcrum.yaafi.service.systemproperty.SystemPropertyService"
-    shorthand="SystemPropertyService"
-    default-class="org.apache.fulcrum.yaafi.service.systemproperty.SystemPropertyServiceImpl"
-    early-init="true"
-    description="�������"
-  />
-  <!--
-    This ReconfigurationService is instantiated during the first access. Until
-    then it is doing nothing.
-  -->
-  <role
-    name="org.apache.fulcrum.yaafi.service.reconfiguration.ReconfigurationService"
-    shorthand="ReconfigurationService"
-    default-class="org.apache.fulcrum.yaafi.service.reconfiguration.ReconfigurationServiceImpl"
-    early-init="false"
-    component-type="avalon"
-    component-flavour="yaafi"
-    description="Monitors the componentConfiguration.xml to reconfigure YAAFI"
-  />
-  <role
-    name="org.apache.fulcrum.yaafi.TestComponent"
-    shorthand="test"
-    default-class="org.apache.fulcrum.yaafi.TestComponentImpl"
-    early-init="true"
-    component-type="merlin"
-    description="A simple test component"
-  />
-</role-list>
diff --git a/fulcrum-yaafi-crypto-1.0.7/src/test/data/plain-utf16.xml b/fulcrum-yaafi-crypto-1.0.7/src/test/data/plain-utf16.xml
deleted file mode 100644
index 71fe210..0000000
Binary files a/fulcrum-yaafi-crypto-1.0.7/src/test/data/plain-utf16.xml and /dev/null differ
diff --git a/fulcrum-yaafi-crypto-1.0.7/src/test/data/plain-utf8.xml b/fulcrum-yaafi-crypto-1.0.7/src/test/data/plain-utf8.xml
deleted file mode 100644
index 14dd45c..0000000
--- a/fulcrum-yaafi-crypto-1.0.7/src/test/data/plain-utf8.xml
+++ /dev/null
@@ -1,56 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- Licensed to the Apache Software Foundation (ASF) under one
- or more contributor license agreements.  See the NOTICE file
- distributed with this work for additional information
- regarding copyright ownership.  The ASF licenses this file
- to you under the Apache License, Version 2.0 (the
- "License"); you may not use this file except in compliance
- with the License.  You may obtain a copy of the License at
-
-   http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing,
- software distributed under the License is distributed on an
- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- KIND, either express or implied.  See the License for the
- specific language governing permissions and limitations
- under the License.
--->
-
-<role-list>
-  <!-- Use minimal role entry -->
-  <role
-    name="org.apache.fulcrum.yaafi.service.servicemanager.ServiceManagerService"
-    default-class="org.apache.fulcrum.yaafi.service.servicemanager.ServiceManagerServiceImpl"
-  />
-  <!-- For the rest of the services use a full-blown role entry -->
-  <role
-    name="org.apache.fulcrum.yaafi.service.systemproperty.SystemPropertyService"
-    shorthand="SystemPropertyService"
-    default-class="org.apache.fulcrum.yaafi.service.systemproperty.SystemPropertyServiceImpl"
-    early-init="true"
-    description="ÜÖÄüöäß"
-  />
-  <!--
-    This ReconfigurationService is instantiated during the first access. Until
-    then it is doing nothing.
-  -->
-  <role
-    name="org.apache.fulcrum.yaafi.service.reconfiguration.ReconfigurationService"
-    shorthand="ReconfigurationService"
-    default-class="org.apache.fulcrum.yaafi.service.reconfiguration.ReconfigurationServiceImpl"
-    early-init="false"
-    component-type="avalon"
-    component-flavour="yaafi"
-    description="Monitors the componentConfiguration.xml to reconfigure YAAFI"
-  />
-  <role
-    name="org.apache.fulcrum.yaafi.TestComponent"
-    shorthand="test"
-    default-class="org.apache.fulcrum.yaafi.TestComponentImpl"
-    early-init="true"
-    component-type="merlin"
-    description="A simple test component"
-  />
-</role-list>
diff --git a/fulcrum-yaafi-crypto-1.0.7/src/test/data/plain.groovy b/fulcrum-yaafi-crypto-1.0.7/src/test/data/plain.groovy
deleted file mode 100644
index 8f7243e..0000000
--- a/fulcrum-yaafi-crypto-1.0.7/src/test/data/plain.groovy
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-import java.io.File;
-
-def getVerse() {
-    lines= []
-    lines+= ( "Karma " * 5 ) + "Chameleon,"
-    lines+= (["you come and go"] * 2).join(", ")+"."
-    lines+= "Loving would be easy if your"+
-              " colours were like my dream"
-    lines+= (["red gold and green"]*2).join(", ")+"."
-
-    verse= lines.collect { it + "\n" }
-    return verse
-}
-
-println "Writing out to file.\n"
-myFile= new File("temp/karma.txt")
-myFile.write("Karma Chameleon\n\n")
-getVerse().each { myFile.append(it) }
-
-println "\nWith line numbering ...\n"
-count=1
-myFile.eachLine { println count++ + ": " + it }
-
-println "\nAs a single string ...\n"
-println myFile.readLines().join(" | ")
-myFile.delete();
diff --git a/fulcrum-yaafi-crypto-1.0.7/src/test/data/plain.pdf b/fulcrum-yaafi-crypto-1.0.7/src/test/data/plain.pdf
deleted file mode 100644
index ba2cdb4..0000000
--- a/fulcrum-yaafi-crypto-1.0.7/src/test/data/plain.pdf
+++ /dev/null
@@ -1,716 +0,0 @@
-%PDF-1.3
-%����
-4 0 obj
-<< /Type /Info
-/Producer (FOP 0.20.5) >>
-endobj
-5 0 obj
-<< /Length 340 /Filter [ /ASCII85Decode /FlateDecode ]
- >>
-stream
-Gb!$A0i,\@&;>?.MAt:na8+`Ep0'a.QpC4s(dd:_!@8=)/`PYt[t-@>p=dDUet)KIpMTB:eOG.$,]L/a<2s&&;dj&a,Z),d$:4ob1`?J!KuX@'hH@]/\3"]j`1*F@c;L?:(361t!b#'%U;#QZ((XlFPij/jU[f)'bSE2K.Q1rc*sFS*;r@E;h1pDWq5b';lTb78\qH$MM8(V8a@$1dWIIbP4//sIU!,RB:M1a'ZndDn1[[!&F65TY(j0B'&,hEiL5GE2YBI&:L2pu(DM4PCs(CiPi9Klc5IH2omB/qOD9K%C7%%krZ:I'l+?c."n]tWFL<o*1`B$Ha"aJOqDZ~>
-endstream
-endobj
-6 0 obj
-<< /Type /Page
-/Parent 1 0 R
-/MediaBox [ 0 0 594 842 ]
-/Resources 3 0 R
-/Contents 5 0 R
->>
-endobj
-7 0 obj
-<< /Length 21 /Filter [ /ASCII85Decode /FlateDecode ]
- >>
-stream
-Garg^iGoCd!WWA\!CQ~>
-endstream
-endobj
-8 0 obj
-<< /Type /Page
-/Parent 1 0 R
-/MediaBox [ 0 0 594 842 ]
-/Resources 3 0 R
-/Contents 7 0 R
->>
-endobj
-9 0 obj
-<< /Length 997 /Filter [ /ASCII85Decode /FlateDecode ]
- >>
-stream
-Gb"/j95iNL&:j6IMS1l-FLpq]0b;^.,,#?E022tARL#nF(!oAEpK`@[]>2GRTlNO*0)<T44pLfr]Cqh.SIZNg0Fa7WismC0*CcuW1SQ9g@Y=p(36A&YlVTS<r\Hbcn%#\er2:TRr]Vij7:%P-a5e2]55@)S@D$=g\=q(5[*1N9.p"=?l[&dkEM->Gd@)!l:;d-BQ=sV-bOfO!Cn2t4,m\Ouooi`pd!G9]LOAeLaWLP[8*POa7C8qb\>sq/]$K2]_RSpjUo4B>^(\Q&G82L@o)"[f"S8<X84Z:TK6D@7Qj#)6Q5S;c96jKWi0)\5j[kMfEEg06FX^gB-.=QKoo^IA+WW>7V&5)G2bK2?E(\YY'M0a.EP9IR+$GULl[tE:W<)1(SCW#2OH>R\%](0`C.TZkBdcfqM5J`$bH;krG7![GCdhYFUZ&9k/gb.lp8$2GKo$IIY8\)edVJJUW!V/</S,Y&b;S52\)_u2<YThKO31oo\c [...]
-endstream
-endobj
-10 0 obj
-<< /Type /Page
-/Parent 1 0 R
-/MediaBox [ 0 0 594 842 ]
-/Resources 3 0 R
-/Contents 9 0 R
-/Annots 11 0 R
->>
-endobj
-11 0 obj
-[
-12 0 R
-14 0 R
-16 0 R
-18 0 R
-20 0 R
-22 0 R
-24 0 R
-26 0 R
-28 0 R
-30 0 R
-32 0 R
-]
-endobj
-12 0 obj
-<< /Type /Annot
-/Subtype /Link
-/Rect [ 68.4 667.35 88.986 657.85 ]
-/C [ 0 0 0 ]
-/Border [ 0 0 0 ]
-/A 13 0 R
-/H /I
->>
-endobj
-14 0 obj
-<< /Type /Annot
-/Subtype /Link
-/Rect [ 68.4 649.063 107.986 639.563 ]
-/C [ 0 0 0 ]
-/Border [ 0 0 0 ]
-/A 15 0 R
-/H /I
->>
-endobj
-16 0 obj
-<< /Type /Annot
-/Subtype /Link
-/Rect [ 68.4 630.776 105.355 621.276 ]
-/C [ 0 0 0 ]
-/Border [ 0 0 0 ]
-/A 17 0 R
-/H /I
->>
-endobj
-18 0 obj
-<< /Type /Annot
-/Subtype /Link
-/Rect [ 97.2 611.489 144.196 601.989 ]
-/C [ 0 0 0 ]
-/Border [ 0 0 0 ]
-/A 19 0 R
-/H /I
->>
-endobj
-20 0 obj
-<< /Type /Annot
-/Subtype /Link
-/Rect [ 97.2 592.202 163.728 582.702 ]
-/C [ 0 0 0 ]
-/Border [ 0 0 0 ]
-/A 21 0 R
-/H /I
->>
-endobj
-22 0 obj
-<< /Type /Annot
-/Subtype /Link
-/Rect [ 97.2 572.915 154.731 563.415 ]
-/C [ 0 0 0 ]
-/Border [ 0 0 0 ]
-/A 23 0 R
-/H /I
->>
-endobj
-24 0 obj
-<< /Type /Annot
-/Subtype /Link
-/Rect [ 68.4 554.628 104.822 545.128 ]
-/C [ 0 0 0 ]
-/Border [ 0 0 0 ]
-/A 25 0 R
-/H /I
->>
-endobj
-26 0 obj
-<< /Type /Annot
-/Subtype /Link
-/Rect [ 97.2 535.341 198.03 525.841 ]
-/C [ 0 0 0 ]
-/Border [ 0 0 0 ]
-/A 27 0 R
-/H /I
->>
-endobj
-28 0 obj
-<< /Type /Annot
-/Subtype /Link
-/Rect [ 97.2 516.054 196.443 506.554 ]
-/C [ 0 0 0 ]
-/Border [ 0 0 0 ]
-/A 29 0 R
-/H /I
->>
-endobj
-30 0 obj
-<< /Type /Annot
-/Subtype /Link
-/Rect [ 68.4 497.767 101.127 488.267 ]
-/C [ 0 0 0 ]
-/Border [ 0 0 0 ]
-/A 31 0 R
-/H /I
->>
-endobj
-32 0 obj
-<< /Type /Annot
-/Subtype /Link
-/Rect [ 68.4 479.48 96.614 469.98 ]
-/C [ 0 0 0 ]
-/Border [ 0 0 0 ]
-/A 33 0 R
-/H /I
->>
-endobj
-34 0 obj
-<< /Length 223 /Filter [ /ASCII85Decode /FlateDecode ]
- >>
-stream
-GarW30b8k$%#+HQ'cgkip<"DrNM)&9#UIj.Lm*[M_>h9-_S@J+;d]+Pqc\m2<>mV<OJa:57lH-hdQl8rY_34NB/H2GhJh4?;)TSKD5K1fe%hi]U3#5"&mFN5\:^<$nK.';5IETfXn1!MS^HA9Nu@i*@N8J+"cX>eImW1W]q4$^>KoP_JuXO(CLcd`fg\<U1sp`NO/MFgCFSo7EXdd-0SoQ*\m.Ru~>
-endstream
-endobj
-35 0 obj
-<< /Type /Page
-/Parent 1 0 R
-/MediaBox [ 0 0 594 842 ]
-/Resources 3 0 R
-/Contents 34 0 R
->>
-endobj
-36 0 obj
-<< /Length 1077 /Filter [ /ASCII85Decode /FlateDecode ]
- >>
-stream
-Gb!#[95bIu&AI=/pm<+;...@UD>ll-dV%Rr-P)fF$,p,i.6#7_R:$Z"X'$T/%NFKLCNQDf%<FYjnb?K^/@nOHO[#"V@?6a)BgCYa58rr9ZdiT!?$;JE:$$m36dIpK9O[!NOW5Q:#aIp+D+="jF"#R93=VUgF]8-O6E<E3OqYY/;*9>Zt?m4,STQVM^`?#.&1m[p.bf=$dpfsS<T5gntl"B8.:9)s2UJ0\k'Th_C&0*Qsoa^2#8UWJl$"<%-jn*8'Y+q;;i\X"FoY6_B&Yb4Qm4'-,'p;sK?aV[X)K<V4\AH#qEq<Xaehf]5_e(?p@iqRP9*k-Eg@<5HuG2=h_8hc,%8;T.eE"^TdlOBP0kk69I.,l0-O_f615snNq.e++?J^DJ8$=UnB"d).K??iam!ArpbSF3/eUI [...]
-endstream
-endobj
-37 0 obj
-<< /Type /Page
-/Parent 1 0 R
-/MediaBox [ 0 0 594 842 ]
-/Resources 3 0 R
-/Contents 36 0 R
->>
-endobj
-38 0 obj
-<< /Length 1087 /Filter [ /ASCII85Decode /FlateDecode ]
- >>
-stream
-Gb!#[95bIu&AI=/pt-X&G%T>Z#o+2;6;U+IG1?ps%XDl`#;1PLhoB&aGQ$0IKQ82tQ,K*R2rBSGYM7`g943J^eo#+8Y?8EF+/gZ_fp<S\b.`G#k$S<j[G_<!CVR,M-c#8:I:hknCS>>_SZXg^Bo.^+<_%33k]O&#]'iFUh60*V(a(7C:;&\4YBAmUq>^2H+i#*08>Wj,3S]*ir]Fb)B_O!"o(Z_mrpf"-Eq*mt7PFg\0sr>R7k2C!Wi?uLKO+0(=q[ukDHF@h]6(>olrr,NErQ8*]@M\c`idUi/P.U*$)jASQN6M5!(kW,6_-b,?4$hgPG;/#N@&$+'4gTF^T2F:7@J[2F"P@m^7p.;%h"iE[<%U"cm?H8,\%)g(W)>uOnjK\jeJ#3I+oZDm>_Wt.#orNmr=m7)HK@n@cQhW70t=25>^?13ZJjuJG"eoFO>4V\LmB0E?s;PB$cX(M+W.(bs9[t8IAnF70NdI\l!]b0ga6SQZ [...]
-endstream
-endobj
-39 0 obj
-<< /Type /Page
-/Parent 1 0 R
-/MediaBox [ 0 0 594 842 ]
-/Resources 3 0 R
-/Contents 38 0 R
->>
-endobj
-40 0 obj
-<< /Length 873 /Filter [ /ASCII85Decode /FlateDecode ]
- >>
-stream
-Gb!#Z95>J$&AJ$Cka3?aC8@+qJeDbG:$Z7,LmLGBHEc#5-I?(>..lCuDsLi$2<geE,.k0;UMml7Olh),G]OBd@?11u5qkV'T`<E*E/F8r5XbVQU(W+<W+?;dW_i^'ID5j-Y0dd0J(>YX!b#oQMo:Jdgh7X`3Da@pHCi.8cgZ"7Q@OL3bA(*k:FTn]EVB2-qkY:Z'-)g/@MrWWO"\8?#L1$neRF,jOhq]\o9K43!`RGF>=(lU(Y;=8C1l=4:J3tlM-bg@48l=S@48P)jM,N%[aBWQCJL-j,;ko/]o<!==dsVsRGY.:R7YEjNIq/Do9RBH5AqQc+\>WKF207t";0rPYm=H3[[TD%hq$OXIMkiOUlWnX%fF,;nTu-(kAk0M,*i8M$Aes@eMZ@0J-I<tJmS.!l3gJTa$9h6hep$qcdI<Pac:iE"TZ\a_dP`Z>b;E2=2([ClS`M>lXRF1&E-a4G!;QcTB1S'r";3()2Pp>C-\Xp\K [...]
-endstream
-endobj
-41 0 obj
-<< /Type /Page
-/Parent 1 0 R
-/MediaBox [ 0 0 594 842 ]
-/Resources 3 0 R
-/Contents 40 0 R
-/Annots 42 0 R
->>
-endobj
-42 0 obj
-[
-43 0 R
-45 0 R
-47 0 R
-]
-endobj
-43 0 obj
-<< /Type /Annot
-/Subtype /Link
-/Rect [ 66.9 650.686 114.75 639.686 ]
-/C [ 0 0 0 ]
-/Border [ 0 0 0 ]
-/A 44 0 R
-/H /I
->>
-endobj
-45 0 obj
-<< /Type /Annot
-/Subtype /Link
-/Rect [ 66.9 632.922 132.361 621.922 ]
-/C [ 0 0 0 ]
-/Border [ 0 0 0 ]
-/A 46 0 R
-/H /I
->>
-endobj
-47 0 obj
-<< /Type /Annot
-/Subtype /Link
-/Rect [ 66.9 615.158 141.414 604.158 ]
-/C [ 0 0 0 ]
-/Border [ 0 0 0 ]
-/A 48 0 R
-/H /I
->>
-endobj
-49 0 obj
-<< /Length 2056 /Filter [ /ASCII85Decode /FlateDecode ]
- >>
-stream
-Gb"/)>Ar7S'Roe[d%g1DQ5B(c@OTT]gLVd</2=SgV@Tt#VoB]<Q0kF$Y9->5&h-\`>]db&ide7%Ob`,rST>LY=\N/77o9>$Zrg$FJC,Q>?^O21U:U_hT__"fel+Qf,QS3HU;_QQH&;S&kT]j9/UgVT8;*AeXb\t6-j6g/,lgBDgi^$LdUJ[ef"5e4(I\Va]q(?[$5`jhifXB<s*\-(i#XI(/qBm2#\no[#aLnXNKaH[Q2V/E0NNh+_-TQsQthha=iAf`WkL:^/_.qbC\(c_qb'*8ma<n)l-2b[WmKp2C3`CiSD^$1=k\/-)@;J)#kFKgb3UCGZBPQWi43%ZV<'=,,I_dp1YIc,Hm94)"J[?'['Ydnm*I:ka*<HM)Hd7ojXmkA3i]<@*HVNr&q(*9C$GRuZj!*FM&9.Y8Ppc6f&TrW8ocn21bC7O=fH,1'4L@1hcSWI)*@sMpD1F)#]!+D^fBF-(g1-ImLcp3$/Kf>,d(H*>H [...]
-endstream
-endobj
-50 0 obj
-<< /Type /Page
-/Parent 1 0 R
-/MediaBox [ 0 0 594 842 ]
-/Resources 3 0 R
-/Contents 49 0 R
->>
-endobj
-51 0 obj
-<< /Length 1812 /Filter [ /ASCII85Decode /FlateDecode ]
- >>
-stream
-GauHL9lo&I&A@C2i+O3aie%6QR8.@a6qQ3+S^uBa''DMXPg-2A8l9TV?XEd9#XEncWpMV\NJSqfm(RoF(>t\8jG3IDA.X=F@Y3[5C4a7M"9TqKA&&Ao5tVcW0Fh\FnG2@P=Ol$]'i$R%@?rZf2>b*fQAf5&>MdoBWbo1MZWUXf04=MFA3-4X.45$Jq><\*3sQ21"Je#2N9"@M=@+1Se%r<m#VtlN*[\WrhFJ_C8:)G,`t3l*qc.K6gWd<9G;n:DrFXMMNtS%?q,.X(*kJd_57&8p=XqupM=CCF\kQ'?rDc__2TpO3=LLZmCe)g@Q#gm#Zuso9g@*V"=kN%8cE-"`ma;M2SnET:.3oes>qWS?AQ'=,9S4Qc7C._l4F:shG2utJgWe>^?I,`bZ"`Tu/?1p@MKXHmP:VIq[b(mFb%B=K:.R$tMno5gZ>0+aa4%H&oW!1_m[V7%Yj-(0<*aq-'+>c/Qo++2(l-c;h7g#M.6_a6f` [...]
-endstream
-endobj
-52 0 obj
-<< /Type /Page
-/Parent 1 0 R
-/MediaBox [ 0 0 594 842 ]
-/Resources 3 0 R
-/Contents 51 0 R
->>
-endobj
-53 0 obj
-<< /Length 858 /Filter [ /ASCII85Decode /FlateDecode ]
- >>
-stream
-Gb!#Zhf%4&&:WfGn0:'FZd6C_WD_?rNi=K@A:#2@#UEA?K2+-"s4OXjiZs>Q<R[ltK7!@g]C50(InBne*[rjHTO^2.R%Ru$-W!3EoK&Y$fKY8//HJbn?ipTZ>P*>70uG\35>^pi@PC3Ho<oc!5=%!4?5a1YhJ8F\hKJ50lZ&QrhRr5*Iu5WWs46TZ"TU@'4UV2g5'810N"T$&XNMG%X:j:Tjq+L7&>e5DFqbQV&H3mtK\I[:OLOEXKM.e=?+C\:W10,sV"VEkWEV0%AAKV%6i2"E(SNgLA[IWPIo5TW.?Lic^1q\f3+OCPWZtL!'nbONpoVGQC`m\>nX.Cd#4rPO=p+@X'oH$9$>bgb'SBCFL^7m.aeacElkXSAJ7^u9.KXk[6(MgW""b=r$?g(K_9L.u,/>lK[$q>brNk.Pe%5ZlTP(F0Pd;MFJYcE9WGNADWA1Le01iZs$\qg50L@85(%[tS59>:8].@7ebjiN!?ORaGMd [...]
-endstream
-endobj
-54 0 obj
-<< /Type /Page
-/Parent 1 0 R
-/MediaBox [ 0 0 594 842 ]
-/Resources 3 0 R
-/Contents 53 0 R
->>
-endobj
-55 0 obj
-<< /Length 926 /Filter [ /ASCII85Decode /FlateDecode ]
- >>
-stream
-Gb!#Z9lJc?%)(h*ka3Ek8^sYhTtn+6>DBQe)Io+F#<Qp[!)6BK3UPEoOt#"gSL+M`Qik5a,Ebi`O-2]iUCT;RA5n\=4^sY<I-D\[R'PfIL_Jp"S:EO!0d<A1A0g&qT4:V"'c5pIahPG)JoL+j?'(AE@T5BA9,369lag9f[bK&UZ[6G73T5M&^!(U%!%P(O,LHJZC9mn1=O>&c)s8orJg-`:cDdSe'ThsJN%sR7j_fK8/j];r3@bAR@>lkqZZK!'\$t&el0YQcH\ISn@]A'ghU=u+53`KM/\AQ':-Tq_ju/'2LG3eVnl7gsbeYNU/l&P\6Q,LIUP!1ichVVfbVs&_RLq,3"]l!U)gl$F23Nn`=bYi(*?<ICN<M#'dNVp$*=@"WKBYWtWVCEn+^4P;)"'pe3&XgPR@Yk-XVjn&1BcAF39,/[m5bpf]m>r,/g-!iPr;S[;(I*E-sdBPq,l&C@J@DO0.p!,?TBB>Fb=S^Ai2/"P- [...]
-endstream
-endobj
-56 0 obj
-<< /Type /Page
-/Parent 1 0 R
-/MediaBox [ 0 0 594 842 ]
-/Resources 3 0 R
-/Contents 55 0 R
->>
-endobj
-57 0 obj
-<< /Length 837 /Filter [ /ASCII85Decode /FlateDecode ]
- >>
-stream
-Gb"/%95iQ=%)2U?kh$rV8[A!jL&u(YG1jHECQ&9]gOnN7=b,Tga6h6'5K]:/a[t)*G=Vd%(<)?1BThL\)SNbY87R\.=[Xr0BatN7KI\m?-mJ/YLac"T7l&Xt1QBg/\iZWG3CXN-r<O<N7"rU3$4k)^:&q%CVl[ms:%>U3c*ddR7%"/F(p2bUiE.B`*<1LQ56U>,&.#8>C@:S$0Xr)CUD!i*K(_Tc,>)`?Tb8t3F0U3j#a%B`-41,T:-g8:D\,ZX%]fu<p.3!!r)7'TAjCWiCA07`.21oQ5k\.XnGlp9/2iT^e2Ai%1M=JMOhn%"C#s/8+/ZF[c1cL!-!MC8heM=IhuDu-47Z?4]:!<hFC+]N0^V!1pTo3%gTcppq"\/69em%91)HLP2dp8bFJCYaV:')Vi8"h\?5&eX:+h-8?E.<i0s$LnU#*/Wb+!3]CdomHC^M7iQu0RiP`,4WA`YV*IR@:G7<]98@d4Sh`AeVQ/J1cf/D [...]
-endstream
-endobj
-58 0 obj
-<< /Type /Page
-/Parent 1 0 R
-/MediaBox [ 0 0 594 842 ]
-/Resources 3 0 R
-/Contents 57 0 R
-/Annots 59 0 R
->>
-endobj
-59 0 obj
-[
-60 0 R
-62 0 R
-]
-endobj
-60 0 obj
-<< /Type /Annot
-/Subtype /Link
-/Rect [ 52.9 616.022 127.198 609.022 ]
-/C [ 0 0 0 ]
-/Border [ 0 0 0 ]
-/A 61 0 R
-/H /I
->>
-endobj
-62 0 obj
-<< /Type /Annot
-/Subtype /Link
-/Rect [ 52.9 597.283 126.029 590.283 ]
-/C [ 0 0 0 ]
-/Border [ 0 0 0 ]
-/A 63 0 R
-/H /I
->>
-endobj
-64 0 obj
-<< /Length 983 /Filter [ /ASCII85Decode /FlateDecode ]
- >>
-stream
-Gb!#Z9lo#B&A@Zc1n;F6N?mi-RO66(.7qu[_N_RDe3+YQ.8p;I"6nn(GD5/2$774hV(`fjd_;X0HM:R?;=!_A&He1a=c3>-d24sJW=6nU`<aFI,MZ%6U&tLP)\UthY6PI=YR^IuU6!A-&>gus8SU4V5p.W[a`rBJ:%QEY35&'&aY_8uka@,:`Z<6g%g<d4&;6e9K)b:@NsFPS&#DW!b;0PJD$\Qs<<sjYX?cV1WIVV5+&PW62G#>rfYS]oEbXFfOWEBfcI+GUM6jG4b-MGFQ!KY.3G=:%nRaU9;`'4L'-<WS9&/93M(eVB?MCl1iua=*Q-5;rjW^0gf6OZj/JkgN\h*Mn;@DDT(;SmLNk*[$(gorSC&1]m-g$^m>RPp4M?@=a_JD#_#UP$8MS%pua]b<?VbmNr?]`WJ'Zc956*(^2&X$o8pOa/dQ&$cj%aPU3IMA%O6R8!0(`12eHkVOb\P&u"J0pEc#[J0@dO\PI=5EC/H$ [...]
-endstream
-endobj
-65 0 obj
-<< /Type /Page
-/Parent 1 0 R
-/MediaBox [ 0 0 594 842 ]
-/Resources 3 0 R
-/Contents 64 0 R
->>
-endobj
-66 0 obj
-<< /Length 1163 /Filter [ /ASCII85Decode /FlateDecode ]
- >>
-stream
-Gb!#Z95iQE&AJ$C&3dK,e)^!A&o\79Xg=Kc[n^dWJR[Ad@`sT/^K.dIjPTE&Ugc&V2KdEbg7TN%kF7lXAiOk"G5>:1=K4p'kV1.M3l<UAQnma*_[44>-fDF`,f3FeQDA<epFAubL"GB98cM$a6+D*d#Z?jbN(T<i<,qD*dtdlF?f)RP?!\KlVKq]K3QiLA38kEF)E)gk!%Ns"=S2XfWq-8;n=^L_:$':fS"h,+I\K(>cFma>V)3nArI?ULE@Jo;`asn##KfJRi;V[Kggr9Ho5MSFf$PqUF,SoVK/IU?N!u'C=RE$]D:%@JGU.4?L$a1,ZBHlBZaf,u-hie#2YT=B%%+rPO%"_$\*s$%bqL4P@7nX(YS<IFfT=__:c/GOh/d5TcpoPqNY']R<<Yl@mnbHH)ALCk5q4=N2dA-dpKBnM#;bNP@bm5!U*B>'^]N%/SeC^p8"?)ugp<+IW-P0Wp,5I$:8f8.[i+$l@[l:S.GM(8G- [...]
-endstream
-endobj
-67 0 obj
-<< /Type /Page
-/Parent 1 0 R
-/MediaBox [ 0 0 594 842 ]
-/Resources 3 0 R
-/Contents 66 0 R
->>
-endobj
-68 0 obj
-<< /Length 1946 /Filter [ /ASCII85Decode /FlateDecode ]
- >>
-stream
-Gb!#]hf%7-&:Vr4+lk'Q<e`_7P_^n3g+HN4F=Yo\)iA2;Z7KQ.*%SAOAc;(A'M4.GW7Z"^cif(TMKc^?r4\ruI!0OMbn<InA6,=!6BbQ/?]`Yl:Mrs16LgZoO;"M>,iab1:s&&Vq>H87oK;poRCu'!4CM.2U'a[GV*ptM:/V9ck%4.'SihQTa2qu#VNYX!""QT>gLpU14;UHpq>1*g8AIV=,eBO.+/U6u>qSH@_$P16%n(V9s8-62gf==7h5C6ro<@X9[ajN4AQaH=LHeKM1KJ_CVF2^C3!!T2pDp(QT-d@0d$`Hd.AaDIPY(eunY>R4TXi5q*1>j]6I-#,Zu_3X>o7ifNo]kl_J-G/TfuZ!B'W;W)u*57A,+H;ejb_7VS;K@I(/EUrC*Af@I/-f0GU[hjjT>Db4sM%Y%(YO7]l@(HI&*gp$n0K2J,`Z5/S)_PbaD];lECo4q*neAh`56cl+tQ_u,&#PVs@g(YtY!\CLjS\` [...]
-endstream
-endobj
-69 0 obj
-<< /Type /Page
-/Parent 1 0 R
-/MediaBox [ 0 0 594 842 ]
-/Resources 3 0 R
-/Contents 68 0 R
->>
-endobj
-70 0 obj
-<< /Length 212 /Filter [ /ASCII85Decode /FlateDecode ]
- >>
-stream
-GarW3Ymu@N%#4M'MN0AmgN!PSW::Q1OTZRC`5tCphg^p4%:!@(ohYQ??h\<D7tqW_oOS<),$2\:0[RH@NmL,S"g&Tf&)8s1Qc#\2`aU"1Rf8W.g?7r*4o`#5h85`Q:IAo:6!/@:<UI%*+5*sb7OO&Ks(\u/n[u4VE@aL9d:lUZ^P!l%7+*0#?'j>6HYRXrUG.G])@fUuW;-MHDEmR~>
-endstream
-endobj
-71 0 obj
-<< /Type /Page
-/Parent 1 0 R
-/MediaBox [ 0 0 594 842 ]
-/Resources 3 0 R
-/Contents 70 0 R
->>
-endobj
-72 0 obj
-<< /Length 1223 /Filter [ /ASCII85Decode /FlateDecode ]
- >>
-stream
-Gb!#[95i<6&AIm?pdTV/Z,^hs9;k`#b=dX`1u\QVZIu$WWD-F:p;"G`NlR/#mt1[.lmhS/4l^g9o/V8&SNVJIM5$/4h&2uH</hrl@'V&%B:L[SjTJ2uPpD&[<.Q7D"8Qu_Bmr@^Om9X:5nKV,?+i\",oOt7:.Z`:X&BJ.iRrFY`X)lL92&N#!%Q.8.b"Fd'.*\h,Tna4>.PQNRo_P"'';?CcNN>^ag[>#c*6#0OA!sT0QQ"ZgZ_Mg2qoFd9tQjkR\B3$GE:L)[iYB2D11:GH'a2*lY^MW3)uBKeI0BA`u(lMf]Z0s][`(m^Ip`PH<f0HTgo[jGCE0X8in:-b$N^<^5QYBPV[LSBVi,&5_QH`jZ,h8k`>7D*6WcY@miuU'j(67U#l!8[n\1@c005HBD,BbWbAOl1uoKAL[ILeJ6$47FeRs;Qk(fSJIEPV.2L3RA<<L<S;.)%g<4==,8fG:1Yo*#l0?U!IUcFND^]J)KaYa\"U [...]
-endstream
-endobj
-73 0 obj
-<< /Type /Page
-/Parent 1 0 R
-/MediaBox [ 0 0 594 842 ]
-/Resources 3 0 R
-/Contents 72 0 R
->>
-endobj
-74 0 obj
-<< /Type /Font
-/Subtype /Type1
-/Name /F3
-/BaseFont /Helvetica-Bold
-/Encoding /WinAnsiEncoding >>
-endobj
-75 0 obj
-<< /Type /Font
-/Subtype /Type1
-/Name /F1
-/BaseFont /Helvetica
-/Encoding /WinAnsiEncoding >>
-endobj
-76 0 obj
-<< /Type /FontDescriptor
-/FontName /1Ef4f2Garamond
-/FontBBox  [-138 -306 1062 986] 
-/Flags 33
-/CapHeight 639
-/Ascent 986
-/Descent -306
-/ItalicAngle 0
-/StemV 0
-/FontFile2 77 0 R
-/MissingWidth 500
-
- >>
-endobj
-77 0 obj
-<< /Length 27890 /Filter [ /ASCII85Decode /FlateDecode ]
- /Length1 28676 >>
-stream
-Gas`*$!\Fih)@MRHgg6%h$5&/#pbT4#p^"K6d#qY#)k9+*!TmlA&gJ/)r%pFBubB0g,+"W]-ON5oLXq2Mkkc)Vm"i&D4\abT-eF'k-=O-8c,lkFe?6Zg;`X-XM@E"kC*?%^VoK_cH`S9B7@nqG:W^q!!Ei6'H#]4J"Oct5s#';!rtJHRbGLQDo\Oh!-T18Dqi"lqU*3q[;?,`\.=,+43+dHhYQLt^u?k,JP4Z5mZ9L!eH#@N/idFRpDs1"%ohT_8%;gW283Y.\-:@^@(:d[mG<4E7K47p!5RLNI8=Tu>O(7p^_m-j=7C/-1EcFH*02*65Oe6*^?X#e!tWACB6;29&TI"Nj$S`kXrcVAj"@<,!S&t+fs:'RI3/IgQ]%1Gs3BN1h#GKoRU'g(j[/ujl!rEK>gru)c6u?#6Q88oF5>7dEM!c.<qJ829:]4s67JQ;^'R2R)H=!cOMbm:q@.QO`6atrKZDd90`]OMKBTdPJpIuAd5 [...]
-endstream
-endobj
-78 0 obj
-<< /Type /Font
-/Subtype /Type0
-/Name /F15
-/BaseFont /1Ef4f2Garamond
-/Encoding /Identity-H
-/DescendantFonts [ 79 0 R ]  >>
-endobj
-79 0 obj
-<< /Type /Font
-/BaseFont /1Ef4f2Garamond 
-/Subtype /CIDFontType2
-/CIDSystemInfo << /Registry (Adobe)/Ordering (UCS)/Supplement 0 >>
-/FontDescriptor 76 0 R
-/DW 0
-/W [ 0 [750 0 250 250 614 510 416 656 291 677 510 510 333 468 406 229 562 770 666 468 354 510 229 218 364 447 312 322 416 489 416 656 458 510 218 500 833 885 354 427 218 635 291 291 572 479 562 177 760 229 697 770 781 770 625 770 468 333 468 500 614 ] ] 
->>
-endobj
-80 0 obj
-<< /Type /Font
-/Subtype /Type1
-/Name /F9
-/BaseFont /Courier
-/Encoding /WinAnsiEncoding >>
-endobj
-1 0 obj
-<< /Type /Pages
-/Count 17
-/Kids [6 0 R 8 0 R 10 0 R 35 0 R 37 0 R 39 0 R 41 0 R 50 0 R 52 0 R 54 0 R 56 0 R 58 0 R 65 0 R 67 0 R 69 0 R 71 0 R 73 0 R ] >>
-endobj
-2 0 obj
-<< /Type /Catalog
-/Pages 1 0 R
- >>
-endobj
-3 0 obj
-<< 
-/Font << /F3 74 0 R /F1 75 0 R /F15 78 0 R /F9 80 0 R >> 
-/ProcSet [ /PDF /ImageC /Text ] >> 
-endobj
-13 0 obj
-<<
-/S /GoTo
-/D [37 0 R /XYZ 45.4 711.7 null]
->>
-endobj
-15 0 obj
-<<
-/S /GoTo
-/D [39 0 R /XYZ 45.4 711.7 null]
->>
-endobj
-17 0 obj
-<<
-/S /GoTo
-/D [41 0 R /XYZ 45.4 711.7 null]
->>
-endobj
-19 0 obj
-<<
-/S /GoTo
-/D [50 0 R /XYZ 45.4 711.7 null]
->>
-endobj
-21 0 obj
-<<
-/S /GoTo
-/D [54 0 R /XYZ 45.4 711.7 null]
->>
-endobj
-23 0 obj
-<<
-/S /GoTo
-/D [56 0 R /XYZ 45.4 711.7 null]
->>
-endobj
-25 0 obj
-<<
-/S /GoTo
-/D [58 0 R /XYZ 45.4 711.7 null]
->>
-endobj
-27 0 obj
-<<
-/S /GoTo
-/D [65 0 R /XYZ 45.4 711.7 null]
->>
-endobj
-29 0 obj
-<<
-/S /GoTo
-/D [67 0 R /XYZ 45.4 711.7 null]
->>
-endobj
-31 0 obj
-<<
-/S /GoTo
-/D [69 0 R /XYZ 45.4 711.7 null]
->>
-endobj
-33 0 obj
-<<
-/S /GoTo
-/D [73 0 R /XYZ 45.4 711.7 null]
->>
-endobj
-44 0 obj
-<<
-/S /GoTo
-/D [null /XYZ 0.0 0.0 null]
->>
-endobj
-46 0 obj
-<<
-/S /GoTo
-/D [null /XYZ 0.0 0.0 null]
->>
-endobj
-48 0 obj
-<<
-/S /GoTo
-/D [null /XYZ 0.0 0.0 null]
->>
-endobj
-61 0 obj
-<<
-/S /GoTo
-/D [null /XYZ 0.0 0.0 null]
->>
-endobj
-63 0 obj
-<<
-/S /GoTo
-/D [null /XYZ 0.0 0.0 null]
->>
-endobj
-xref
-0 81
-0000000000 65535 f 
-0000051603 00000 n 
-0000051773 00000 n 
-0000051823 00000 n 
-0000000015 00000 n 
-0000000071 00000 n 
-0000000502 00000 n 
-0000000608 00000 n 
-0000000719 00000 n 
-0000000825 00000 n 
-0000001913 00000 n 
-0000002035 00000 n 
-0000002132 00000 n 
-0000051936 00000 n 
-0000002265 00000 n 
-0000052000 00000 n 
-0000002401 00000 n 
-0000052064 00000 n 
-0000002537 00000 n 
-0000052128 00000 n 
-0000002673 00000 n 
-0000052192 00000 n 
-0000002809 00000 n 
-0000052256 00000 n 
-0000002945 00000 n 
-0000052320 00000 n 
-0000003081 00000 n 
-0000052384 00000 n 
-0000003216 00000 n 
-0000052448 00000 n 
-0000003352 00000 n 
-0000052512 00000 n 
-0000003488 00000 n 
-0000052576 00000 n 
-0000003621 00000 n 
-0000003936 00000 n 
-0000004044 00000 n 
-0000005214 00000 n 
-0000005322 00000 n 
-0000006502 00000 n 
-0000006610 00000 n 
-0000007575 00000 n 
-0000007698 00000 n 
-0000007739 00000 n 
-0000052640 00000 n 
-0000007874 00000 n 
-0000052699 00000 n 
-0000008010 00000 n 
-0000052758 00000 n 
-0000008146 00000 n 
-0000010295 00000 n 
-0000010403 00000 n 
-0000012308 00000 n 
-0000012416 00000 n 
-0000013366 00000 n 
-0000013474 00000 n 
-0000014492 00000 n 
-0000014600 00000 n 
-0000015529 00000 n 
-0000015652 00000 n 
-0000015686 00000 n 
-0000052817 00000 n 
-0000015822 00000 n 
-0000052876 00000 n 
-0000015958 00000 n 
-0000017033 00000 n 
-0000017141 00000 n 
-0000018397 00000 n 
-0000018505 00000 n 
-0000020544 00000 n 
-0000020652 00000 n 
-0000020956 00000 n 
-0000021064 00000 n 
-0000022380 00000 n 
-0000022488 00000 n 
-0000022601 00000 n 
-0000022709 00000 n 
-0000022925 00000 n 
-0000050924 00000 n 
-0000051062 00000 n 
-0000051497 00000 n 
-trailer
-<<
-/Size 81
-/Root 2 0 R
-/Info 4 0 R
->>
-startxref
-52935
-%%EOF
diff --git a/fulcrum-yaafi-crypto-1.0.7/src/test/data/plain.txt b/fulcrum-yaafi-crypto-1.0.7/src/test/data/plain.txt
deleted file mode 100644
index 1612967..0000000
--- a/fulcrum-yaafi-crypto-1.0.7/src/test/data/plain.txt
+++ /dev/null
@@ -1,254 +0,0 @@
-# -------------------------------------------------------------------
-# Copyright 2001-2004 The Apache Software Foundation.
-# 
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-# 
-#      http://www.apache.org/licenses/LICENSE-2.0
-#  
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-# -------------------------------------------------------------------
-
-# -------------------------------------------------------------------
-# D E F A U L T  M A V E N  P R O P E R T I E S
-# -------------------------------------------------------------------
-# These are the properties that we believe are immutable so we
-# keep them apart from the project specific properties.
-# -------------------------------------------------------------------
-
-# Properties for the dashboard reactor
-# ------------------------------------
-
-maven.dashboard.basedir=${basedir}
-maven.dashboard.includes=*/project.xml
-maven.dashboard.excludes=**/target/**/project.xml
-maven.dashboard.ignoreFailures=false
-
-# Generated dashboard xml data file
-maven.dashboard.report.xml = ${maven.build.dir}/dashboard-data.xml
-
-# Generated dashboard main report xdoc file name (without the extension). 
-# Note: The value must not include any path as the xdoc will be 
-# generated in ${maven.gen.docs}.
-maven.dashboard.report.xdoc = dashboard-report
-
-# Generated dashboard legend xdoc file name (without the extension). 
-# Note: The value must not include any path as the xdoc will be 
-# generated in ${maven.gen.docs}.
-maven.dashboard.report.legend.xdoc = dashboard-report-legend
-
-# Location of JSL template to generate the main report xdoc file
-maven.dashboard.template = ${plugin.resources}/templates/dashboard.jsl
-
-# Location of JSL template to generate the legend report xdoc file
-maven.dashboard.template.legend = ${plugin.resources}/templates/legend.jsl
-
-# Decide whether a call to dashboard:report will call the reactor
-# on the child projects to generate individual dashboard data. If you
-# already using the multiproject project or the reactor, a better option
-# is to add dashboard:report-single to the list of goals you're running.
-# In which case, you'll need to set the following property to false
-# (otherwise the reactor will be run again on your child projects).
-maven.dashboard.runreactor = true
-
-# If false, do not show projects for which gathered data is empty for all
-# aggregators.
-maven.dashboard.report.showempty = true
-
-# Images used when generating the progress bar for the dashboard HTML color
-# for left bar
-maven.dashboard.report.bar.left = green
-
-# HTML color for right bar
-maven.dashboard.report.bar.right = red
-
-# Image to set cells with (should be transparent)
-maven.dashboard.report.bar.image = images/trans.gif
-maven.dashboard.report.bar.height = 10
-maven.dashboard.report.bar.border = 0
-maven.dashboard.report.bar.displayLabel = true
-
-# Properties for gathering dashboard data for a single project
-# ------------------------------------------------------------
-
-# Location of default dashboard aggregators
-maven.dashboard.aggregators.dir = ${plugin.resources}/aggregators
-
-# Comma-separated list of aggregators to use
-maven.dashboard.aggregators = cserrors,cswarnings,clovertpc,cloverloc,cloverncloc
-
-# Generated dashboard data for a single project
-maven.dashboard.report.single = ${maven.build.dir}/dashboard-single.xml
-
-# Decide whether to call goals associated with report types or not
-maven.dashboard.rungoals = true
-
-# Default aggregators
-# -------------------
-
-# Properties for the Checkstyle files aggregator
-maven.dashboard.aggregator.csfiles.script = ${maven.dashboard.aggregators.dir}/csfiles.jelly
-maven.dashboard.aggregator.csfiles.artifact = ${maven.build.dir}/checkstyle-raw-report.xml
-maven.dashboard.aggregator.csfiles.label = CS Files
-maven.dashboard.aggregator.csfiles.goal = checkstyle
-maven.dashboard.aggregator.csfiles.description = Number of files checked with Checkstyle
-
-# Properties for the Checkstyle error/warning aggregator (all errors/warnings)
-maven.dashboard.aggregator.csall.script = ${maven.dashboard.aggregators.dir}/csall.jelly
-maven.dashboard.aggregator.csall.artifact = ${maven.build.dir}/checkstyle-raw-report.xml
-maven.dashboard.aggregator.csall.label = CS err/warn
-maven.dashboard.aggregator.csall.goal = checkstyle
-maven.dashboard.aggregator.csall.description = Number of Checkstyle errors and warnings
-
-# Properties for the Checkstyle error aggregator (only errors)
-maven.dashboard.aggregator.cserrors.script = ${maven.dashboard.aggregators.dir}/cserrors.jelly
-maven.dashboard.aggregator.cserrors.artifact = ${maven.build.dir}/checkstyle-raw-report.xml
-maven.dashboard.aggregator.cserrors.label = CS errors
-maven.dashboard.aggregator.cserrors.goal = checkstyle
-maven.dashboard.aggregator.cserrors.description = Number of Checkstyle errors
-
-# Properties for the Checkstyle warning aggregator (only warnings)
-maven.dashboard.aggregator.cswarnings.script = ${maven.dashboard.aggregators.dir}/cswarnings.jelly
-maven.dashboard.aggregator.cswarnings.artifact = ${maven.build.dir}/checkstyle-raw-report.xml
-maven.dashboard.aggregator.cswarnings.label = CS warnings
-maven.dashboard.aggregator.cswarnings.goal = checkstyle
-maven.dashboard.aggregator.cswarnings.description = Number of Checkstyle warnings
-
-# Properties for the Clover TPC aggregator (TPC = Total Percent Coverage)
-maven.dashboard.aggregator.clovertpc.script = ${maven.dashboard.aggregators.dir}/clovertpc.jelly
-maven.dashboard.aggregator.clovertpc.artifact = ${maven.build.dir}/clover.xml
-maven.dashboard.aggregator.clovertpc.label = Clover TPC
-maven.dashboard.aggregator.clovertpc.goal = clover
-maven.dashboard.aggregator.clovertpc.description = Number of test coverage percentage
-
-# Properties for the Clover LOC aggregator (LOC = Line Of Code)
-maven.dashboard.aggregator.cloverloc.script = ${maven.dashboard.aggregators.dir}/cloverloc.jelly
-maven.dashboard.aggregator.cloverloc.artifact = ${maven.build.dir}/clover.xml
-maven.dashboard.aggregator.cloverloc.label = Clover LOC
-maven.dashboard.aggregator.cloverloc.goal = clover
-maven.dashboard.aggregator.cloverloc.description = Number of line of code (including comments)
-
-# Properties for the Clover NCLOC aggregator (NCLOC = Non Comment Line Of Code)
-maven.dashboard.aggregator.cloverncloc.script = ${maven.dashboard.aggregators.dir}/cloverncloc.jelly
-maven.dashboard.aggregator.cloverncloc.artifact = ${maven.build.dir}/clover.xml
-maven.dashboard.aggregator.cloverncloc.label = Clover NCLOC
-maven.dashboard.aggregator.cloverncloc.goal = clover
-maven.dashboard.aggregator.cloverncloc.description = Number of non-commented lines of code
-
-# Properties for the JUnit Test aggregator 
-maven.dashboard.aggregator.junittests.script = ${maven.dashboard.aggregators.dir}/junittests.jelly
-maven.dashboard.aggregator.junittests.artifact = ${maven.build.dir}/TESTS-TestSuites.xml
-maven.dashboard.aggregator.junittests.label = JUnit Tests
-maven.dashboard.aggregator.junittests.goal = junit-report:report
-maven.dashboard.aggregator.junittests.description = Number of JUnit tests
-
-# Properties for the JUnit Failures aggregator 
-maven.dashboard.aggregator.junitfailures.script = ${maven.dashboard.aggregators.dir}/junitfailures.jelly
-maven.dashboard.aggregator.junitfailures.artifact = ${maven.build.dir}/TESTS-TestSuites.xml
-maven.dashboard.aggregator.junitfailures.label = JUnit Failures
-maven.dashboard.aggregator.junitfailures.goal = junit-report:report
-maven.dashboard.aggregator.junitfailures.description = Number of JUnit test failures
-
-# Properties for the JUnit Errors aggregator 
-maven.dashboard.aggregator.juniterrors.script = ${maven.dashboard.aggregators.dir}/juniterrors.jelly
-maven.dashboard.aggregator.juniterrors.artifact = ${maven.build.dir}/TESTS-TestSuites.xml
-maven.dashboard.aggregator.juniterrors.label = JUnit Errors
-maven.dashboard.aggregator.juniterrors.goal = junit-report:report
-maven.dashboard.aggregator.juniterrors.description = Number of JUnit test errors
-
-# Properties for the JUnit Pass Rate aggregator 
-maven.dashboard.aggregator.junitpassrate.script = ${maven.dashboard.aggregators.dir}/junitpassrate.jelly
-maven.dashboard.aggregator.junitpassrate.artifact = ${maven.build.dir}/TESTS-TestSuites.xml
-maven.dashboard.aggregator.junitpassrate.label = JUnit Pass Rate
-maven.dashboard.aggregator.junitpassrate.goal = junit-report:report
-maven.dashboard.aggregator.junitpassrate.description = Percentage of JUnit tests that have passed vs tests in error or failed
-
-# Properties for the PMD violations aggregator 
-maven.dashboard.aggregator.pmdfiles.script = ${maven.dashboard.aggregators.dir}/pmdfiles.jelly
-maven.dashboard.aggregator.pmdfiles.artifact = ${maven.build.dir}/pmd-raw-report.xml
-maven.dashboard.aggregator.pmdfiles.label = PMD Files with Violations
-maven.dashboard.aggregator.pmdfiles.goal = pmd:report
-maven.dashboard.aggregator.pmdfiles.description = Number of files with PMD violations
-
-# Properties for the PMD violations aggregator 
-maven.dashboard.aggregator.pmdviolations.script = ${maven.dashboard.aggregators.dir}/pmdviolations.jelly
-maven.dashboard.aggregator.pmdviolations.artifact = ${maven.build.dir}/pmd-raw-report.xml
-maven.dashboard.aggregator.pmdviolations.label = PMD Violations
-maven.dashboard.aggregator.pmdviolations.goal = pmd:report
-maven.dashboard.aggregator.pmdviolations.description = Number of PMD violations
-
-# Properties for the Simian duplicate lines aggregator 
-maven.dashboard.aggregator.simiantdl.script = ${maven.dashboard.aggregators.dir}/simiantdl.jelly
-maven.dashboard.aggregator.simiantdl.artifact = ${maven.build.dir}/generated-xdocs/simian-report.xml
-maven.dashboard.aggregator.simiantdl.label = Simian TDL
-maven.dashboard.aggregator.simiantdl.goal = maven-simian-plugin:report
-maven.dashboard.aggregator.simiantdl.description = Simian Total Duplicate Lines
-
-# Properties for the JCoverage covered lines percent aggregator 
-maven.dashboard.aggregator.jcoveragelipc.script = ${maven.dashboard.aggregators.dir}/jcoveragelipc.jelly
-maven.dashboard.aggregator.jcoveragelipc.artifact = ${maven.build.dir}/jcoverage/coverage.xml
-maven.dashboard.aggregator.jcoveragelipc.label = JCoverage %lines
-maven.dashboard.aggregator.jcoveragelipc.goal = maven-jcoverage-plugin:report
-maven.dashboard.aggregator.jcoveragelipc.description = JCoverage covered lines percentile
-
-# Properties for the JCoverage total lines aggregator 
-maven.dashboard.aggregator.jcoverageloc.script = ${maven.dashboard.aggregators.dir}/jcoverageloc.jelly
-maven.dashboard.aggregator.jcoverageloc.artifact = ${maven.build.dir}/jcoverage/coverage.xml
-maven.dashboard.aggregator.jcoverageloc.label = JCoverage LOC
-maven.dashboard.aggregator.jcoverageloc.goal = maven-jcoverage-plugin:report
-maven.dashboard.aggregator.jcoverageloc.description = JCoverage total lines of code
-
-# Properties for the FindBugs file violations aggregator 
-maven.dashboard.aggregator.fbfiles.script = ${maven.dashboard.aggregators.dir}/fbfiles.jelly
-maven.dashboard.aggregator.fbfiles.artifact = ${maven.build.dir}/findbugs-raw-report.xml
-maven.dashboard.aggregator.fbfiles.label = FindBugs Files with Violations
-maven.dashboard.aggregator.fbfiles.goal = maven-findbugs-plugin:report
-maven.dashboard.aggregator.fbfiles.description = Number of files with FindBugs violations
-
-# Properties for the FindBugs violations aggregator 
-maven.dashboard.aggregator.fbviolations.script = ${maven.dashboard.aggregators.dir}/fbviolations.jelly
-maven.dashboard.aggregator.fbviolations.artifact = ${maven.build.dir}/findbugs-raw-report.xml
-maven.dashboard.aggregator.fbviolations.label = FindBugs Violations
-maven.dashboard.aggregator.fbviolations.goal = maven-findbugs-plugin:report
-maven.dashboard.aggregator.fbviolations.description = Number of FindBugs violations
-
-# Classes Tasks aggregator
-maven.dashboard.aggregator.tasklistclass.script = ${maven.dashboard.aggregators.dir}/task-list-classes.jelly
-maven.dashboard.aggregator.tasklistclass.artifact = ${maven.build.dir}/generated-xdocs/task-list.xml
-maven.dashboard.aggregator.tasklistclass.label = Classes Tasks 
-maven.dashboard.aggregator.tasklistclass.goal = maven-tasklist-plugin:report
-maven.dashboard.aggregator.tasklistclass.description = Total number of classes with task definition (@todo tag).
-
-# Methods Tasks aggregator
-maven.dashboard.aggregator.tasklistmethod.script = ${maven.dashboard.aggregators.dir}/task-list-methods.jelly
-maven.dashboard.aggregator.tasklistmethod.artifact = ${maven.build.dir}/generated-xdocs/task-list.xml
-maven.dashboard.aggregator.tasklistmethod.label = Methods Tasks 
-maven.dashboard.aggregator.tasklistmethod.goal = maven-tasklist-plugin:report
-maven.dashboard.aggregator.tasklistmethod.description = Total number of methods with task definition (@todo tag).
-
-# All Tasks aggregator
-maven.dashboard.aggregator.tasklist.script = ${maven.dashboard.aggregators.dir}/task-list-all.jelly
-maven.dashboard.aggregator.tasklist.artifact = ${maven.build.dir}/generated-xdocs/task-list.xml
-maven.dashboard.aggregator.tasklist.label = All Tasks 
-maven.dashboard.aggregator.tasklist.goal = maven-tasklist-plugin:report
-maven.dashboard.aggregator.tasklist.description = Total number of task definition (@todo tag).
-
-# Changed log: total number of scm changed files aggregator
-maven.dashboard.aggregator.scmchangedfiles.script = ${maven.dashboard.aggregators.dir}/scmchangedfiles.jelly
-maven.dashboard.aggregator.scmchangedfiles.artifact = ${maven.build.dir}/changelog.xml
-maven.dashboard.aggregator.scmchangedfiles.label = SCM Changed Files
-maven.dashboard.aggregator.scmchangedfiles.goal = maven-changelog-plugin:report
-maven.dashboard.aggregator.scmchangedfiles.description = Total number of changed files in scm.
-
-# Changed log: total number of scm commit aggregator
-maven.dashboard.aggregator.scmchangedcommit.script = ${maven.dashboard.aggregators.dir}/scmchangedcommit.jelly
-maven.dashboard.aggregator.scmchangedcommit.artifact = ${maven.build.dir}/changelog.xml
-maven.dashboard.aggregator.scmchangedcommit.label = SCM commits
-maven.dashboard.aggregator.scmchangedcommit.goal = maven-changelog-plugin:report
-maven.dashboard.aggregator.scmchangedcommit.description = Total number of scm commit.
-
diff --git a/fulcrum-yaafi-crypto-1.0.7/src/test/data/plain.xml b/fulcrum-yaafi-crypto-1.0.7/src/test/data/plain.xml
deleted file mode 100644
index 8890c58..0000000
--- a/fulcrum-yaafi-crypto-1.0.7/src/test/data/plain.xml
+++ /dev/null
@@ -1,56 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- Licensed to the Apache Software Foundation (ASF) under one
- or more contributor license agreements.  See the NOTICE file
- distributed with this work for additional information
- regarding copyright ownership.  The ASF licenses this file
- to you under the Apache License, Version 2.0 (the
- "License"); you may not use this file except in compliance
- with the License.  You may obtain a copy of the License at
- 
- http://www.apache.org/licenses/LICENSE-2.0
- 
- Unless required by applicable law or agreed to in writing,
- software distributed under the License is distributed on an
- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- KIND, either express or implied.  See the License for the
- specific language governing permissions and limitations
- under the License.
--->
-
-<role-list>
- <!-- Use minimal role entry -->
- <role
-  name="org.apache.fulcrum.yaafi.service.servicemanager.ServiceManagerService"
-  default-class="org.apache.fulcrum.yaafi.service.servicemanager.ServiceManagerServiceImpl"
- />
- <!-- For the rest of the services use a full-blown role entry -->
- <role
-  name="org.apache.fulcrum.yaafi.service.systemproperty.SystemPropertyService"
-  shorthand="SystemPropertyService"
-  default-class="org.apache.fulcrum.yaafi.service.systemproperty.SystemPropertyServiceImpl"
-  early-init="true"
-  description="ÜÖÄüöäß"
- />
- <!--
-  This ReconfigurationService is instantiated during the first access. Until
-  then it is doing nothing.
- -->
- <role
-  name="org.apache.fulcrum.yaafi.service.reconfiguration.ReconfigurationService"
-  shorthand="ReconfigurationService"
-  default-class="org.apache.fulcrum.yaafi.service.reconfiguration.ReconfigurationServiceImpl"
-  early-init="false"
-  component-type="avalon"
-  component-flavour="yaafi"
-  description="Monitors the componentConfiguration.xml to reconfigure YAAFI"
- />
- <role
-  name="org.apache.fulcrum.yaafi.TestComponent"
-  shorthand="test"
-  default-class="org.apache.fulcrum.yaafi.TestComponentImpl"
-  early-init="true"
-  component-type="merlin"
-  description="A simple test component"
- />
-</role-list>
\ No newline at end of file
diff --git a/fulcrum-yaafi-crypto-1.0.7/src/test/data/plain.zip b/fulcrum-yaafi-crypto-1.0.7/src/test/data/plain.zip
deleted file mode 100644
index 37ddfc5..0000000
Binary files a/fulcrum-yaafi-crypto-1.0.7/src/test/data/plain.zip and /dev/null differ
diff --git a/fulcrum-yaafi-crypto-1.0.7/src/test/org/apache/fulcrum/jce/crypto/CryptoUtilTest.java b/fulcrum-yaafi-crypto-1.0.7/src/test/org/apache/fulcrum/jce/crypto/CryptoUtilTest.java
deleted file mode 100644
index 2d59bc5..0000000
--- a/fulcrum-yaafi-crypto-1.0.7/src/test/org/apache/fulcrum/jce/crypto/CryptoUtilTest.java
+++ /dev/null
@@ -1,302 +0,0 @@
-package org.apache.fulcrum.jce.crypto;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-
-import java.io.ByteArrayOutputStream;
-import java.io.File;
-
-import junit.framework.TestCase;
-
-/**
- * Test suite for crypto functionality
- *
- * @author <a href="mailto:siegfried.goeschl@it20one.at">Siegfried Goeschl</a>
- */
-
-public class CryptoUtilTest extends TestCase
-{
-    /** the password to be used */
-    private String password;
-
-    /** the test data directory */
-    private File testDataDirectory;
-
-    /** the temp data director */
-    private File tempDataDirectory;
-
-    /**
-     * Constructor
-     * @param name the name of the test case
-     */
-    public CryptoUtilTest( String name )
-    {
-        super(name);
-
-        this.password = "mysecret";
-        this.testDataDirectory = new File( "./src/test/data" );
-        this.tempDataDirectory = new File( "./target/temp" );
-        this.tempDataDirectory.mkdirs();
-    }
-
-    /**
-     * @see junit.framework.TestCase#setUp()
-     *         byte[] salt,
-        int count,
-        String algorithm,
-        String providerName )
-
-     */
-    protected void setUp() throws Exception
-    {
-        CryptoStreamFactoryImpl factory = new CryptoStreamFactoryImpl(
-            CryptoParameters.SALT,
-            CryptoParameters.COUNT
-            );
-
-        CryptoStreamFactoryImpl.setInstance( factory );
-    }
-
-    /**
-     * @return Returns the password.
-     */
-    protected char[] getPassword()
-    {
-        return password.toCharArray();
-    }
-
-    /**
-     * @return Returns the tempDataDirectory.
-     */
-    protected File getTempDataDirectory()
-    {
-        return tempDataDirectory;
-    }
-
-    /**
-     * @return Returns the testDataDirectory.
-     */
-    protected File getTestDataDirectory()
-    {
-        return testDataDirectory;
-    }
-
-    /** Encrypt a text file */
-    public void testTextEncryption() throws Exception
-    {
-        File sourceFile = new File( this.getTestDataDirectory(), "plain.txt" );
-        File targetFile = new File( this.getTempDataDirectory(), "plain.enc.txt" );
-        CryptoUtil.encrypt( sourceFile, targetFile, this.getPassword() );
-    }
-
-    /** Decrypt a text file */
-    public void testTextDecryption() throws Exception
-    {
-        testTextEncryption();
-        File sourceFile = new File( this.getTempDataDirectory(), "plain.enc.txt" );
-        File targetFile = new File( this.getTempDataDirectory(), "plain.dec.txt" );
-        CryptoUtil.decrypt( sourceFile, targetFile.getAbsolutePath(), this.getPassword() );
-    }
-
-    /** Encrypt an empty text file */
-    public void testEmptyTextEncryption() throws Exception
-    {
-        File sourceFile = new File( this.getTestDataDirectory(), "empty.txt" );
-        File targetFile = new File( this.getTempDataDirectory(), "empty.enc.txt" );
-        CryptoUtil.encrypt( sourceFile, targetFile, this.getPassword() );
-    }
-
-    /** Decrypt a text file */
-    public void testEmptyTextDecryption() throws Exception
-    {
-        testEmptyTextEncryption();
-        File sourceFile = new File( this.getTempDataDirectory(), "empty.enc.txt" );
-        File targetFile = new File( this.getTempDataDirectory(), "empty.dec.txt" );
-        CryptoUtil.decrypt( sourceFile, targetFile, this.getPassword() );
-    }
-
-    /** Encrypt a PDF file */
-    public void testPdfEncryption() throws Exception
-    {
-        File sourceFile = new File( this.getTestDataDirectory(), "plain.pdf" );
-        File targetFile = new File( this.getTempDataDirectory(), "plain.enc.pdf" );
-        CryptoUtil.encrypt( sourceFile, targetFile, this.getPassword() );
-    }
-
-    /** Decrypt a PDF file */
-    public void testPdfDecryption() throws Exception
-    {
-        testPdfEncryption();
-        File sourceFile = new File( this.getTempDataDirectory(), "plain.enc.pdf" );
-        File targetFile = new File( this.getTempDataDirectory(), "plain.dec.pdf" );
-        CryptoUtil.decrypt( sourceFile, targetFile, this.getPassword() );
-    }
-
-    /** Encrypt a ZIP file */
-    public void testZipEncryption() throws Exception
-    {
-        File sourceFile = new File( this.getTestDataDirectory(), "plain.zip" );
-        File targetFile = new File( this.getTempDataDirectory(), "plain.enc.zip" );
-        CryptoUtil.encrypt( sourceFile, targetFile, this.getPassword() );
-    }
-
-    /** Decrypt a ZIP file */
-    public void testZipDecryption() throws Exception
-    {
-        testZipEncryption();
-        File sourceFile = new File( this.getTempDataDirectory(), "plain.enc.zip" );
-        File targetFile = new File( this.getTempDataDirectory(), "plain.dec.zip" );
-        CryptoUtil.decrypt( sourceFile, targetFile, this.getPassword() );
-    }
-
-    /** Encrypt a UTF-16 XML file */
-    public void testXmlUTF16Encryption() throws Exception
-    {
-        File sourceFile = new File( this.getTestDataDirectory(), "plain-utf16.xml" );
-        File targetFile = new File( this.getTempDataDirectory(), "plain-utf16.enc.xml" );
-        CryptoUtil.encrypt( sourceFile, targetFile, this.getPassword() );
-    }
-
-    /** Decrypt a UTF-16 XML file */
-    public void testXMLUTF16Decryption() throws Exception
-    {
-        testXmlUTF16Encryption();
-        File sourceFile = new File( this.getTempDataDirectory(), "plain-utf16.enc.xml" );
-        File targetFile = new File( this.getTempDataDirectory(), "plain-utf16.dec.xml" );
-        CryptoUtil.decrypt( sourceFile, targetFile, this.getPassword() );
-    }
-
-    /** Encrypt a UTF-8 XML file */
-    public void testXmlUTF8Encryption() throws Exception
-    {
-        File sourceFile = new File( this.getTestDataDirectory(), "plain-utf8.xml" );
-        File targetFile = new File( this.getTempDataDirectory(), "plain-utf8.enc.xml" );
-        CryptoUtil.encrypt( sourceFile, targetFile, this.getPassword() );
-    }
-
-    /** Decrypt a UTF-8 XML file */
-    public void testXMLUTF8Decryption() throws Exception
-    {
-        testXmlUTF8Encryption();
-        File sourceFile = new File( this.getTempDataDirectory(), "plain-utf8.enc.xml" );
-        File targetFile = new File( this.getTempDataDirectory(), "plain-utf8.dec.xml" );
-        CryptoUtil.decrypt( sourceFile, targetFile, this.getPassword() );
-    }
-
-    /** Encrypt a ISO-8859-1 XML file */
-    public void testXmlISO88591Encryption() throws Exception
-    {
-        File sourceFile = new File( this.getTestDataDirectory(), "plain-iso-8859-1.xml" );
-        File targetFile = new File( this.getTempDataDirectory(), "plain-iso-8859-1.enc.xml" );
-        CryptoUtil.encrypt( sourceFile, targetFile, this.getPassword() );
-    }
-
-    /** Decrypt a UTF-8 XML file */
-    public void testXmlISO88591Decryption() throws Exception
-    {
-        testXmlISO88591Encryption();
-        File sourceFile = new File( this.getTempDataDirectory(), "plain-iso-8859-1.enc.xml" );
-        File targetFile = new File( this.getTempDataDirectory(), "plain-iso-8859-1.dec.xml" );
-        CryptoUtil.decrypt( sourceFile, targetFile, this.getPassword() );
-    }
-    /** Test encryption and decryption of Strings */
-    public void testStringEncryption() throws Exception
-    {
-        char[] testVector = new char[513];
-
-        for( int i=0; i<testVector.length; i++ )
-        {
-            testVector[i] = (char) i;
-        }
-
-        String source = new String( testVector );
-        String cipherText = CryptoUtil.encryptString( source, this.getPassword() );
-        String plainText = CryptoUtil.decryptString( cipherText, this.getPassword() );
-        assertEquals( source, plainText );
-    }
-
-    /** Test encryption and decryption of Strings */
-    public void testStringHandling() throws Exception
-    {
-        String source = "Nobody knows the toubles I have seen ...";
-        String cipherText = CryptoUtil.encryptString( source, this.getPassword() );
-        String plainText = CryptoUtil.decryptString( cipherText, this.getPassword() );
-        assertEquals( source, plainText );
-    }
-
-    /** Test encryption and decryption of binary data */
-    public void testBinaryHandling() throws Exception
-    {
-        byte[] source = new byte[256];
-        byte[] result = null;
-
-        for( int i=0; i<source.length; i++ )
-        {
-            source[i] = (byte) i;
-        }
-
-        ByteArrayOutputStream cipherText = new ByteArrayOutputStream();
-        ByteArrayOutputStream plainText = new ByteArrayOutputStream();
-
-        CryptoUtil.encrypt( source, cipherText, this.getPassword() );
-        CryptoUtil.decrypt( cipherText, plainText, this.getPassword() );
-
-        result = plainText.toByteArray();
-
-        for( int i=0; i<source.length; i++ )
-        {
-            if( source[i] != result[i] )
-            {
-                fail( "Binary data are different at position " + i );
-            }
-        }
-    }
-
-    /** Test creating a password */
-    public void testPasswordFactory() throws Exception
-    {
-        char[] result = null;
-        result = PasswordFactory.create();
-        System.out.println( new String(result) );
-        result = PasswordFactory.create( this.getPassword() );
-        System.out.println( new String(result) );        
-        assertNotNull(result);
-        return;
-    }
-
-    public void testHexConverter() throws Exception
-    {
-        String source = "DceuATAABWSaVTSIK";
-        String hexString = HexConverter.toString( source.getBytes() );
-        String result = new String( HexConverter.toBytes( hexString ) );
-        assertEquals( source, result );
-    }
-
-    /** Test encryption and decryption of Strings */
-    public void testPasswordEncryption() throws Exception
-    {
-        char[] password = "57cb-4a23-d838-45222".toCharArray();
-        String source = "e02c-3b76-ff1e-5d9a1";
-        String cipherText = CryptoUtil.encryptString( source, password );
-        String plainText = CryptoUtil.decryptString( cipherText, password );
-        assertEquals( source, plainText );
-    }
-
-}
diff --git a/fulcrum-yaafi-crypto-1.0.7/src/test/org/apache/fulcrum/jce/crypto/Main.java b/fulcrum-yaafi-crypto-1.0.7/src/test/org/apache/fulcrum/jce/crypto/Main.java
deleted file mode 100644
index c4488ec..0000000
--- a/fulcrum-yaafi-crypto-1.0.7/src/test/org/apache/fulcrum/jce/crypto/Main.java
+++ /dev/null
@@ -1,181 +0,0 @@
-package org.apache.fulcrum.jce.crypto;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
-
-/**
- * Command line tool for encrypting/decrypting files
- *
- * file [enc|dec] passwd [file]*
- * string [enc|dec] passwd plaintext
- *
- * @author <a href="mailto:siegfried.goeschl@it20one.at">Siegfried Goeschl</a>
- */
-
-public class Main
-{
-    /**
-     * Allows testing on the command line.
-     * 
-     * @param args the command line parameters
-     */
-    public static void main( String[] args )
-    {
-        try
-        {
-            if( args.length < 3 )
-            {
-                printHelp();
-                throw new IllegalArgumentException("Invalid command line");
-            }
-
-            String operationMode = args[0];
-
-            if( operationMode.equals("file") )
-            {
-                processFiles(args);
-            }
-            else if( operationMode.equals("string") )
-            {
-                processString(args);
-            }
-        }
-        catch (Exception e)
-        {
-            System.out.println("Error : " + e.getMessage());
-        }
-    }
-
-    /**
-     * Prints usage information.
-     */
-    public static void printHelp()
-    {
-        System.out.println("Main file [enc|dec] passwd source [target]");
-        System.out.println("Main string [enc|dec] passwd ");
-    }
-
-    /**
-     * Decrypt/encrypt a list of files
-     * @param args the command line
-     * @throws Exception the operation failed
-     */
-    public static void processFiles(String[] args)
-        throws Exception
-    {
-        String cipherMode = args[1];
-        char[] password = args[2].toCharArray();
-        File sourceFile = new File(args[3]);
-        File targetFile = null;
-
-        if( args.length == 4 )
-        {
-            targetFile = sourceFile;
-        }
-        else
-        {
-            targetFile = new File(args[4]);
-            File parentFile = targetFile.getParentFile(); 
-
-            if(parentFile != null)
-            {
-                parentFile.mkdirs();
-            }
-        }
-
-        processFile(cipherMode,password,sourceFile,targetFile);
-    }
-
-    /**
-     * Decrypt/encrypt a single file
-     * @param cipherMode the mode
-     * @param password the passwors
-     * @param sourceFile the file to process
-     * @param targetFile the targetf file
-     * @throws Exception the operation failed
-     */
-    public static void processFile(String cipherMode, char[] password, File sourceFile, File targetFile)
-        throws Exception
-    {
-        FileInputStream fis = new FileInputStream(sourceFile);
-        ByteArrayOutputStream baos = new ByteArrayOutputStream();
-
-        if( cipherMode.equals("dec") )
-        {
-            System.out.println("Decrypting " + sourceFile.getAbsolutePath() );
-            CryptoUtil.decrypt( fis, baos, password );
-            fis.close();
-
-            ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
-            FileOutputStream fos = new FileOutputStream(targetFile);
-            CryptoUtil.copy(bais,fos);
-            bais.close();
-            fos.close();
-        }
-        else if( cipherMode.equals("enc") )
-        {
-            System.out.println("Enrypting " + sourceFile.getAbsolutePath() );
-            CryptoUtil.encrypt( fis, baos, password );
-            fis.close();
-
-            ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
-            FileOutputStream fos = new FileOutputStream(targetFile);
-            CryptoUtil.copy(bais,fos);
-            bais.close();
-            fos.close();
-        }
-        else
-        {
-            String msg = "Don't know what to do with : " + cipherMode;
-            throw new IllegalArgumentException(msg);
-        }
-    }
-
-    /**
-     * Decrypt/encrypt a string.
-     * 
-     * @param args the command line
-     * @throws Exception the operation failed
-     */
-    public static void processString(String[] args)
-        throws Exception
-    {
-        String cipherMode = args[1];
-        char[] password = args[2].toCharArray();
-        String value = args[3];
-        String result = null;
-
-        if( cipherMode.equals("dec") )
-        {
-            result = CryptoUtil.decryptString(value,password);
-        }
-        else
-        {
-            result = CryptoUtil.encryptString(value,password);
-        }
-
-        System.out.println( result );
-    }
-}
\ No newline at end of file
diff --git a/fulcrum-yaafi-crypto-1.0.7/src/test/org/apache/fulcrum/jce/crypto/MainTest.java b/fulcrum-yaafi-crypto-1.0.7/src/test/org/apache/fulcrum/jce/crypto/MainTest.java
deleted file mode 100644
index 352990f..0000000
--- a/fulcrum-yaafi-crypto-1.0.7/src/test/org/apache/fulcrum/jce/crypto/MainTest.java
+++ /dev/null
@@ -1,81 +0,0 @@
-package org.apache.fulcrum.jce.crypto;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import junit.framework.TestCase;
-
-/**
- * Test suite for crypto functionality
- *
- * @author <a href="mailto:siegfried.goeschl@it20one.at">Siegfried Goeschl</a>
- */
-
-public class MainTest extends TestCase
-{
-    /** the password to be used */
-    private String password;
-
-    /**
-     * Constructor
-     * @param name the name of the test case
-     */
-    public MainTest( String name )
-    {
-        super(name);
-
-        this.password = "foobar";
-    }
-
-    /**
-     * @return Returns the password.
-     */
-    protected char[] getPassword()
-    {
-        return password.toCharArray();
-    }
-
-    /** Encrypt a string on the command line */
-    public void testStringEncryption()
-    {
-        String[] encryptionArgs = { "string", "enc", this.password, "mysecretpassword"};
-        Main.main(encryptionArgs);
-        String[] decryptionArgs = { "string", "dec", this.password, "9330419fc003b4e1461986782625db13f4c8c81c340a9caa"};
-        Main.main(decryptionArgs);
-    }
-
-    /** Encrypt a text file on the command line */
-    public void testFileEncryption1()
-    {
-        String[] encryptionArgs = { "file", "enc", this.password, "./src/test/data/plain.txt", "./target/main/plain.enc.txt" };
-        String[] decryptionArgs = { "file", "dec", this.password, "./target/main/plain.enc.txt", "./target/main/plain.dec.txt" };
-        Main.main(encryptionArgs);
-        Main.main(decryptionArgs);
-    }
-
-    /** Encrypt a text file in-place on the command line */
-    public void testFileEncryption2()
-    {
-        String[] encryptionArgs = { "file", "enc", this.password, "./src/test/data/plain.txt", "./target/main/plain.txt" };
-        String[] decryptionArgs = { "file", "dec", this.password, "./target/main/plain.txt" };
-        Main.main(encryptionArgs);
-        Main.main(decryptionArgs);
-    }
-
-}
\ No newline at end of file
diff --git a/fulcrum-yaafi-crypto-1.0.7/src/test/org/apache/fulcrum/jce/crypto/SmartDecryptingInputStreamTest.java b/fulcrum-yaafi-crypto-1.0.7/src/test/org/apache/fulcrum/jce/crypto/SmartDecryptingInputStreamTest.java
deleted file mode 100644
index 7bcfd96..0000000
--- a/fulcrum-yaafi-crypto-1.0.7/src/test/org/apache/fulcrum/jce/crypto/SmartDecryptingInputStreamTest.java
+++ /dev/null
@@ -1,231 +0,0 @@
-package org.apache.fulcrum.jce.crypto;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.File;
-import java.io.FileInputStream;
-
-import junit.framework.TestCase;
-
-/**
- * Test suite for SmartDecryptingInputStream
- *
- * @author <a href="mailto:siegfried.goeschl@it20one.at">Siegfried Goeschl</a>
- */
-
-public class SmartDecryptingInputStreamTest extends TestCase
-{
-    /** the password to be used */
-    private String password;
-
-    /** the test data directory */
-    private File testDataDirectory;
-
-    /** the temp data director */
-    private File tempDataDirectory;
-
-    /**
-     * Constructor
-     * @param name the name of the test case
-     */
-    public SmartDecryptingInputStreamTest( String name )
-    {
-        super(name);
-
-        this.password = "mysecret";
-        this.testDataDirectory = new File( "./src/test/data" );
-        this.tempDataDirectory = new File( "./temp" );
-    }
-
-    /**
-     * @see junit.framework.TestCase#setUp()
-     */
-    protected void setUp() throws Exception
-    {
-        CryptoStreamFactoryImpl factory = new CryptoStreamFactoryImpl(
-            CryptoParameters.SALT,
-            CryptoParameters.COUNT
-            );
-
-        CryptoStreamFactoryImpl.setInstance( factory );
-    }
-
-    /**
-     * @return Returns the password.
-     */
-    protected char[] getPassword()
-    {
-        return password.toCharArray();
-    }
-
-    /**
-     * @return Returns the tempDataDirectory.
-     */
-    protected File getTempDataDirectory()
-    {
-        return tempDataDirectory;
-    }
-
-    /**
-     * @return Returns the testDataDirectory.
-     */
-    protected File getTestDataDirectory()
-    {
-        return testDataDirectory;
-    }
-
-    public void testSmartEmtpyDecryption() throws Exception
-    {
-        this.testSmartDecryption("empty.txt","ISO-8859-1");
-    }
-
-    public void testSmartTextDecryption() throws Exception
-    {
-        this.testSmartDecryption("plain.txt","ISO-8859-1");
-    }
-
-    public void testSmartGroovyDecryption() throws Exception
-    {
-        this.testSmartDecryption("plain.groovy","ISO-8859-1");
-    }
-
-    public void testSmartXmlIso8859Utf8Decryption() throws Exception
-    {
-        this.testSmartDecryption("plain-iso-8859-1.xml","ISO-8859-1");
-    }
-
-    public void testSmartXmlUtf8Decryption() throws Exception
-    {
-        this.testSmartDecryption("plain-utf8.xml","UTF-8");
-    }
-
-    public void testSmartXmlUtf16Decryption() throws Exception
-    {
-        this.testSmartDecryption("plain-utf16.xml","UTF-16");
-    }
-
-    public void testPDFDecryption() throws Exception
-    {
-        this.testSmartDecryption("plain.pdf","ISO-8859-1");
-    }
-
-    public void testZIPDecryption() throws Exception
-    {
-        this.testSmartDecryption("plain.zip","ISO-8859-1");
-    }
-
-    /** Test smart decryption for a given file */
-    private void testSmartDecryption( String fileName, String enc ) throws Exception
-    {
-        File sourceFile = new File( this.getTestDataDirectory(), fileName );
-        String plainText = this.loadTextFile(sourceFile,enc);
-        String smartText = this.smartDecrypt(sourceFile,enc);
-        byte[] cipherText = this.encryptTextFile(sourceFile);
-        String decryptedText = this.smartDecrypt(cipherText,enc);
-
-        assertTrue( plainText.length() == smartText.length() );
-        assertTrue( plainText.length() == decryptedText.length() );
-        assertEquals( plainText, smartText );
-        assertEquals( plainText, decryptedText );
-    }
-
-    /**
-     * Loads a plain text file.
-     * @param file the file to load
-     */
-    private String loadTextFile( File file, String enc ) throws Exception
-    {
-        String result = null;
-        FileInputStream fis = new FileInputStream( file );
-        ByteArrayOutputStream baos = new ByteArrayOutputStream();
-        CryptoUtil.copy(fis,baos);
-        fis.close();
-        result = new String( baos.toByteArray(), enc );
-        return result;
-    }
-
-    /**
-     * Encrypt a plain text file.
-     * @param file the file to encrypt
-     */
-    private byte[] encryptTextFile( File file ) throws Exception
-    {
-        ByteArrayOutputStream baos = new ByteArrayOutputStream();
-        FileInputStream fis = new FileInputStream( file );
-
-        CryptoUtil.encrypt(
-            CryptoStreamFactoryImpl.getInstance(),
-            fis,
-            baos,
-            this.getPassword()
-            );
-
-        fis.close();
-
-        return baos.toByteArray();
-    }
-
-    /**
-     * Use smart decryption on a cipherText.
-     *
-     * @param cipherText the encrypted text
-     * @return the decrypeted content
-     */
-    private String smartDecrypt( byte[] cipherText, String enc ) throws Exception
-    {
-        ByteArrayInputStream bais = new ByteArrayInputStream(cipherText);
-        ByteArrayOutputStream baos = new ByteArrayOutputStream();
-
-        SmartDecryptingInputStream sdis = new SmartDecryptingInputStream(
-            CryptoStreamFactoryImpl.getInstance(),
-            bais,
-            this.getPassword()
-            );
-
-        CryptoUtil.copy(sdis,baos);
-
-        return new String( baos.toByteArray(), enc );
-    }
-
-    /**
-     * Use smart decryption on a plain text file.
-     *
-     * @param file the file to load
-     * @return the content
-     */
-    private String smartDecrypt( File file, String enc ) throws Exception
-    {
-        ByteArrayOutputStream baos = new ByteArrayOutputStream();
-        FileInputStream fis = new FileInputStream( file );
-
-        SmartDecryptingInputStream sdis = new SmartDecryptingInputStream(
-            CryptoStreamFactoryImpl.getInstance(),
-            fis,
-            this.getPassword()
-            );
-
-        CryptoUtil.copy(sdis,baos);
-        return new String( baos.toByteArray(), enc );
-    }
-
-}
diff --git a/fulcrum-yaafi-crypto-1.0.7/xdocs/changes.xml b/fulcrum-yaafi-crypto-1.0.7/xdocs/changes.xml
deleted file mode 100644
index 56db47f..0000000
--- a/fulcrum-yaafi-crypto-1.0.7/xdocs/changes.xml
+++ /dev/null
@@ -1,51 +0,0 @@
-<?xml version="1.0"?>
-<!--
- Licensed to the Apache Software Foundation (ASF) under one
- or more contributor license agreements.  See the NOTICE file
- distributed with this work for additional information
- regarding copyright ownership.  The ASF licenses this file
- to you under the Apache License, Version 2.0 (the
- "License"); you may not use this file except in compliance
- with the License.  You may obtain a copy of the License at
-
-   http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing,
- software distributed under the License is distributed on an
- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- KIND, either express or implied.  See the License for the
- specific language governing permissions and limitations
- under the License.
--->
-<document>
-  <properties>
-    <title>Fulcrum YAAFI Crytpo Library</title>
-    <author email="siegfried.goeschl@it20one.at">Siegfried Goeschl</author>
-  </properties>
-
-  <body>
-    <release version="1.0.7" date="as in SVN">
-      <action dev="painter" type="update">
-        Simplify the HexConverter code, more Java 8 friendly
-      </action>
-      <action dev="painter" type="update">
-        Update parent pom to Turbine 5
-      </action>
-      <action dev="painter" type="update">
-        Remove references to StringBuffer
-      </action>
-      <action dev="painter" type="update">
-        Fix missing license from rat report
-      </action>
-    </release>
-    <release version="1.0.6" date="as in SVN">
-      <action dev="sgoeschl" type="update">
-        Using the official fulcrum-parent-1 pom.	
-      </action>
-      <action dev="sgoeschl" type="add">
-        Moving the code out of YAAFI and make a standalone library.
-      </action>
-    </release>
-  </body>
-</document>
-
diff --git a/fulcrum-yaafi-crypto-1.0.7/xdocs/downloads.xml b/fulcrum-yaafi-crypto-1.0.7/xdocs/downloads.xml
deleted file mode 100644
index dc80df1..0000000
--- a/fulcrum-yaafi-crypto-1.0.7/xdocs/downloads.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- Licensed to the Apache Software Foundation (ASF) under one
- or more contributor license agreements.  See the NOTICE file
- distributed with this work for additional information
- regarding copyright ownership.  The ASF licenses this file
- to you under the Apache License, Version 2.0 (the
- "License"); you may not use this file except in compliance
- with the License.  You may obtain a copy of the License at
-
-   http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing,
- software distributed under the License is distributed on an
- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- KIND, either express or implied.  See the License for the
- specific language governing permissions and limitations
- under the License.
--->
-<document>
-  <properties>
-    <title>Fulcrum YAAFI Avalon Container</title>
-  </properties>
-  <body>
-    <section name="Downloads">
-      <p>List of available downloads.</p>
-      <table>
-        <tr>
-          <th>Download Links</th>
-          <th>Release Notes</th>
-        </tr>
-        <tr>
-          <td>
-            <a href="http://www.apache.org/dyn/closer.cgi/turbine/fulcrum/fulcrum-yaafi-crypto/binaries/fulcrum-yaafi-crypto-1.0.6-bin.zip">Fulcrum's YAAFI Crypto v1.0.6</a>
-          </td>
-          <td>
-            <a href="announcements/announcement-1.0.6.txt">1.0.6</a>
-          </td>
-        </tr>
-      </table>
-    </section>
-  </body>
-</document>
diff --git a/fulcrum-yaafi-crypto-1.0.7/xdocs/index.xml b/fulcrum-yaafi-crypto-1.0.7/xdocs/index.xml
deleted file mode 100644
index 47079d7..0000000
--- a/fulcrum-yaafi-crypto-1.0.7/xdocs/index.xml
+++ /dev/null
@@ -1,123 +0,0 @@
-<?xml version="1.0"?>
-<!--
- Licensed to the Apache Software Foundation (ASF) under one
- or more contributor license agreements.  See the NOTICE file
- distributed with this work for additional information
- regarding copyright ownership.  The ASF licenses this file
- to you under the Apache License, Version 2.0 (the
- "License"); you may not use this file except in compliance
- with the License.  You may obtain a copy of the License at
-
-   http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing,
- software distributed under the License is distributed on an
- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- KIND, either express or implied.  See the License for the
- specific language governing permissions and limitations
- under the License.
--->
-
-<document>
-
-  <properties>
-    <title>Fulcrum Crypto Library</title>
-    <author email="siegfried.goeschl@it20one.at">Siegfried Goeschl</author>
-  </properties>
-
-  <body>
-
-    <section name="Overview">
-      <p> Fulcrum YAFFI Crypto Library is an extension library for Fulcrum YAAFI to support
-        transparent decryption of configuration files. The encryption/decryption is based on DES
-        using 56 bit key length. </p>
-    </section>
-
-    <section name="Functionality">
-      <p> This library exposes the following functionality <ul>
-          <li>password factory to create safer passwords</li>
-          <li>creation of decrypting input streams</li>
-          <li>creation of enrypting output streams</li>
-        </ul>
-      </p>
-      <subsection name="Password Creation">
-        <p> Why someone need a password factory to create safer password?! People tend to use weak
-          password vunerable to dictionary attacks. To improve the situation you have a base
-          password which you convert into the real password using the PasswordFactory. For the
-          password generation the base password is salted and repeatedly hashed to generate a UUID
-          string (which you can still manually enter on the keyboard). Furthermore the password
-          generation allows you to hide the "real" password in the case that you need to store your
-          password directly in your code or configuration.<table>
-            <tr>
-              <td>Base Text Password</td>
-              <td>Computed Text Password</td>
-            </tr>
-            <tr>
-              <td>fulcrum-yaafi</td>
-              <td>727a-98b9-93be-4537c</td>
-            </tr>
-            <tr>
-              <td>mysecret</td>
-              <td>62cc-bf14-1814-672da</td>
-            </tr>
-          </table>
-        </p>
-      </subsection>
-      <subsection name="Decrypting InputStreams">
-        <p> A decrypting input stream allows to apply transparent decryption of an input stream.
-          Transparently also means that the implementation is able to look at the content to decide
-          if it is encrypted at all - this is a so-called "SmartDecryptingInputStream". </p>
-      </subsection>
-      <subsection name="Encrypting OutputStreams">
-        <p> A encrypting output stream allows to apply transparent encryption of an output stream.
-        </p>
-      </subsection>
-    </section>
-
-    <section name="Cryptography Support">
-      <subsection name="JDK Support">
-        <table>
-          <tr>
-            <td>JDK 1.3.x</td>
-            <td> For JDK 1.3.x the <a href="http://java.sun.com/products/jce/index-122.html"> Java
-                Cryptography Extension (JCE) 1.2.2</a> needs to be installed. Furthermore you need
-              to add the jce1_2_2.jar to your Maven repository and project.xml </td>
-          </tr>
-          <tr>
-            <td>JDK 1.4.x</td>
-            <td> The current JDK's have the JCA built-in therefore no extra configuration is
-              required. </td>
-          </tr>
-          <tr>
-            <td>JDK 1.5.x</td>
-            <td> The current JDK's have the JCA built-in therefore no extra configuration is
-              required. </td>
-          </tr>
-          <tr>
-            <td>JDK 1.6.x</td>
-            <td> The current JDK's have the JCA built-in therefore no extra configuration is
-              required. </td>
-          </tr>
-        </table>
-      </subsection>
-      <subsection name="Availabe Algorithms">
-        <table>
-          <tr>
-            <th>Provider Version</th>
-            <th>Algorithms</th>
-          </tr>
-          <tr>
-            <td>SunJCE 1.22</td>
-            <td>PBEWithMD5AndDES</td>
-          </tr>
-          <tr>
-            <td>SunJCE 1.42</td>
-            <td> PBEWithMD5AndDES </td>
-          </tr>
-        </table>
-      </subsection>
-    </section>
-
-  </body>
-
-</document>