              Apache Apache Commons Codec 1.14 RELEASE NOTES
              December 30 2019

The Apache Commons Codec package contains simple encoder and decoders for
various formats such as Base64 and Hexadecimal.  In addition to these
widely used encoders and decoders, the codec package also maintains a
collection of phonetic encoding utilities.

Feature and fix release.

Changes in this version include:

New features:
o CODEC-264:  Add MurmurHash3.hash128x64 methods to fix sign extension error during seeding in hash128 methods. Thanks to Claude Warren.
o CODEC-267:  Add MurmurHash3.hash32x86 methods and IncrementalHash32x86 to fix sign extension error in hash32 methods. Thanks to Claude Warren.
o CODEC-272:  Add RandomAccessFile digest methods #31. Thanks to Behrang, Alex Herbert, Gary Gregory.
o CODEC-273:  Add Path APIs to org.apache.commons.codec.digest.DigestUtils similar to File APIs. Thanks to Gary Gregory.
o CODEC-274:  Add SHA-512/224 and SHA-512/256 to DigestUtils for Java 9 and up. Thanks to Gary Gregory.
o CODEC-275:  Add missing note in javadoc when sign extension error is present #34. Thanks to Claude Warren.

Fixed Bugs:
o CODEC-261:  Hex: Allow encoding read-only ByteBuffer.
o CODEC-259:  Hex: Only use an available ByteBuffer backing array if the length equals the remaining byte count.
o CODEC-265:  BaseNCodec to expand buffer using overflow conscious code.
o CODEC-270:  Base32/64: Fixed decoding check that all the final trailing bits to discard are zero.
o CODEC-269:  Allow repeat calls to MurmurHash3.IncrementalHash32.end() to generate the same value.
o CODEC-276:  Reliance on default encoding in MurmurHash2 and MurmurHash3. Thanks to Gary Gregory.

Changes:
o CODEC-268:  MurmurHash3: Deprecate hash64 methods and hash methods accepting a String that use the default encoding.
o CODEC-277:  Don't reload standard Charsets in org.apache.commons.codec.Charsets. Thanks to Gary Gregory.
o CODEC-278:  Deprecate Charset constants in org.apache.commons.codec.Charsets in favor of java.nio.charset.StandardCharsets. Thanks to Gary Gregory.


For complete information on Apache Commons Codec, including instructions on how to submit bug reports,
patches, or suggestions for improvement, see the Apache Apache Commons Codec website:

https://commons.apache.org/proper/commons-codec/

Download page: https://commons.apache.org/proper/commons-codec/download_pool.cgi

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

              Apache Apache Commons Codec 1.13 RELEASE NOTES

The Apache Commons Codec package contains simple encoder and decoders for
various formats such as Base64 and Hexadecimal.  In addition to these
widely used encoders and decoders, the codec package also maintains a
collection of phonetic encoding utilities.

Feature and fix release.

Changes in this version include:

New features:
o CODEC-236:  MurmurHash2 for 32-bit or 64-bit value. Thanks to Viliam Holub.
o CODEC-236:  MurmurHash3 for 32-bit or 128-bit value. Thanks to Austin Appleby.

Fixed Bugs:
o CODEC-255:  ColognePhonetic handles x incorrectly Thanks to Holger Grote.
o CODEC-254:  ColognePhonetic does not treat the letter H correctly Thanks to Holger Grote.
o CODEC-134:  Reject any decode request for a value that is impossible to encode to for Base32/Base64 rather than blindly decoding.

Changes:
o CODEC-236:  Broken direct java.nio.ByteBuffer support in org.apache.commons.codec.binary.Hex. Thanks to Tomas Shestakov, Gary Gregory.


For complete information on Apache Commons Codec, including instructions on how to submit bug reports,
patches, or suggestions for improvement, see the Apache Apache Commons Codec website:

Visit https://commons.apache.org/proper/commons-codec/
Download from https://commons.apache.org/proper/commons-codec/download_codec.cgi

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

              Apache Commons Codec 1.12 RELEASE NOTES

The Apache Commons Codec team is pleased to announce the commons-codec-1.12 release!

The Apache Commons Codec package contains simple encoder and decoders for
     various formats such as Base64 and Hexadecimal.  In addition to these
     widely used encoders and decoders, the codec package also maintains a
     collection of phonetic encoding utilities.

Changes in this version include:

