              Apache Commons Codec 1.11 RELEASE NOTES

The Apache Commons Codec team is pleased to announce the commons-codec-1.11-SNAPSHOT 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:

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