KSE PWSLIB CHANGELOG

Version 2-8-0 (05 Oct 2018)


== KSE Password Safe Library ==
== Supported file format: PWS 3.13 ==

CHANGELOG
Text modified: 07 Oct 2018


Actual Release 2-8-0, Date: 05 Oct. 2018
----------------------------------------

- Loading files now can throw the StreamCorruptedException.
- DefaultRecordWrapper now holds the record properties as a Properties instance.


Release 2-7-0, Date: 01 Feb. 2017
---------------------------------

- this is a major release including interface and some behaviour changes. Thorough testing
  of usage is required when replacing previous versions!

- introduction of a multi-field (3) sort facility in OrderedRecordList including sort
  directions ASCENDING and DESCENDING. Enum DefaultRecordWrapper.SortField describes
  available datafields as sort options.

- PwsRecordList.merge has a new return type of 3 record lists which make traceable what
  has happened during merge.

- the logical database name is made more easily available through new method 
  PwsFile.getDatabaseName().

- introduction of a time-stamp value for PwsFile representing a real or assumed
  time marker of the external state (used for detecting file save conflicts).

- minor corrections; PwsRecordList made Iterable


Release 2-6-0, Date: 19 Jun. 2016
---------------------------------

- this is a major release including interface and some behaviour changes. Thorough testing
  of usage is required when replacing previous versions!

- for files of version 3: fixed conversion from user input character string to primary 
  file access key material to UTF-8 encoding. Password Safe V3 format definition was 
  unspecific to this point and hitherto practice relied on the JVM default which basically 
  is locale and OS specific.
  In order to standardise file access among varying locations of use, this step was required.
  In consequence of this modification, failing file access may occur if characters outside 
  of ASCII have been used as key material. In this case the file should be opened in a previous
  version of this software and the access key modified to a key which contains only ASCII 
  characters. This modified file should be able to open under new conditions (2-6 and later). 
  There is no other solution.

- Extra Fields in PwsRecord (record data field types outside of the Password Safe data canon)
  are now stored encrypted in memory; was cleartext before. 

- the standard (internal) cipher used and provided by PWSLIB package is now Twofish ECB 
  (was Blowfish before).

- performance of crypting and file reading routines has been improved.


Release 2-5-2, Date: 30 Apr. 2016
---------------------------------

- minor adjustments to please JPasswords 0-8-0-RC1; general upgrade not required.
- PwsFile.SECURITY_ITERATIONS_MAXIMUM has been set to 2048*2048*100.


Release 2-5-1, Date: 26 Mar. 2016
---------------------------------

- corrected a bug in CryptoRandom that reduced the value range of nextInt(int)
  and appeared to prefer negative values in nextLong()
- corrected a bug in OrderedRecordList which falsely kept some updated old record
  states (doubles) after reindex when record title has changed
- minor improvements


Release 2-5-0, Date: 24 Dec. 2015
---------------------------------

- some minor bug fixes
- corrected reading of key-stroke data element in records
- corrected a sorting problem when two records have same naming head
- PwsPassphrasePolicy now allows 1024 (was 256) length for generated passwords,
  default key-length is 10 (was 8)
- extended interface methods for ContextFile, PwsFileEvent, PwsRecordList,
  OrderedRecordList
- modified interface: PwsFile saveCopy() methods now work with ContextFile 
  parameter
- improved event reporting in PwsRecordList (now issues SINGLE RECORD events in
  cases where parameter record lists contain only one element)
- OrderedListEvent has additional event type: ITEM_UPDATED
- OrderedRecordList reworked to issue 'item updated' events when underlying
  database issues single-record update (was remove+insert before)
- new utility class ArrayIterator

Release 2-4-0, Date: 07 Nov. 2015
---------------------------------

- all parts were overhauled for standardised coding style and improved
  Javadoc descriptions
- PwsRecordList was particularly overhauled for increased efficiency and
  performance
- added methods and constructors in PwsRecordList, PwsFile and ContextFile
  to improve usability
- OrderedRecordList restructured and now features a record filtering tool
- FilterRecordList removed (functionality replaced by OrderedRecordList)
- FTP application adapter rewritten for use of external library ftp4j-1.7.2.jar
  by Sauron Software, Italy. FTP functionality is offered under LGPL license as
  supplement