New features:
o Add Percent-Encoding Codec (described in RFC3986 and RFC7578)  Issue: CODEC-240. Thanks to Ioannis Sermetziadis.
o Add SHA-3 methods in DigestUtils  Issue: CODEC-251. Thanks to Gary Gregory.

Fixed Bugs:
o B64 salt generator: Random -> ThreadLocalRandom  Issue: CODEC-252.
o Wrong value calculated by Cologne Phonetic if a special character is placed between equal letters  Issue: CODEC-250. Thanks to Alex Volodko.
o ColognePhoneticTest.testIsEncodeEquals missing assertions  Issue: CODEC-246. Thanks to Oscar Luis Vera Pérez.

Changes:
o Update from Java 7 to Java 8  Issue: CODEC-253.


Have fun!
-Apache Commons Codec team


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

              Apache Commons Codec 1.11 RELEASE NOTES

The Apache Commons Codec team is pleased to announce the commons-codec-1.11 release!

The Apache Commons Codec package contains simple encoder and decoders for
     various formats such as Base64 and Hexadecimal.  In addition to these
     widely used encoders and decoders, the codec package also maintains a
     collection of phonetic encoding utilities.

Changes in this version include:

New features:
o Add support for XXHash32  Issue: CODEC-241. 
o Fluent interface for DigestUtils  Issue: CODEC-220. 
o Fluent interface for HmacUtils  Issue: CODEC-222. 
o Add support for CRC32-C  Issue: CODEC-171. Thanks to Brett Okken. 
o Add HmacAlgorithms.HMAC_SHA_224 (Java 8 only)  Issue: CODEC-217. Thanks to Gary Gregory. 
o Support JEP 287: SHA-3 Hash Algorithms  Issue: CODEC-213. Thanks to Gary Gregory. 
o Create a minimal Digest command line utility: org.apache.commons.codec.digest.Digest  Issue: CODEC-212. Thanks to Gary Gregory. 
o Add DigestUtils.getDigest(String, MessageDigest)  Issue: CODEC-210. Thanks to Gary Gregory. 
o Make some DigestUtils APIs public  Issue: CODEC-208. Thanks to Gary Gregory. 
o Add java.io.File APIs to MessageDigestAlgorithm  Issue: CODEC-206. Thanks to Gary Gregory. 
o BaseNCodecOutputStream only supports writing EOF on close()  Issue: CODEC-183. Thanks to Steven Wurster. 
o Support SHA-224 in DigestUtils on Java 8  Issue: CODEC-195. Thanks to Gary Gregory. 
o Support java.nio.ByteBuffer in org.apache.commons.codec.binary.Hex  Issue: CODEC-194. Thanks to Gary Gregory. 
o Support java.nio.ByteBuffer in DigestUtils  Issue: CODEC-193. Thanks to Michael Donaghy. 
o Add BaseNCodec.encode(byte[], int, int) input with offset and length parameters for Base64 and Base32.  Issue: CODEC-202. Thanks to Oleg Kalnichevski. 
o Add convenience method decodeHex(String).  Issue: CODEC-203. Thanks to Gary Gregory. 
o Add faster CRC32 implementation.  Issue: CODEC-205. Thanks to Gary Gregory. 
o Add convenience API org.apache.commons.codec.binary.Hex.encodeHexString(byte[]|ByteBuffer, boolean).  Issue: CODEC-224. Thanks to Gary Gregory. 
o Add Automatic-Module-Name manifest entry for Java 9.  Issue: CODEC-242. Thanks to Gary Gregory. 

Fixed Bugs:
o Base64.encodeBase64String could better use newStringUsAscii (ditto encodeBase64URLSafeString)  Issue: CODEC-145. Thanks to Jesse Glick. 
o BaseNCodec: encodeToString and encodeAsString methods are identical  Issue: CODEC-144. 
o URLCodec is neither immutable nor threadsafe  Issue: CODEC-232. 
o StringUtils.equals(CharSequence cs1, CharSequence cs2) can fail with String Index OBE  Issue: CODEC-231. 
o URLCodec.WWW_FORM_URL should be private  Issue: CODEC-230. 
o StringUtils.newStringxxx(null) should return null, not NPE  Issue: CODEC-229. 
o Fix minor resource leaks  Issue: CODEC-225. Thanks to Svetlin Zarev. 
o Base32.HEX_DECODE_TABLE contains the wrong value 32  Issue: CODEC-200. Thanks to Luciano Vernaschi. 
o Charsets Javadoc breaks build when using Java 8  Issue: CODEC-207. Thanks to Gary Gregory. 
o Bug in HW rule in Soundex  Issue: CODEC-199. Thanks to Yossi Tamari. 
o Javadoc for SHA-224 DigestUtils methods should mention Java 1.8.0 restriction instead of 1.4.0.  Issue: CODEC-209. Thanks to Gary Gregory. 
o Don't deprecate Charsets Charset constants in favor of Java 7's java.nio.charset.StandardCharsets  Issue: CODEC-219. Thanks to Gary Gregory, Sebb. 

