Author: markt
Date: Wed Mar 20 10:38:43 2013
New Revision: 1458738

URL: http://svn.apache.org/r1458738
Log:
Replace Tomcat's own base64 encoder with the one from the JRE.

Modified:
    tomcat/trunk/java/org/apache/catalina/ant/AbstractCatalinaTask.java
    tomcat/trunk/java/org/apache/catalina/authenticator/SpnegoAuthenticator.java
    tomcat/trunk/java/org/apache/catalina/realm/JNDIRealm.java
    tomcat/trunk/java/org/apache/catalina/util/Base64.java
    
tomcat/trunk/test/org/apache/catalina/authenticator/TestNonLoginAndBasicAuthenticator.java
    
tomcat/trunk/test/org/apache/catalina/authenticator/TestSSOnonLoginAndBasicAuthenticator.java

Modified: tomcat/trunk/java/org/apache/catalina/ant/AbstractCatalinaTask.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/ant/AbstractCatalinaTask.java?rev=1458738&r1=1458737&r2=1458738&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/ant/AbstractCatalinaTask.java 
(original)
+++ tomcat/trunk/java/org/apache/catalina/ant/AbstractCatalinaTask.java Wed Mar 
20 10:38:43 2013
@@ -27,7 +27,8 @@ import java.net.HttpURLConnection;
 import java.net.URL;
 import java.net.URLConnection;
 
-import org.apache.catalina.util.Base64;
+import javax.xml.bind.DatatypeConverter;
+
 import org.apache.tomcat.util.buf.B2CConverter;
 import org.apache.tools.ant.BuildException;
 import org.apache.tools.ant.Project;
@@ -201,8 +202,8 @@ public abstract class AbstractCatalinaTa
 
             // Set up an authorization header with our credentials
             String input = username + ":" + password;
-            String output =
-                Base64.encode(input.getBytes(B2CConverter.ISO_8859_1));
+            String output = DatatypeConverter.printBase64Binary(
+                    input.getBytes(B2CConverter.ISO_8859_1));
             hconn.setRequestProperty("Authorization",
                                      "Basic " + output);
 

Modified: 
tomcat/trunk/java/org/apache/catalina/authenticator/SpnegoAuthenticator.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/authenticator/SpnegoAuthenticator.java?rev=1458738&r1=1458737&r2=1458738&view=diff
==============================================================================
--- 
tomcat/trunk/java/org/apache/catalina/authenticator/SpnegoAuthenticator.java 
(original)
+++ 
tomcat/trunk/java/org/apache/catalina/authenticator/SpnegoAuthenticator.java 
Wed Mar 20 10:38:43 2013
@@ -27,6 +27,7 @@ import javax.security.auth.Subject;
 import javax.security.auth.login.LoginContext;
 import javax.security.auth.login.LoginException;
 import javax.servlet.http.HttpServletResponse;
+import javax.xml.bind.DatatypeConverter;
 
 import org.apache.catalina.LifecycleException;
 import org.apache.catalina.connector.Request;
