              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 6 to Java 7  Issue: CODEC-244.
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-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/