Changes:
o Base32.decode should support lowercase letters  Issue: CODEC-234. Thanks to Christopher Schultz, Sebb. 
o Soundex should support more algorithm variants  Issue: CODEC-233. Thanks to Yossi Tamari. 
o HmacUtils.updateHmac calls reset() unnecessarily  Issue: CODEC-221. 

Removed:
o Drop obsolete Ant build  Issue: CODEC-223. 

Have fun!
-Apache Commons Codec team


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

              Apache Commons Codec 1.10 RELEASE NOTES

The Apache Commons Codec team is pleased to announce the commons-codec-1.10 release!

The Apache Commons Codec package contains simple encoder and decoders for
     various formats such as Base64 and Hexadecimal.  In addition to these
     widely used encoders and decoders, the codec package also maintains a
     collection of phonetic encoding utilities.

This feature and fix release requires a minimum of Java 1.6, same as 1.9.

Changes in this version include:

New features:

o Add Daitch-Mokotoff Soundex  
  Issue: CODEC-192. Thanks to Thomas Neidhart. 
o QuotedPrintableCodec does not support soft line break per the 'quoted-printable' example on Wikipedia
  Issue: CODEC-121. Thanks to Thomas Neidhart, Java John.
o Make possible to provide padding byte to BaseNCodec in constructor  
  Issue: CODEC-181. Thanks to Ivan Martinez-Ortiz. 

Fixed Bugs:

o Added clarification to Javadoc of Base64 concerning the use of the urlSafe parameter  
  Issue: CODEC-185. Thanks to Sean Busbey. 
o Added clarification to the Javadoc of Base[32|64]OutputStream that it is mandatory to call close()  
  Issue: CODEC-191. Thanks to Igor Savin. 
o Add support for HMAC Message Authentication Code (MAC) digests  
  Issue: CODEC-188. Thanks to Hendrik Saly. 
o Beider Morse Phonetic Matching producing incorrect tokens  
  Issue: CODEC-187. Thanks to Michael Tobias, Thomas Neidhart. 
o NullPointerException in DoubleMetaPhone.isDoubleMetaphoneEqual when using empty strings  
  Issue: CODEC-184. Thanks to Cyrille Artho. 
o Fix Javadoc 1.8.0 errors  
  Issue: CODEC-180. Thanks to Ville Skyttä. 
o Fix Java 8 build Javadoc errors  
  Issue: CODEC-189. 

Changes:

o Deprecate Charsets Charset constants in favor of Java 7's java.nio.charset.StandardCharsets  
  Issue: CODEC-178. 
o Update from commons-parent 34 to 35  
  Issue: CODEC-190. 


Have fun!
-Apache Commons Codec team


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

              Apache Commons Codec 1.9 RELEASE NOTES

The codec package contains simple encoder and decoders for
various formats such as Base64 and Hexadecimal.  In addition to these
widely used encoders and decoders, the codec package also maintains a
collection of phonetic encoding utilities.

This feature and fix release requires a minimum of Java 1.6, same as 1.8.

Changes in this version include:

Performance:
o CODEC-174: Improve performance of Beider Morse encoder. Thanks to Thomas Champagne.

Fixed Bugs:
o CODEC-175: Beider Morse does not close Scanners used to read config files. 
o CODEC-172: Base32 decode table has spurious value. Thanks to Matt Bishop. 
o CODEC-170: Link broken in Metaphone Javadoc. Thanks to Ron Wheeler, Henri Yandell. 
o CODEC-176: Spelling fixes in Javadoc and comments. Thanks to Ville Skyttä. 


For complete information on Apache Commons Codec, including instructions on how to submit bug reports,
patches, or suggestions for improvement, see the Apache Commons Codec website:

https://commons.apache.org/proper/commons-codec/