- introduced JUnit testing for PwsRecordList and PwsFile
- Log now has an opening for definiing expressions to suppress messages


Release 2-3-1, Date: 20 Feb. 2013
---------------------------------

- PwsFile.setPersistentFile(ContextFile) now allows for the null parameter 
  which is equivalent to PwsFile.setFilePath(null).
- new exception  LoginFailureException has been created to replace 
  sun.net.ftp.FtpLoginException outwardly. 
- security update for the encryption/decryption process. With thorough memory
  testing
  some spreading of decrypted content garbage onto the VM (temporary!) data 
  heap have 
  been removed. VM memory should now be clean from decrypted database content
  after reading or writing, except for Title and User-Name.
- CryptoRandom cryptographical random generator now runs on SHA512 instead of
  SHA1.   

Release 2-3-0, Date: 15 Nov. 2012
---------------------------------

- compatibility to PWS file format 3.10; this format interpretation relies on 
  the format definition of PasswordSafe program version 3.29
- interface supported new record fields:
     . autotype String, character sequence for autotype command
     . passPolicyName String, name of listed password policy used in record
     . expiryInterval integer, number of days for a password validity period
     . protectedEntry boolean, whether record is write-protected
- unused definition elements of V3.10 (not available in interface):
     . runCommand String
     . dclickAction String
     . shiftDclickAction String
- Password Policy is stored in a new format definition; we use an extended version
  which in rare cases currently is not recognised by the PasswordSafe program!!
- slight modification of the file-event dispatch behaviour (in favour of single 
  record modifications)


Release 2-2-1, Date: 03 May 2012
--------------------------------

- compatibility to PWS format 3.6
- support of new record fields EMAIL and EXPIRY INTERVAL
- PwsRecord: test for semantical identity of records (extension to "equals")  
- minor additions and bugfixes to comply with programmatic demands
  

Release 2-1-0, Date: 01 Sep. 2007
----------------------------------------
This is a release with minor enhancements and upgrading to file format
PWS 3.2.

Corrected Bugs:
- removed a malfunctioning in FTP/HTTP-adapter which caused occasional incomplete
  file downloads
- removed a bug which allowed for corrupted databases when saving to a medium
  with insufficient storage space
- PwsFile: data signature value now also reflects file header fields
- improved compatibility with PWS V3 definition by storing time fields as 4-byte
  unsigned integers (8 bytes before)
- the quality of the list signature value (PwsRecordList) is improved and now based 
  on a defined order of records

Enhancements
- support of latest PasswordSafe file format version 3.2
- new header fields (PWS canon): logical database name, database description (free text), 
  last save time, last save application name
- new class "ContextFile" combines application adapter and filepath into a single
  file reference, which eases handling and some file related operations
- some new designs to load() and saveFile() methods in PwsFileFactory (parameter lists)
  (you might have to check your application!)
- Global: possibility to set application name (value stored in PWS file header)
- PwsRecordList: create shallow and deep clones
- PwsRecordList: move a set of records (assign group value)
- PwsRecordList: new merge conflict option "MERGE_INCLUDE" (includes conflicting records)
- PwsRecordList: new method to create cut set record lists
- ApplicationAdapter: new file handling functions (list paths, get file length)
- PwsFile: create shallow and deep clones
- PwsFile: setting and retrieving of encryption security loops
- PwsFile: modifications to header field list now cause file update events
- file sockets: get and set encryption security loops
- introduced class "ContextFile" as means to abstract file handling from different 
  application contexts
- ANT build.xml supplied


Release 2-0-0, Date: 14 Nov. 2006
---------------------------------
This is a major step release. PWSLIB now supports all historical PWS file
formats. Package interface is largely enhanced.

Enhancements:
- support of latest PasswordSafe file format version 3.0 (fully realised)
- support of all historical file formats in reading and writing
- introduction of Twofish cipher and SHA256 utility
- introduction of devices (classes) to easily read and write PWS files
  in a block-stream fashion
- introduction of devices to easily read and write PWS files
  in a field-stream fashion
- automatic detection of file format versions and abstraction
  from version differences at user interfaces
- enhancements to functions of file and record classes
- removed useless (experimental) classes "NamingComponent" that were
  part of the ApplicationAdapter interface
- modified PwsRecordList (PwsFile) iterator so that it now is possible
  to modify list content concurrently
- numerous additions to utilities and other classes which are not listed
  here