@@ -279,7 +280,7 @@ public class SpnegoAuthenticator extends
 
         // Send response token on success and failure
         response.setHeader("WWW-Authenticate", "Negotiate "
-                + Base64.encode(outToken));
+                + DatatypeConverter.printBase64Binary(outToken));
 
         if (principal != null) {
             register(request, response, principal, Constants.SPNEGO_METHOD,

Modified: tomcat/trunk/java/org/apache/catalina/realm/JNDIRealm.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/realm/JNDIRealm.java?rev=1458738&r1=1458737&r2=1458738&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/realm/JNDIRealm.java (original)
+++ tomcat/trunk/java/org/apache/catalina/realm/JNDIRealm.java Wed Mar 20 
10:38:43 2013
@@ -51,6 +51,7 @@ import javax.naming.directory.DirContext
 import javax.naming.directory.InitialDirContext;
 import javax.naming.directory.SearchControls;
 import javax.naming.directory.SearchResult;
+import javax.xml.bind.DatatypeConverter;
 
 import org.apache.catalina.LifecycleException;
 import org.apache.catalina.util.Base64;
@@ -1556,7 +1557,8 @@ public class JNDIRealm extends RealmBase
                     password = password.substring(5);
                     md.reset();
                     md.update(credentials.getBytes(B2CConverter.ISO_8859_1));
-                    String digestedPassword = Base64.encode(md.digest());
+                    String digestedPassword =
+                            DatatypeConverter.printBase64Binary(md.digest());
                     validated = password.equals(digestedPassword);
                 }
             } else if (password.startsWith("{SSHA}")) {

Modified: tomcat/trunk/java/org/apache/catalina/util/Base64.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/util/Base64.java?rev=1458738&r1=1458737&r2=1458738&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/util/Base64.java (original)
+++ tomcat/trunk/java/org/apache/catalina/util/Base64.java Wed Mar 20 10:38:43 
2013
@@ -17,7 +17,8 @@
 
 package org.apache.catalina.util;
 
-import org.apache.tomcat.util.buf.B2CConverter;
+import javax.xml.bind.DatatypeConverter;
+
 import org.apache.tomcat.util.buf.ByteChunk;
 import org.apache.tomcat.util.buf.CharChunk;
 
@@ -35,11 +36,7 @@ public final class  Base64
 {
     private static final int  BASELENGTH              = 255;
     private static final int  LOOKUPLENGTH            = 64;
-    private static final int  TWENTYFOURBITGROUP      = 24;
-    private static final int  EIGHTBIT                = 8;
-    private static final int  SIXTEENBIT              = 16;
     private static final int  FOURBYTE                = 4;
-    private static final int  SIGN                    = -128;
     private static final byte PAD                     = (byte) '=';
     private static final byte [] base64Alphabet       = new byte[BASELENGTH];
     private static final byte [] lookUpBase64Alphabet = new byte[LOOKUPLENGTH];
@@ -84,93 +81,12 @@ public final class  Base64
      *
      * @param binaryData Array containing binary data to encode.
      * @return Base64-encoded data.
+     *
+     * @deprecated  Use {@link DatatypeConverter#printBase64Binary(byte[])}
      */
+    @Deprecated
     public static String encode(byte[] binaryData) {
-        int      lengthDataBits    = binaryData.length*EIGHTBIT;
-        int      fewerThan24bits   = lengthDataBits%TWENTYFOURBITGROUP;
-        int      numberTriplets    = lengthDataBits/TWENTYFOURBITGROUP;
-        byte     encodedData[]     = null;
-
-
-        if (fewerThan24bits != 0)
-        {
-            //data not divisible by 24 bit
-            encodedData = new byte[ (numberTriplets + 1 ) * 4 ];
-        }
-        else
-        {
-            // 16 or 8 bit
-            encodedData = new byte[ numberTriplets * 4 ];
-        }
-
-        byte k = 0, l = 0, b1 = 0, b2 = 0, b3 = 0;
-
-        int encodedIndex = 0;
-        int dataIndex   = 0;
-        int i           = 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);
-
-            encodedIndex = i * 4;
-            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 ];
-        }
-
-        // form integral number of 6-bit groups
-        dataIndex    = i*3;
-        encodedIndex = i*4;
-        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;
-        }
-
-        return new String(encodedData, B2CConverter.ISO_8859_1);
+        return DatatypeConverter.printBase64Binary(binaryData);
     }
 
     /**

Modified: 
tomcat/trunk/test/org/apache/catalina/authenticator/TestNonLoginAndBasicAuthenticator.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/catalina/authenticator/TestNonLoginAndBasicAuthenticator.java?rev=1458738&r1=1458737&r2=1458738&view=diff
==============================================================================
--- 
tomcat/trunk/test/org/apache/catalina/authenticator/TestNonLoginAndBasicAuthenticator.java
 (original)
+++ 
tomcat/trunk/test/org/apache/catalina/authenticator/TestNonLoginAndBasicAuthenticator.java
 Wed Mar 20 10:38:43 2013
@@ -22,6 +22,7 @@ import java.util.List;
 import java.util.Map;
 
 import javax.servlet.http.HttpServletResponse;
+import javax.xml.bind.DatatypeConverter;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
@@ -36,7 +37,6 @@ import org.apache.catalina.session.Manag
 import org.apache.catalina.startup.TesterServlet;
 import org.apache.catalina.startup.Tomcat;
 import org.apache.catalina.startup.TomcatBaseTest;
-import org.apache.catalina.util.Base64;
 import org.apache.tomcat.util.buf.ByteChunk;
 
 /**
@@ -608,7 +608,8 @@ public class TestNonLoginAndBasicAuthent
             password = aPassword;
             String userCredentials = username + ":" + password;
             byte[] credentialsBytes = 
ByteChunk.convertToBytes(userCredentials);
-            String base64auth = Base64.encode(credentialsBytes);
+            String base64auth =
+                    DatatypeConverter.printBase64Binary(credentialsBytes);
             credentials= method + " " + base64auth;
         }
 

Modified: 
tomcat/trunk/test/org/apache/catalina/authenticator/TestSSOnonLoginAndBasicAuthenticator.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/catalina/authenticator/TestSSOnonLoginAndBasicAuthenticator.java?rev=1458738&r1=1458737&r2=1458738&view=diff
==============================================================================
--- 
tomcat/trunk/test/org/apache/catalina/authenticator/TestSSOnonLoginAndBasicAuthenticator.java
 (original)
+++ 
tomcat/trunk/test/org/apache/catalina/authenticator/TestSSOnonLoginAndBasicAuthenticator.java
 Wed Mar 20 10:38:43 2013
@@ -21,6 +21,8 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
+import javax.xml.bind.DatatypeConverter;
+
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertTrue;
@@ -34,7 +36,6 @@ import org.apache.catalina.deploy.Securi
 import org.apache.catalina.startup.TesterServlet;
 import org.apache.catalina.startup.Tomcat;
 import org.apache.catalina.startup.TomcatBaseTest;
-import org.apache.catalina.util.Base64;
 import org.apache.tomcat.util.buf.ByteChunk;
 
 /**
@@ -235,7 +236,8 @@ public class TestSSOnonLoginAndBasicAuth
         // the second access attempt should be sucessful
         String credentials = user + ":" + pwd;
         byte[] credentialsBytes = ByteChunk.convertToBytes(credentials);
-        String base64auth = Base64.encode(credentialsBytes);
+        String base64auth =
+                DatatypeConverter.printBase64Binary(credentialsBytes);
         String authLine = "Basic " + base64auth;
 
         List<String> auth = new ArrayList<>();



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org

Reply via email to