This class implements section 6.8. Base64 Content-Transfer-Encoding +- * from RFC 2045 Multipurpose Internet Mail Extensions (MIME) Part One: +- * Format of Internet Message Bodies by Freed and Borenstein.
+- * +- * @see RFC 2045 +- * @author Apache Software Foundation +- * @since 1.0-dev +- */ +-public class Base64 implements BinaryEncoder, BinaryDecoder { +- +- /** +- * Chunk size per RFC 2045 section 6.8. +- * +- *The {@value} character limit does not count the trailing CRLF, but counts +- * all other characters, including any equal signs.
+- * +- * @see RFC 2045 section 6.8 +- */ +- static final int CHUNK_SIZE = 76; +- +- /** +- * Chunk separator per RFC 2045 section 2.1. +- * +- * @see RFC 2045 section 2.1 +- */ +- static final byte[] CHUNK_SEPARATOR = "\r\n".getBytes(); +- +- /** +- * The base length. +- */ +- static final int BASELENGTH = 255; +- +- /** +- * Lookup length. +- */ +- static final int LOOKUPLENGTH = 64; +- +- /** +- * Used to calculate the number of bits in a byte. +- */ +- static final int EIGHTBIT = 8; +- +- /** +- * Used when encoding something which has fewer than 24 bits. +- */ +- static final int SIXTEENBIT = 16; +- +- /** +- * Used to determine how many bits data contains. +- */ +- static final int TWENTYFOURBITGROUP = 24; +- +- /** +- * Used to get the number of Quadruples. +- */ +- static final int FOURBYTE = 4; +- +- /** +- * Used to test the sign of a byte. +- */ +- static final int SIGN = -128; +- +- /** +- * Byte used to pad output. +- */ +- static final byte PAD = (byte) '='; +- +- // Create arrays to hold the base64 characters and a +- // lookup for base64 chars +- private static byte[] base64Alphabet = new byte[BASELENGTH]; +- private static byte[] lookUpBase64Alphabet = new byte[LOOKUPLENGTH]; +- +- // Populating the lookup and character arrays +- static { +- for (int i = 0; i < BASELENGTH; i++) { +- base64Alphabet[i] = (byte) -1; +- } +- for (int i = 'Z'; i >= 'A'; i--) { +- base64Alphabet[i] = (byte) (i - 'A'); +- } +- for (int i = 'z'; i >= 'a'; i--) { +- base64Alphabet[i] = (byte) (i - 'a' + 26); +- } +- for (int i = '9'; i >= '0'; i--) { +- base64Alphabet[i] = (byte) (i - '0' + 52); +- } +- +- base64Alphabet['+'] = 62; +- base64Alphabet['/'] = 63; +- +- for (int i = 0; i <= 25; i++) { +- lookUpBase64Alphabet[i] = (byte) ('A' + i); +- } +- +- for (int i = 26, j = 0; i <= 51; i++, j++) { +- lookUpBase64Alphabet[i] = (byte) ('a' + j); +- } +- +- for (int i = 52, j = 0; i <= 61; i++, j++) { +- lookUpBase64Alphabet[i] = (byte) ('0' + j); +- } +- +- lookUpBase64Alphabet[62] = (byte) '+'; +- lookUpBase64Alphabet[63] = (byte) '/'; +- } +- +- private static boolean isBase64(byte octect) { +- if (octect == PAD) { +- return true; +- } else if (base64Alphabet[octect] == -1) { +- return false; +- } else { +- return true; +- } +- } +- +- /** +- * Tests a given byte array to see if it contains +- * only valid characters within the Base64 alphabet. +- * +- * @param arrayOctect byte array to test +- * @return true if all bytes are valid characters in the Base64 +- * alphabet or if the byte array is empty; false, otherwise +- */ +- public static boolean isArrayByteBase64(byte[] arrayOctect) { +- +- arrayOctect = discardWhitespace(arrayOctect); +- +- int length = arrayOctect.length; +- if (length == 0) { +- // shouldn't a 0 length array be valid base64 data? +- // return false; +- return true; +- } +- for (int i = 0; i < length; i++) { +- if (!isBase64(arrayOctect[i])) { +- return false; +- } +- } +- return true; +- } +- +- /** +- * Encodes binary data using the base64 algorithm but +- * does not chunk the output. +- * +- * @param binaryData binary data to encode +- * @return Base64 characters +- */ +- public static byte[] encodeBase64(byte[] binaryData) { +- return encodeBase64(binaryData, false); +- } +- +- /** +- * Encodes binary data using the base64 algorithm and chunks +- * the encoded output into 76 character blocks +- * +- * @param binaryData binary data to encode +- * @return Base64 characters chunked in 76 character blocks +- */ +- public static byte[] encodeBase64Chunked(byte[] binaryData) { +- return encodeBase64(binaryData, true); +- } +- +- +- /** +- * Decodes an Object using the base64 algorithm. This method +- * is provided in order to satisfy the requirements of the +- * Decoder interface, and will throw a DecoderException if the +- * supplied object is not of type byte[]. +- * +- * @param pObject Object to decode +- * @return An object (of type byte[]) containing the +- * binary data which corresponds to the byte[] supplied. +- * @throws DecoderException if the parameter supplied is not +- * of type byte[] +- */ +- public Object decode(Object pObject) throws DecoderException { +- if (!(pObject instanceof byte[])) { +- throw new DecoderException("Parameter supplied to Base64 decode is not a byte[]"); +- } +- return decode((byte[]) pObject); +- } +- +- /** +- * Decodes a byte[] containing containing +- * characters in the Base64 alphabet. +- * +- * @param pArray A byte array containing Base64 character data +- * @return a byte array containing binary data +- */ +- public byte[] decode(byte[] pArray) { +- return decodeBase64(pArray); +- } +- +- /** +- * Encodes binary data using the base64 algorithm, optionally +- * chunking the output into 76 character blocks. +- * +- * @param binaryData Array containing binary data to encode. +- * @param isChunked if isChunked is true this encoder will chunk +- * the base64 output into 76 character blocks +- * @return Base64-encoded data. +- */ +- public static byte[] encodeBase64(byte[] binaryData, boolean isChunked) { +- int lengthDataBits = binaryData.length * EIGHTBIT; +- int fewerThan24bits = lengthDataBits % TWENTYFOURBITGROUP; +- int numberTriplets = lengthDataBits / TWENTYFOURBITGROUP; +- byte encodedData[] = null; +- int encodedDataLength = 0; +- int nbrChunks = 0; +- +- if (fewerThan24bits != 0) { +- //data not divisible by 24 bit +- encodedDataLength = (numberTriplets + 1) * 4; +- } else { +- // 16 or 8 bit +- encodedDataLength = numberTriplets * 4; +- } +- +- // If the output is to be "chunked" into 76 character sections, +- // for compliance with RFC 2045 MIME, then it is important to +- // allow for extra length to account for the separator(s) +- if (isChunked) { +- +- nbrChunks = +- (CHUNK_SEPARATOR.length == 0 ? 0 : (int) Math.ceil((float) encodedDataLength / CHUNK_SIZE)); +- encodedDataLength += nbrChunks * CHUNK_SEPARATOR.length; +- } +- +- encodedData = new byte[encodedDataLength]; +- +- byte k = 0, l = 0, b1 = 0, b2 = 0, b3 = 0; +- +- int encodedIndex = 0; +- int dataIndex = 0; +- int i = 0; +- int nextSeparatorIndex = CHUNK_SIZE; +- int chunksSoFar = 0; +- +- //log.debug("number of triplets = " + numberTriplets); +- for (i = 0; i < numberTriplets; i++) { +- dataIndex = i * 3; +- b1 = binaryData[dataIndex]; +- b2 = binaryData[dataIndex + 1]; +- b3 = binaryData[dataIndex + 2]; +- +- //log.debug("b1= " + b1 +", b2= " + b2 + ", b3= " + b3); +- +- l = (byte) (b2 & 0x0f); +- k = (byte) (b1 & 0x03); +- +- byte val1 = +- ((b1 & SIGN) == 0) ? (byte) (b1 >> 2) : (byte) ((b1) >> 2 ^ 0xc0); +- byte val2 = +- ((b2 & SIGN) == 0) ? (byte) (b2 >> 4) : (byte) ((b2) >> 4 ^ 0xf0); +- byte val3 = +- ((b3 & SIGN) == 0) ? (byte) (b3 >> 6) : (byte) ((b3) >> 6 ^ 0xfc); +- +- encodedData[encodedIndex] = lookUpBase64Alphabet[val1]; +- //log.debug( "val2 = " + val2 ); +- //log.debug( "k4 = " + (k<<4) ); +- //log.debug( "vak = " + (val2 | (k<<4)) ); +- encodedData[encodedIndex + 1] = +- lookUpBase64Alphabet[val2 | (k << 4)]; +- encodedData[encodedIndex + 2] = +- lookUpBase64Alphabet[(l << 2) | val3]; +- encodedData[encodedIndex + 3] = lookUpBase64Alphabet[b3 & 0x3f]; +- +- encodedIndex += 4; +- +- // If we are chunking, let's put a chunk separator down. +- if (isChunked) { +- // this assumes that CHUNK_SIZE % 4 == 0 +- if (encodedIndex == nextSeparatorIndex) { +- System.arraycopy( +- CHUNK_SEPARATOR, +- 0, +- encodedData, +- encodedIndex, +- CHUNK_SEPARATOR.length); +- chunksSoFar++; +- nextSeparatorIndex = +- (CHUNK_SIZE * (chunksSoFar + 1)) + +- (chunksSoFar * CHUNK_SEPARATOR.length); +- encodedIndex += CHUNK_SEPARATOR.length; +- } +- } +- } +- +- // form integral number of 6-bit groups +- dataIndex = i * 3; +- +- if (fewerThan24bits == EIGHTBIT) { +- b1 = binaryData[dataIndex]; +- k = (byte) (b1 & 0x03); +- //log.debug("b1=" + b1); +- //log.debug("b1<<2 = " + (b1>>2) ); +- byte val1 = +- ((b1 & SIGN) == 0) ? (byte) (b1 >> 2) : (byte) ((b1) >> 2 ^ 0xc0); +- encodedData[encodedIndex] = lookUpBase64Alphabet[val1]; +- encodedData[encodedIndex + 1] = lookUpBase64Alphabet[k << 4]; +- encodedData[encodedIndex + 2] = PAD; +- encodedData[encodedIndex + 3] = PAD; +- } else if (fewerThan24bits == SIXTEENBIT) { +- +- b1 = binaryData[dataIndex]; +- b2 = binaryData[dataIndex + 1]; +- l = (byte) (b2 & 0x0f); +- k = (byte) (b1 & 0x03); +- +- byte val1 = +- ((b1 & SIGN) == 0) ? (byte) (b1 >> 2) : (byte) ((b1) >> 2 ^ 0xc0); +- byte val2 = +- ((b2 & SIGN) == 0) ? (byte) (b2 >> 4) : (byte) ((b2) >> 4 ^ 0xf0); +- +- encodedData[encodedIndex] = lookUpBase64Alphabet[val1]; +- encodedData[encodedIndex + 1] = +- lookUpBase64Alphabet[val2 | (k << 4)]; +- encodedData[encodedIndex + 2] = lookUpBase64Alphabet[l << 2]; +- encodedData[encodedIndex + 3] = PAD; +- } +- +- if (isChunked) { +- // we also add a separator to the end of the final chunk. +- if (chunksSoFar < nbrChunks) { +- System.arraycopy( +- CHUNK_SEPARATOR, +- 0, +- encodedData, +- encodedDataLength - CHUNK_SEPARATOR.length, +- CHUNK_SEPARATOR.length); +- } +- } +- +- return encodedData; +- } +- +- /** +- * Decodes Base64 data into octects +- * +- * @param base64Data Byte array containing Base64 data +- * @return Array containing decoded data. +- */ +- public static byte[] decodeBase64(byte[] base64Data) { +- // RFC 2045 requires that we discard ALL non-Base64 characters +- base64Data = discardNonBase64(base64Data); +- +- // handle the edge case, so we don't have to worry about it later +- if (base64Data.length == 0) { +- return new byte[0]; +- } +- +- int numberQuadruple = base64Data.length / FOURBYTE; +- byte decodedData[] = null; +- byte b1 = 0, b2 = 0, b3 = 0, b4 = 0, marker0 = 0, marker1 = 0; +- +- // Throw away anything not in base64Data +- +- int encodedIndex = 0; +- int dataIndex = 0; +- { +- // this sizes the output array properly - rlw +- int lastData = base64Data.length; +- // ignore the '=' padding +- while (base64Data[lastData - 1] == PAD) { +- if (--lastData == 0) { +- return new byte[0]; +- } +- } +- decodedData = new byte[lastData - numberQuadruple]; +- } +- +- for (int i = 0; i < numberQuadruple; i++) { +- dataIndex = i * 4; +- marker0 = base64Data[dataIndex + 2]; +- marker1 = base64Data[dataIndex + 3]; +- +- b1 = base64Alphabet[base64Data[dataIndex]]; +- b2 = base64Alphabet[base64Data[dataIndex + 1]]; +- +- if (marker0 != PAD && marker1 != PAD) { +- //No PAD e.g 3cQl +- b3 = base64Alphabet[marker0]; +- b4 = base64Alphabet[marker1]; +- +- decodedData[encodedIndex] = (byte) (b1 << 2 | b2 >> 4); +- decodedData[encodedIndex + 1] = +- (byte) (((b2 & 0xf) << 4) | ((b3 >> 2) & 0xf)); +- decodedData[encodedIndex + 2] = (byte) (b3 << 6 | b4); +- } else if (marker0 == PAD) { +- //Two PAD e.g. 3c[Pad][Pad] +- decodedData[encodedIndex] = (byte) (b1 << 2 | b2 >> 4); +- } else if (marker1 == PAD) { +- //One PAD e.g. 3cQ[Pad] +- b3 = base64Alphabet[marker0]; +- +- decodedData[encodedIndex] = (byte) (b1 << 2 | b2 >> 4); +- decodedData[encodedIndex + 1] = +- (byte) (((b2 & 0xf) << 4) | ((b3 >> 2) & 0xf)); +- } +- encodedIndex += 3; +- } +- return decodedData; +- } +- +- /** +- * Discards any whitespace from a base-64 encoded block. +- * +- * @param data The base-64 encoded data to discard the whitespace +- * from. +- * @return The data, less whitespace (see RFC 2045). +- */ +- static byte[] discardWhitespace(byte[] data) { +- byte groomedData[] = new byte[data.length]; +- int bytesCopied = 0; +- +- for (int i = 0; i < data.length; i++) { +- switch (data[i]) { +- case (byte) ' ' : +- case (byte) '\n' : +- case (byte) '\r' : +- case (byte) '\t' : +- break; +- default: +- groomedData[bytesCopied++] = data[i]; +- } +- } +- +- byte packedData[] = new byte[bytesCopied]; +- +- System.arraycopy(groomedData, 0, packedData, 0, bytesCopied); +- +- return packedData; +- } +- +- /** +- * Discards any characters outside of the base64 alphabet, per +- * the requirements on page 25 of RFC 2045 - "Any characters +- * outside of the base64 alphabet are to be ignored in base64 +- * encoded data." +- * +- * @param data The base-64 encoded data to groom +- * @return The data, less non-base64 characters (see RFC 2045). +- */ +- static byte[] discardNonBase64(byte[] data) { +- byte groomedData[] = new byte[data.length]; +- int bytesCopied = 0; +- +- for (int i = 0; i < data.length; i++) { +- if (isBase64(data[i])) { +- groomedData[bytesCopied++] = data[i]; +- } +- } +- +- byte packedData[] = new byte[bytesCopied]; +- +- System.arraycopy(groomedData, 0, packedData, 0, bytesCopied); +- +- return packedData; +- } +- +- +- // Implementation of the Encoder Interface +- +- /** +- * Encodes an Object using the base64 algorithm. This method +- * is provided in order to satisfy the requirements of the +- * Encoder interface, and will throw an EncoderException if the +- * supplied object is not of type byte[]. +- * +- * @param pObject Object to encode +- * @return An object (of type byte[]) containing the +- * base64 encoded data which corresponds to the byte[] supplied. +- * @throws EncoderException if the parameter supplied is not +- * of type byte[] +- */ +- public Object encode(Object pObject) throws EncoderException { +- if (!(pObject instanceof byte[])) { +- throw new EncoderException( +- "Parameter supplied to Base64 encode is not a byte[]"); +- } +- return encode((byte[]) pObject); +- } +- +- /** +- * Encodes a byte[] containing binary data, into a byte[] containing +- * characters in the Base64 alphabet. +- * +- * @param pArray a byte array containing binary data +- * @return A byte array containing only Base64 character data +- */ +- public byte[] encode(byte[] pArray) { +- return encodeBase64(pArray, false); +- } +- +-} +diff -Nru jasypt-1.9.0/src/main/java/org/jasypt/contrib/org/apache/commons/codec_1_3/BinaryDecoder.java jasypt-1.9.0-gil/src/main/java/org/jasypt/contrib/org/apache/commons/codec_1_3/BinaryDecoder.java +--- jasypt-1.9.0/src/main/java/org/jasypt/contrib/org/apache/commons/codec_1_3/BinaryDecoder.java 2010-10-10 12:19:03.000000000 +0200 ++++ jasypt-1.9.0-gil/src/main/java/org/jasypt/contrib/org/apache/commons/codec_1_3/BinaryDecoder.java 1970-01-01 01:00:00.000000000 +0100 +@@ -1,46 +0,0 @@ +-/* +- * Copyright 2001-2004 The Apache Software Foundation. +- * +- * Licensed 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. +- */ +-/* +- * IMPORTANT NOTE: This class has been included into Jasypt's source tree from +- * Apache Commons-Codec version 1.3 [see http://commons.apache.org/codec], +- * licensed under Apache License 2.0 [see http://www.apache.org/licenses/LICENSE-2.0]. +- * No modifications have been made to the code of this class except the package name. +- */ +- +-package org.jasypt.contrib.org.apache.commons.codec_1_3; +- +-/** +- * Defines common decoding methods for byte array decoders. +- * +- * @author Apache Software Foundation +- */ +-public interface BinaryDecoder extends Decoder { +- +- /** +- * Decodes a byte array and returns the results as a byte array. +- * +- * @param pArray A byte array which has been encoded with the +- * appropriate encoder +- * +- * @return a byte array that contains decoded content +- * +- * @throws DecoderException A decoder exception is thrown +- * if a Decoder encounters a failure condition during +- * the decode process. +- */ +- byte[] decode(byte[] pArray) throws DecoderException; +-} +- +diff -Nru jasypt-1.9.0/src/main/java/org/jasypt/contrib/org/apache/commons/codec_1_3/BinaryEncoder.java jasypt-1.9.0-gil/src/main/java/org/jasypt/contrib/org/apache/commons/codec_1_3/BinaryEncoder.java +--- jasypt-1.9.0/src/main/java/org/jasypt/contrib/org/apache/commons/codec_1_3/BinaryEncoder.java 2010-10-10 12:19:03.000000000 +0200 ++++ jasypt-1.9.0-gil/src/main/java/org/jasypt/contrib/org/apache/commons/codec_1_3/BinaryEncoder.java 1970-01-01 01:00:00.000000000 +0100 +@@ -1,46 +0,0 @@ +-/* +- * Copyright 2001-2004 The Apache Software Foundation. +- * +- * Licensed 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. +- */ +-/* +- * IMPORTANT NOTE: This class has been included into Jasypt's source tree from +- * Apache Commons-Codec version 1.3 [see http://commons.apache.org/codec], +- * licensed under Apache License 2.0 [see http://www.apache.org/licenses/LICENSE-2.0]. +- * No modifications have been made to the code of this class except the package name. +- */ +- +-package org.jasypt.contrib.org.apache.commons.codec_1_3; +- +-/** +- * Defines common encoding methods for byte array encoders. +- * +- * @author Apache Software Foundation +- */ +-public interface BinaryEncoder extends Encoder { +- +- /** +- * Encodes a byte array and return the encoded data +- * as a byte array. +- * +- * @param pArray Data to be encoded +- * +- * @return A byte array containing the encoded data +- * +- * @throws EncoderException thrown if the Encoder +- * encounters a failure condition during the +- * encoding process. +- */ +- byte[] encode(byte[] pArray) throws EncoderException; +-} +- +diff -Nru jasypt-1.9.0/src/main/java/org/jasypt/contrib/org/apache/commons/codec_1_3/DecoderException.java jasypt-1.9.0-gil/src/main/java/org/jasypt/contrib/org/apache/commons/codec_1_3/DecoderException.java +--- jasypt-1.9.0/src/main/java/org/jasypt/contrib/org/apache/commons/codec_1_3/DecoderException.java 2010-10-10 12:19:03.000000000 +0200 ++++ jasypt-1.9.0-gil/src/main/java/org/jasypt/contrib/org/apache/commons/codec_1_3/DecoderException.java 1970-01-01 01:00:00.000000000 +0100 +@@ -1,42 +0,0 @@ +-/* +- * Copyright 2001-2004 The Apache Software Foundation. +- * +- * Licensed 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. +- */ +-/* +- * IMPORTANT NOTE: This class has been included into Jasypt's source tree from +- * Apache Commons-Codec version 1.3 [see http://commons.apache.org/codec], +- * licensed under Apache License 2.0 [see http://www.apache.org/licenses/LICENSE-2.0]. +- * No modifications have been made to the code of this class except the package name. +- */ +- +-package org.jasypt.contrib.org.apache.commons.codec_1_3; +- +-/** +- * Thrown when a Decoder has encountered a failure condition during a decode. +- * +- * @author Apache Software Foundation +- */ +-public class DecoderException extends Exception { +- +- /** +- * Creates a DecoderException +- * +- * @param pMessage A message with meaning to a human +- */ +- public DecoderException(String pMessage) { +- super(pMessage); +- } +- +-} +- +diff -Nru jasypt-1.9.0/src/main/java/org/jasypt/contrib/org/apache/commons/codec_1_3/Decoder.java jasypt-1.9.0-gil/src/main/java/org/jasypt/contrib/org/apache/commons/codec_1_3/Decoder.java +--- jasypt-1.9.0/src/main/java/org/jasypt/contrib/org/apache/commons/codec_1_3/Decoder.java 2010-10-10 12:19:03.000000000 +0200 ++++ jasypt-1.9.0-gil/src/main/java/org/jasypt/contrib/org/apache/commons/codec_1_3/Decoder.java 1970-01-01 01:00:00.000000000 +0100 +@@ -1,59 +0,0 @@ +-/* +- * Copyright 2001-2004 The Apache Software Foundation. +- * +- * Licensed 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. +- */ +-/* +- * IMPORTANT NOTE: This class has been included into Jasypt's source tree from +- * Apache Commons-Codec version 1.3 [see http://commons.apache.org/codec], +- * licensed under Apache License 2.0 [see http://www.apache.org/licenses/LICENSE-2.0]. +- * No modifications have been made to the code of this class except the package name. +- */ +- +-package org.jasypt.contrib.org.apache.commons.codec_1_3; +- +-/** +- *Provides the highest level of abstraction for Decoders. +- * This is the sister interface of {@link Encoder}. All +- * Decoders implement this common generic interface.
+- * +- *Allows a user to pass a generic Object to any Decoder +- * implementation in the codec package.
+- * +- *One of the two interfaces at the center of the codec package.
+- * +- * @author Apache Software Foundation +- */ +-public interface Decoder { +- +- /** +- * Decodes an "encoded" Object and returns a "decoded" +- * Object. Note that the implementation of this +- * interface will try to cast the Object parameter +- * to the specific type expected by a particular Decoder +- * implementation. If a {@link java.lang.ClassCastException} occurs +- * this decode method will throw a DecoderException. +- * +- * @param pObject an object to "decode" +- * +- * @return a 'decoded" object +- * +- * @throws DecoderException a decoder exception can +- * be thrown for any number of reasons. Some good +- * candidates are that the parameter passed to this +- * method is null, a param cannot be cast to the +- * appropriate type for a specific encoder. +- */ +- Object decode(Object pObject) throws DecoderException; +-} +- +diff -Nru jasypt-1.9.0/src/main/java/org/jasypt/contrib/org/apache/commons/codec_1_3/EncoderException.java jasypt-1.9.0-gil/src/main/java/org/jasypt/contrib/org/apache/commons/codec_1_3/EncoderException.java +--- jasypt-1.9.0/src/main/java/org/jasypt/contrib/org/apache/commons/codec_1_3/EncoderException.java 2010-10-10 12:19:03.000000000 +0200 ++++ jasypt-1.9.0-gil/src/main/java/org/jasypt/contrib/org/apache/commons/codec_1_3/EncoderException.java 1970-01-01 01:00:00.000000000 +0100 +@@ -1,44 +0,0 @@ +-/* +- * Copyright 2001-2004 The Apache Software Foundation. +- * +- * Licensed 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. +- */ +-/* +- * IMPORTANT NOTE: This class has been included into Jasypt's source tree from +- * Apache Commons-Codec version 1.3 [see http://commons.apache.org/codec], +- * licensed under Apache License 2.0 [see http://www.apache.org/licenses/LICENSE-2.0]. +- * No modifications have been made to the code of this class except the package name. +- */ +- +-package org.jasypt.contrib.org.apache.commons.codec_1_3; +- +-/** +- * Thrown when there is a failure condition during the encoding process. This +- * exception is thrown when an Encoder encounters a encoding specific exception +- * such as invalid data, inability to calculate a checksum, characters outside of the +- * expected range. +- * +- * @author Apache Software Foundation +- */ +-public class EncoderException extends Exception { +- +- /** +- * Creates a new instance of this exception with an useful message. +- * +- * @param pMessage a useful message relating to the encoder specific error. +- */ +- public EncoderException(String pMessage) { +- super(pMessage); +- } +-} +- +diff -Nru jasypt-1.9.0/src/main/java/org/jasypt/contrib/org/apache/commons/codec_1_3/Encoder.java jasypt-1.9.0-gil/src/main/java/org/jasypt/contrib/org/apache/commons/codec_1_3/Encoder.java +--- jasypt-1.9.0/src/main/java/org/jasypt/contrib/org/apache/commons/codec_1_3/Encoder.java 2010-10-10 12:19:03.000000000 +0200 ++++ jasypt-1.9.0-gil/src/main/java/org/jasypt/contrib/org/apache/commons/codec_1_3/Encoder.java 1970-01-01 01:00:00.000000000 +0100 +@@ -1,50 +0,0 @@ +-/* +- * Copyright 2001-2004 The Apache Software Foundation. +- * +- * Licensed 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. +- */ +-/* +- * IMPORTANT NOTE: This class has been included into Jasypt's source tree from +- * Apache Commons-Codec version 1.3 [see http://commons.apache.org/codec], +- * licensed under Apache License 2.0 [see http://www.apache.org/licenses/LICENSE-2.0]. +- * No modifications have been made to the code of this class except the package name. +- */ +- +-package org.jasypt.contrib.org.apache.commons.codec_1_3; +- +-/** +- *Provides the highest level of abstraction for Encoders. +- * This is the sister interface of {@link Decoder}. Every implementation of +- * Encoder provides this common generic interface whic allows a user to pass a +- * generic Object to any Encoder implementation in the codec package.
+- * +- * @author Apache Software Foundation +- */ +-public interface Encoder { +- +- /** +- * Encodes an "Object" and returns the encoded content +- * as an Object. The Objects here may just bebyte[]
+- * or Strings depending on the implementation used.
+- *
+- * @param pObject An object ot encode
+- *
+- * @return An "encoded" Object
+- *
+- * @throws EncoderException an encoder exception is
+- * thrown if the encoder experiences a failure
+- * condition during the encoding process.
+- */
+- Object encode(Object pObject) throws EncoderException;
+-}
+-
+diff -Nru jasypt-1.9.0/src/main/java/org/jasypt/digest/StandardStringDigester.java jasypt-1.9.0-gil/src/main/java/org/jasypt/digest/StandardStringDigester.java
+--- jasypt-1.9.0/src/main/java/org/jasypt/digest/StandardStringDigester.java 2010-10-25 22:52:23.000000000 +0200
++++ jasypt-1.9.0-gil/src/main/java/org/jasypt/digest/StandardStringDigester.java 2013-07-08 13:33:03.259512325 +0200
+@@ -22,7 +22,7 @@
+ import java.security.Provider;
+
+ import org.jasypt.commons.CommonUtils;
+-import org.jasypt.contrib.org.apache.commons.codec_1_3.binary.Base64;
++import org.apache.commons.codec.binary.Base64;
+ import org.jasypt.digest.config.DigesterConfig;
+ import org.jasypt.digest.config.StringDigesterConfig;
+ import org.jasypt.exceptions.AlreadyInitializedException;
+diff -Nru jasypt-1.9.0/src/main/java/org/jasypt/encryption/pbe/StandardPBEStringEncryptor.java jasypt-1.9.0-gil/src/main/java/org/jasypt/encryption/pbe/StandardPBEStringEncryptor.java
+--- jasypt-1.9.0/src/main/java/org/jasypt/encryption/pbe/StandardPBEStringEncryptor.java 2011-12-08 03:15:37.000000000 +0100
++++ jasypt-1.9.0-gil/src/main/java/org/jasypt/encryption/pbe/StandardPBEStringEncryptor.java 2013-07-08 13:33:03.232513771 +0200
+@@ -22,7 +22,7 @@
+ import java.security.Provider;
+
+ import org.jasypt.commons.CommonUtils;
+-import org.jasypt.contrib.org.apache.commons.codec_1_3.binary.Base64;
++import org.apache.commons.codec.binary.Base64;
+ import org.jasypt.encryption.pbe.config.PBEConfig;
+ import org.jasypt.encryption.pbe.config.StringPBEConfig;
+ import org.jasypt.exceptions.AlreadyInitializedException;
+diff -Nru jasypt-1.9.0/src/test/java/org/jasypt/digest/StandardStringDigesterInvertedSaltTest.java jasypt-1.9.0-gil/src/test/java/org/jasypt/digest/StandardStringDigesterInvertedSaltTest.java
+--- jasypt-1.9.0/src/test/java/org/jasypt/digest/StandardStringDigesterInvertedSaltTest.java 2010-10-21 01:29:54.000000000 +0200
++++ jasypt-1.9.0-gil/src/test/java/org/jasypt/digest/StandardStringDigesterInvertedSaltTest.java 2013-07-08 13:33:03.208515056 +0200
+@@ -22,7 +22,7 @@
+
+ import junit.framework.TestCase;
+
+-import org.jasypt.contrib.org.apache.commons.codec_1_3.binary.Base64;
++import org.apache.commons.codec.binary.Base64;
+ import org.jasypt.util.password.rfc2307.RFC2307SSHAPasswordEncryptor;
+
+ public class StandardStringDigesterInvertedSaltTest extends TestCase {
+diff -Nru jasypt-1.9.0/src/test/java/org/jasypt/digest/StandardStringDigesterTest.java jasypt-1.9.0-gil/src/test/java/org/jasypt/digest/StandardStringDigesterTest.java
+--- jasypt-1.9.0/src/test/java/org/jasypt/digest/StandardStringDigesterTest.java 2010-10-16 20:38:04.000000000 +0200
++++ jasypt-1.9.0-gil/src/test/java/org/jasypt/digest/StandardStringDigesterTest.java 2013-07-08 13:33:03.212514841 +0200
+@@ -25,7 +25,7 @@
+ import junit.framework.TestCase;
+
+ import org.bouncycastle.jce.provider.BouncyCastleProvider;
+-import org.jasypt.contrib.org.apache.commons.codec_1_3.binary.Base64;
++import org.apache.commons.codec.binary.Base64;
+ import org.jasypt.digest.config.EnvironmentStringDigesterConfig;
+ import org.jasypt.digest.config.SimpleDigesterConfig;
+ import org.jasypt.salt.FixedByteArraySaltGenerator;
+diff -Nru jasypt-1.9.0/src/test/java/org/jasypt/util/password/BasicPasswordEncryptorTest.java jasypt-1.9.0-gil/src/test/java/org/jasypt/util/password/BasicPasswordEncryptorTest.java
+--- jasypt-1.9.0/src/test/java/org/jasypt/util/password/BasicPasswordEncryptorTest.java 2010-10-16 20:38:04.000000000 +0200
++++ jasypt-1.9.0-gil/src/test/java/org/jasypt/util/password/BasicPasswordEncryptorTest.java 2013-07-08 13:33:03.208515056 +0200
+@@ -22,7 +22,7 @@
+
+ import junit.framework.TestCase;
+
+-import org.jasypt.contrib.org.apache.commons.codec_1_3.binary.Base64;
++import org.apache.commons.codec.binary.Base64;
+
+
+ public class BasicPasswordEncryptorTest extends TestCase {
+diff -Nru jasypt-1.9.0/src/test/java/org/jasypt/util/password/ConfigurablePasswordEncryptorTest.java jasypt-1.9.0-gil/src/test/java/org/jasypt/util/password/ConfigurablePasswordEncryptorTest.java
+--- jasypt-1.9.0/src/test/java/org/jasypt/util/password/ConfigurablePasswordEncryptorTest.java 2010-10-16 20:38:04.000000000 +0200
++++ jasypt-1.9.0-gil/src/test/java/org/jasypt/util/password/ConfigurablePasswordEncryptorTest.java 2013-07-08 13:33:03.207515109 +0200
+@@ -25,7 +25,7 @@
+ import junit.framework.TestCase;
+
+ import org.bouncycastle.jce.provider.BouncyCastleProvider;
+-import org.jasypt.contrib.org.apache.commons.codec_1_3.binary.Base64;
++import org.apache.commons.codec.binary.Base64;
+
+ public class ConfigurablePasswordEncryptorTest extends TestCase {
+
+diff -Nru jasypt-1.9.0/src/test/java/org/jasypt/util/password/StrongPasswordEncryptorTest.java jasypt-1.9.0-gil/src/test/java/org/jasypt/util/password/StrongPasswordEncryptorTest.java
+--- jasypt-1.9.0/src/test/java/org/jasypt/util/password/StrongPasswordEncryptorTest.java 2010-10-16 20:38:04.000000000 +0200
++++ jasypt-1.9.0-gil/src/test/java/org/jasypt/util/password/StrongPasswordEncryptorTest.java 2013-07-08 13:33:03.207515109 +0200
+@@ -22,7 +22,7 @@
+
+ import junit.framework.TestCase;
+
+-import org.jasypt.contrib.org.apache.commons.codec_1_3.binary.Base64;
++import org.apache.commons.codec.binary.Base64;
+
+
+ public class StrongPasswordEncryptorTest extends TestCase {
+diff -Nru jasypt-1.9.0/src/test/java/org/jasypt/util/text/BasicTextEncryptorTest.java jasypt-1.9.0-gil/src/test/java/org/jasypt/util/text/BasicTextEncryptorTest.java
+--- jasypt-1.9.0/src/test/java/org/jasypt/util/text/BasicTextEncryptorTest.java 2010-10-16 20:38:04.000000000 +0200
++++ jasypt-1.9.0-gil/src/test/java/org/jasypt/util/text/BasicTextEncryptorTest.java 2013-07-08 13:33:03.208515056 +0200
+@@ -22,7 +22,7 @@
+
+ import junit.framework.TestCase;
+
+-import org.jasypt.contrib.org.apache.commons.codec_1_3.binary.Base64;
++import org.apache.commons.codec.binary.Base64;
+
+
+ public class BasicTextEncryptorTest extends TestCase {
+diff -Nru jasypt-1.9.0/src/test/java/org/jasypt/util/text/StrongTextEncryptorTest.java jasypt-1.9.0-gil/src/test/java/org/jasypt/util/text/StrongTextEncryptorTest.java
+--- jasypt-1.9.0/src/test/java/org/jasypt/util/text/StrongTextEncryptorTest.java 2010-10-16 20:38:04.000000000 +0200
++++ jasypt-1.9.0-gil/src/test/java/org/jasypt/util/text/StrongTextEncryptorTest.java 2013-07-08 13:33:03.208515056 +0200
+@@ -22,7 +22,7 @@
+
+ import junit.framework.TestCase;
+
+-import org.jasypt.contrib.org.apache.commons.codec_1_3.binary.Base64;
++import org.apache.commons.codec.binary.Base64;
+
+
+ public class StrongTextEncryptorTest extends TestCase {
diff --git a/jasypt-1.9.3.tar.gz b/jasypt-1.9.3.tar.gz
new file mode 100644
index 0000000..a4e99b3
Binary files /dev/null and b/jasypt-1.9.3.tar.gz differ
diff --git a/jasypt.spec b/jasypt.spec
new file mode 100644
index 0000000..346f0f7
--- /dev/null
+++ b/jasypt.spec
@@ -0,0 +1,69 @@
+Name: jasypt
+Version: 1.9.3
+Release: 1
+Summary: Java Simplified Encryption
+License: ASL 2.0
+Url: http://www.jasypt.org/
+Source0: https://github.com/jasypt/jasypt/archive/jasypt-1.9.3.tar.gz
+Patch0: %{name}-1.9.0-use-system-commons-codec.patch
+Patch1: %{name}-1.9.0-StandardStringDigester.patch
+Patch2: %{name}-1.9.0-StandardPBEStringEncryptor.patch
+BuildRequires: maven-local mvn(com.ibm.icu:icu4j) mvn(commons-codec:commons-codec)
+BuildRequires: mvn(commons-lang:commons-lang) mvn(commons-logging:commons-logging)
+BuildRequires: mvn(junit:junit) mvn(javax.servlet:javax.servlet-api)
+BuildRequires: mvn(org.bouncycastle:bcprov-jdk16)
+BuildArch: noarch
+%description
+Java library which enables encryption
+in java apps with minimum effort.
+
+%package javadoc
+Summary: Javadoc for %{name}
+%description javadoc
+This package contains javadoc for %{name}.
+
+%prep
+%setup -q -n %{name}-%{name}-%{version}
+rm -rf jasypt-* README.md LICENSE
+mv ./jasypt/* ./
+%patch0 -p1
+%patch1 -p0
+%patch2 -p0
+%pom_remove_plugin :maven-gpg-plugin
+%pom_remove_plugin :maven-site-plugin
+%pom_remove_plugin :maven-source-plugin
+%pom_remove_plugin :maven-assembly-plugin
+%pom_xpath_remove "pom:plugin[pom:artifactId='maven-javadoc-plugin']/pom:executions"
+%pom_xpath_remove "pom:plugin[pom:artifactId='maven-resources-plugin']/pom:configuration"
+%pom_xpath_inject "pom:plugin[pom:artifactId='maven-resources-plugin']" "
+