Release 0-4-1, Date: 28 Mar. 2006
---------------------------------
This is a maintenance release.

Corrected Bugs:
- package could not open original Password Safe files (since PWS 2.14)
  and reported "UnsupportedFileVersionException"

Enhancements:
- new file event type "CONTENT_ALTERED" issued when file option string has changed
  (intended for all data changes not covered by other event types)


Release 0-4-0, Date: 26 Feb. 2006
---------------------------------

Corrected Bugs:
- corrected an incompatibility to the real-existing "Password Safe" format
  which resulted in sometimes mixed Group/Title values
- corrected a bug that kept some temporary output files from being closed
  after error condition
- corrected a bug in the PwsRecordList.GroupFileIterator
- corrected a bug in PwsFile.saveCopy()


Enhancements:
- support of non-canonical data fields, both from external or user applications.
  Introduction of "unknown field" list per record allows PWS files to
  preserve field values of unknown field types for saved persistent states
- new methods in class PwsRecord: "void setExtraField (int id, byte[] value)"
  and "byte[] getExtraField (int id)" to allow access to non-canonical
  data fields
- new and improved methods for identifying and renaming GROUPs and 
  removing groups of records
- new method to obtain an ordered list of all used GROUP values
- integrated automated normalization of GROUP values in "PwsRecord.setGroup(String group)"
- new PwsFileEvent "LIST_SAVED" 
- changed charset interpretation of file option string from "US-ASCII" to "ISO-8859-1"
- interface improvements through additional methods


Release 0-3-1, Date: 26 Oct. 2005
---------------------------------

Corrected Bugs:
- AbstactFTPAdapter now returns more likely a meaningful value for getModifiedTime()
  (returned 0 before)
- corrected a bug in PwsRecordList.merge() that produced irrelevant error messages

Enhancements:
- improved speed of loading and record list manipulation


Release 0-3-0, Date: 29 Sep. 2005
---------------------------------

- New class org.jpws.pwslib.crypto.CryptoRandom is a cryptologically optimized random 
  value generator. This is regularly used for the generation of random passwords.
- publically available random generator instance under Util.cryptoRand
- new static utility class org.jpws.pwslib.global.PassphraseUtils to generate 
  cryptographically high quality random passwords
- method: merge a record list into a record list under various conflict solving policies
- method: count expired records in a record list
- new property "Import Status" of a PwsRecord. This can adopt values 0 (not imported), 
  IMPORTED or IMPORTED_CONFLICT
- new calculation "will expire on given date" for a PwsRecord
- new exception InputInterruptedException
- profoundly remodelled interface of org.jpws.pwslib.global.Global in respect to 
  application adapters. The list of adapters was removed; instead a single standard adapter 
  can be defined more easily
- "fingerPrint(byte[])" method in org.jpws.pwslib.global.Util returning a SHA-1 of a given array
- new package org.jpws.pwslib.order containing 4 classes designed for ordered representation 
  of PwsRecordLists
- new class org.jpws.pwslib.order.DefaultRecordWrapper allows to represent a single PwsRecord in 
  a way that allows quick reference for sorting and other display purposes;
  also allows searching for text in a record.
- new class org.jpws.pwslib.order.OrderedRecordList which represents a PwsRecordList in a sorted 
  form with indexed access methods. This allows table and other sorted display models.
- new abstract class org.jpws.pwslib.order.FilterRecordList represents a filtered subset of an 
  OrderedRecordList. The filter function is to be implemented by subclasses. 
- OrderedListEvents issued by OrderedRecordList (and FilterRecordList)
- new class org.jpws.pwslib.persist.DefaultUrlAdapter is an IO-context for all net/internet 
  protocols available through the java.net package, but for reading files only
- new abstract class org.jpws.pwslib.persist.AbstractFTPAdapter is the basic implementation for
  a read/write FTP IO-context

Summary:

The most prominent innovation is the transfer of the record ordering utilities from JPasswords 
to PWSLIB. Thus other applications can profit more easily from these useful implementations. 
Second prominent is the introduction of a cryptologically relevant random generator and the 
availability of a random password generator (following PwsPassphrasePolicy). Third, some new 
ApplicationAdapter classes increase availability of IO-contexts for URL notations.


First Release 0-1-0, Date: 08 Aug. 2005
---------------------------------------