<?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</title>
    <author email="epugh@upstate.com">Eric Pugh</author>
  </properties>

  <body>
    <release version="1.0.9-SNAPSHOT" date=" in VC">
    </release>
    <release version="1.0.8" date=" 2019-02-05">
       <action dev="painter" type="update">
         Use commons-codec for basic encryption algorithms
       </action>
       <action dev="painter" type="update">
         PMD report cleanup
       </action>
       <action dev="painter" type="update">
         Update to yaafi 1.0.8
       </action>
       <action dev="painter" type="update">
         Derive from Turbine parent POM 5
       </action>
    </release>
    <release version="1.0.7" date="2009-09-10">
      <action dev="sgoeschl" type="update">
        Moving to M2 build
      </action>
    </release>
    <release version="1.0.6" date="2007-11-26">
      <action dev="sgoeschl" type="update">
        Getting rid of all external dependencies - in particular
        the crytptix library. The cryptix library contains strong
        encyryption algorithm causing problems using the software
        outside of the US (ECCN). Copy and wasted some source from
        JetSpeed (UnixCrpyt) and commons-codec (Base64).
      </action>
      <action dev="sgoeschl" type="update">
        Upgrading to javamail-1.3.2
      </action>
    </release>
    <release version="1.0.5" date="2004-11-24">
      <action dev="epugh" type="update" due-to="Kostyantyn Shchekotykhin">
        Merge api and impl jars into one project.
      </action>
      <action dev="epugh" type="update">
        Add ECM based tests.
      </action>
      <action dev="epugh" type="update" due-to="Youngho Cho">
        Update to use commons-codec-1.3
      </action>
    </release>
    <release version="1.0.4" date="">
      <action dev="epugh" type="update">
        Update to use Merlin 3.3.0
      </action>
      <action dev="epugh" type="add">
        Implementing the merlinized code.
      </action>
    </release>
    <release version="1.0-alpha-3" date="11-18-2003">
      <action dev="epugh" type="add">
        Integrated howto documentation on main page.
      </action>
    </release>

  </body>
</document>

