[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[List Home]
|
[jetty-commit] r2399 - in jetty/trunk: jetty-client/src/main/java/org/eclipse/jetty/client/security jetty-http/src/main/java/org/eclipse/jetty/http/security jetty-jaspi/src/main/java/org/eclipse/jetty/security/jaspi/modules jetty-security/src/main/java/org/eclipse/jetty/security/authentication jetty-security/src/test/java/org/eclipse/jetty/security jetty-server/src/main/java/org/eclipse/jetty/server/session jetty-servlets/src/main/java/org/eclipse/jetty/servlets jetty-util/src/main/java/org/eclipse/jetty/util
|
- From: genie@xxxxxxxxxxx
- Date: Sun, 24 Oct 2010 23:33:17 -0400 (EDT)
- Delivered-to: jetty-commit@eclipse.org
Author: gwilkins
Date: 2010-10-24 23:33:16 -0400 (Sun, 24 Oct 2010)
New Revision: 2399
Added:
jetty/trunk/jetty-util/src/main/java/org/eclipse/jetty/util/B64Code.java
Modified:
jetty/trunk/jetty-client/src/main/java/org/eclipse/jetty/client/security/BasicAuthentication.java
jetty/trunk/jetty-client/src/main/java/org/eclipse/jetty/client/security/ProxyAuthorization.java
jetty/trunk/jetty-http/src/main/java/org/eclipse/jetty/http/security/B64Code.java
jetty/trunk/jetty-jaspi/src/main/java/org/eclipse/jetty/security/jaspi/modules/BaseAuthModule.java
jetty/trunk/jetty-jaspi/src/main/java/org/eclipse/jetty/security/jaspi/modules/ClientCertAuthModule.java
jetty/trunk/jetty-jaspi/src/main/java/org/eclipse/jetty/security/jaspi/modules/DigestAuthModule.java
jetty/trunk/jetty-security/src/main/java/org/eclipse/jetty/security/authentication/BasicAuthenticator.java
jetty/trunk/jetty-security/src/main/java/org/eclipse/jetty/security/authentication/ClientCertAuthenticator.java
jetty/trunk/jetty-security/src/main/java/org/eclipse/jetty/security/authentication/DigestAuthenticator.java
jetty/trunk/jetty-security/src/test/java/org/eclipse/jetty/security/ConstraintTest.java
jetty/trunk/jetty-server/src/main/java/org/eclipse/jetty/server/session/AbstractSessionIdManager.java
jetty/trunk/jetty-servlets/src/main/java/org/eclipse/jetty/servlets/MultiPartFilter.java
Log:
moved B64Code to util
Modified: jetty/trunk/jetty-client/src/main/java/org/eclipse/jetty/client/security/BasicAuthentication.java
===================================================================
--- jetty/trunk/jetty-client/src/main/java/org/eclipse/jetty/client/security/BasicAuthentication.java 2010-10-25 01:20:20 UTC (rev 2398)
+++ jetty/trunk/jetty-client/src/main/java/org/eclipse/jetty/client/security/BasicAuthentication.java 2010-10-25 03:33:16 UTC (rev 2399)
@@ -18,9 +18,9 @@
import org.eclipse.jetty.client.HttpExchange;
import org.eclipse.jetty.http.HttpHeaders;
-import org.eclipse.jetty.http.security.B64Code;
import org.eclipse.jetty.io.Buffer;
import org.eclipse.jetty.io.ByteArrayBuffer;
+import org.eclipse.jetty.util.B64Code;
import org.eclipse.jetty.util.StringUtil;
/**
Modified: jetty/trunk/jetty-client/src/main/java/org/eclipse/jetty/client/security/ProxyAuthorization.java
===================================================================
--- jetty/trunk/jetty-client/src/main/java/org/eclipse/jetty/client/security/ProxyAuthorization.java 2010-10-25 01:20:20 UTC (rev 2398)
+++ jetty/trunk/jetty-client/src/main/java/org/eclipse/jetty/client/security/ProxyAuthorization.java 2010-10-25 03:33:16 UTC (rev 2399)
@@ -18,9 +18,9 @@
import org.eclipse.jetty.client.HttpExchange;
import org.eclipse.jetty.http.HttpHeaders;
-import org.eclipse.jetty.http.security.B64Code;
import org.eclipse.jetty.io.Buffer;
import org.eclipse.jetty.io.ByteArrayBuffer;
+import org.eclipse.jetty.util.B64Code;
import org.eclipse.jetty.util.StringUtil;
/**
Modified: jetty/trunk/jetty-http/src/main/java/org/eclipse/jetty/http/security/B64Code.java
===================================================================
--- jetty/trunk/jetty-http/src/main/java/org/eclipse/jetty/http/security/B64Code.java 2010-10-25 01:20:20 UTC (rev 2398)
+++ jetty/trunk/jetty-http/src/main/java/org/eclipse/jetty/http/security/B64Code.java 2010-10-25 03:33:16 UTC (rev 2399)
@@ -1,5 +1,5 @@
// ========================================================================
-// Copyright (c) 1999-2009 Mort Bay Consulting Pty. Ltd.
+// Copyright (c) 2009-2009 Mort Bay Consulting Pty. Ltd.
// ------------------------------------------------------------------------
// All rights reserved. This program and the accompanying materials
// are made available under the terms of the Eclipse Public License v1.0
@@ -11,339 +11,18 @@
// You may elect to redistribute this code under either of these licenses.
// ========================================================================
+
package org.eclipse.jetty.http.security;
-import java.io.ByteArrayOutputStream;
-import java.io.UnsupportedEncodingException;
-import org.eclipse.jetty.util.ByteArrayOutputStream2;
-import org.eclipse.jetty.util.StringUtil;
-
/* ------------------------------------------------------------ */
-
-/** Fast B64 Encoder/Decoder as described in RFC 1421.
- * <p>Does not insert or interpret whitespace as described in RFC
- * 1521. If you require this you must pre/post process your data.
- * <p> Note that in a web context the usual case is to not want
- * linebreaks or other white space in the encoded output.
- *
- *
- *
+/**
+ * @deprecated use {@link org.eclipse.jetty.util.B64Code}
*/
-public class B64Code
+@Deprecated
+public class B64Code extends org.eclipse.jetty.util.B64Code
{
- // ------------------------------------------------------------------
- static final char pad='=';
- static final char[] rfc1421alphabet=
- {
- 'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P',
- 'Q','R','S','T','U','V','W','X','Y','Z','a','b','c','d','e','f',
- 'g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v',
- 'w','x','y','z','0','1','2','3','4','5','6','7','8','9','+','/'
- };
-
- static final byte[] rfc1421nibbles;
-
- static
+ public B64Code()
{
- rfc1421nibbles=new byte[256];
- for (int i=0;i<256;i++)
- rfc1421nibbles[i]=-1;
- for (byte b=0;b<64;b++)
- rfc1421nibbles[(byte)rfc1421alphabet[b]]=b;
- rfc1421nibbles[(byte)pad]=0;
}
-
- // ------------------------------------------------------------------
- /**
- * Base 64 encode as described in RFC 1421.
- * <p>Does not insert whitespace as described in RFC 1521.
- * @param s String to encode.
- * @return String containing the encoded form of the input.
- */
- static public String encode(String s)
- {
- try
- {
- return encode(s,null);
- }
- catch (UnsupportedEncodingException e)
- {
- throw new IllegalArgumentException(e.toString());
- }
- }
-
- // ------------------------------------------------------------------
- /**
- * Base 64 encode as described in RFC 1421.
- * <p>Does not insert whitespace as described in RFC 1521.
- * @param s String to encode.
- * @param charEncoding String representing the name of
- * the character encoding of the provided input String.
- * @return String containing the encoded form of the input.
- */
- static public String encode(String s,String charEncoding)
- throws UnsupportedEncodingException
- {
- byte[] bytes;
- if (charEncoding==null)
- bytes=s.getBytes(StringUtil.__ISO_8859_1);
- else
- bytes=s.getBytes(charEncoding);
-
- return new String(encode(bytes));
- }
-
- // ------------------------------------------------------------------
- /**
- * Fast Base 64 encode as described in RFC 1421.
- * <p>Does not insert whitespace as described in RFC 1521.
- * <p> Avoids creating extra copies of the input/output.
- * @param b byte array to encode.
- * @return char array containing the encoded form of the input.
- */
- static public char[] encode(byte[] b)
- {
- return encode(b,false);
- }
-
- // ------------------------------------------------------------------
- /**
- * Fast Base 64 encode as described in RFC 1421 and RFC2045
- * <p>Does not insert whitespace as described in RFC 1521, unless rfc2045 is passed as true.
- * <p> Avoids creating extra copies of the input/output.
- * @param b byte array to encode.
- * @param rfc2045 If true, break lines at 76 characters with CRLF
- * @return char array containing the encoded form of the input.
- */
- static public char[] encode(byte[] b, boolean rfc2045)
- {
- if (b==null)
- return null;
-
- int bLen=b.length;
- int cLen=((bLen+2)/3)*4;
- if (rfc2045)
- cLen+=2+2*cLen/76;
- char c[]=new char[cLen];
- int ci=0;
- int bi=0;
- byte b0, b1, b2;
- int stop=(bLen/3)*3;
- int l=0;
- while (bi<stop)
- {
- b0=b[bi++];
- b1=b[bi++];
- b2=b[bi++];
- c[ci++]=rfc1421alphabet[(b0>>>2)&0x3f];
- c[ci++]=rfc1421alphabet[(b0<<4)&0x3f|(b1>>>4)&0x0f];
- c[ci++]=rfc1421alphabet[(b1<<2)&0x3f|(b2>>>6)&0x03];
- c[ci++]=rfc1421alphabet[b2&077];
- l+=4;
- if (rfc2045 && l%76==0)
- {
- c[ci++]=13;
- c[ci++]=10;
- }
- }
-
- if (bLen!=bi)
- {
- switch (bLen%3)
- {
- case 2:
- b0=b[bi++];
- b1=b[bi++];
- c[ci++]=rfc1421alphabet[(b0>>>2)&0x3f];
- c[ci++]=rfc1421alphabet[(b0<<4)&0x3f|(b1>>>4)&0x0f];
- c[ci++]=rfc1421alphabet[(b1<<2)&0x3f];
- c[ci++]=pad;
- break;
-
- case 1:
- b0=b[bi++];
- c[ci++]=rfc1421alphabet[(b0>>>2)&0x3f];
- c[ci++]=rfc1421alphabet[(b0<<4)&0x3f];
- c[ci++]=pad;
- c[ci++]=pad;
- break;
-
- default:
- break;
- }
- }
-
- if (rfc2045)
- {
- c[ci++]=13;
- c[ci++]=10;
- }
- return c;
- }
-
- // ------------------------------------------------------------------
- /**
- * Base 64 decode as described in RFC 2045.
- * <p>Unlike {@link #decode(char[])}, extra whitespace is ignored.
- * @param encoded String to decode.
- * @param charEncoding String representing the character encoding
- * used to map the decoded bytes into a String.
- * @return String decoded byte array.
- * @throws UnsupportedEncodingException if the encoding is not supported
- * @throws IllegalArgumentException if the input is not a valid
- * B64 encoding.
- */
- static public String decode(String encoded,String charEncoding)
- throws UnsupportedEncodingException
- {
- byte[] decoded=decode(encoded);
- if (charEncoding==null)
- return new String(decoded);
- return new String(decoded,charEncoding);
- }
-
- /* ------------------------------------------------------------ */
- /**
- * Fast Base 64 decode as described in RFC 1421.
- *
- * <p>Unlike other decode methods, this does not attempt to
- * cope with extra whitespace as described in RFC 1521/2045.
- * <p> Avoids creating extra copies of the input/output.
- * <p> Note this code has been flattened for performance.
- * @param b char array to decode.
- * @return byte array containing the decoded form of the input.
- * @throws IllegalArgumentException if the input is not a valid
- * B64 encoding.
- */
- static public byte[] decode(char[] b)
- {
- if (b==null)
- return null;
-
- int bLen=b.length;
- if (bLen%4!=0)
- throw new IllegalArgumentException("Input block size is not 4");
-
- int li=bLen-1;
- while (li>=0 && b[li]==(byte)pad)
- li--;
-
- if (li<0)
- return new byte[0];
-
- // Create result array of exact required size.
- int rLen=((li+1)*3)/4;
- byte r[]=new byte[rLen];
- int ri=0;
- int bi=0;
- int stop=(rLen/3)*3;
- byte b0,b1,b2,b3;
- try
- {
- while (ri<stop)
- {
- b0=rfc1421nibbles[b[bi++]];
- b1=rfc1421nibbles[b[bi++]];
- b2=rfc1421nibbles[b[bi++]];
- b3=rfc1421nibbles[b[bi++]];
- if (b0<0 || b1<0 || b2<0 || b3<0)
- throw new IllegalArgumentException("Not B64 encoded");
-
- r[ri++]=(byte)(b0<<2|b1>>>4);
- r[ri++]=(byte)(b1<<4|b2>>>2);
- r[ri++]=(byte)(b2<<6|b3);
- }
-
- if (rLen!=ri)
- {
- switch (rLen%3)
- {
- case 2:
- b0=rfc1421nibbles[b[bi++]];
- b1=rfc1421nibbles[b[bi++]];
- b2=rfc1421nibbles[b[bi++]];
- if (b0<0 || b1<0 || b2<0)
- throw new IllegalArgumentException("Not B64 encoded");
- r[ri++]=(byte)(b0<<2|b1>>>4);
- r[ri++]=(byte)(b1<<4|b2>>>2);
- break;
-
- case 1:
- b0=rfc1421nibbles[b[bi++]];
- b1=rfc1421nibbles[b[bi++]];
- if (b0<0 || b1<0)
- throw new IllegalArgumentException("Not B64 encoded");
- r[ri++]=(byte)(b0<<2|b1>>>4);
- break;
-
- default:
- break;
- }
- }
- }
- catch (IndexOutOfBoundsException e)
- {
- throw new IllegalArgumentException("char "+bi
- +" was not B64 encoded");
- }
-
- return r;
- }
-
- /* ------------------------------------------------------------ */
- /**
- * Base 64 decode as described in RFC 2045.
- * <p>Unlike {@link #decode(char[])}, extra whitespace is ignored.
- * @param encoded String to decode.
- * @return byte array containing the decoded form of the input.
- * @throws IllegalArgumentException if the input is not a valid
- * B64 encoding.
- */
- static public byte[] decode(String encoded)
- {
- if (encoded==null)
- return null;
-
- int ci=0;
- byte nibbles[] = new byte[4];
- int s=0;
- ByteArrayOutputStream bout = new ByteArrayOutputStream(4*encoded.length()/3);
-
- while (ci<encoded.length())
- {
- char c=encoded.charAt(ci++);
-
- if (c==pad)
- break;
-
- if (Character.isWhitespace(c))
- continue;
-
- byte nibble=rfc1421nibbles[c];
- if (nibble<0)
- throw new IllegalArgumentException("Not B64 encoded");
-
- nibbles[s++]=rfc1421nibbles[c];
-
- switch(s)
- {
- case 1:
- break;
- case 2:
- bout.write(nibbles[0]<<2|nibbles[1]>>>4);
- break;
- case 3:
- bout.write(nibbles[1]<<4|nibbles[2]>>>2);
- break;
- case 4:
- bout.write(nibbles[2]<<6|nibbles[3]);
- s=0;
- break;
- }
-
- }
-
- return bout.toByteArray();
- }
}
Modified: jetty/trunk/jetty-jaspi/src/main/java/org/eclipse/jetty/security/jaspi/modules/BaseAuthModule.java
===================================================================
--- jetty/trunk/jetty-jaspi/src/main/java/org/eclipse/jetty/security/jaspi/modules/BaseAuthModule.java 2010-10-25 01:20:20 UTC (rev 2398)
+++ jetty/trunk/jetty-jaspi/src/main/java/org/eclipse/jetty/security/jaspi/modules/BaseAuthModule.java 2010-10-25 03:33:16 UTC (rev 2399)
@@ -32,12 +32,12 @@
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
-import org.eclipse.jetty.http.security.B64Code;
import org.eclipse.jetty.http.security.Credential;
import org.eclipse.jetty.http.security.Password;
import org.eclipse.jetty.security.authentication.LoginCallbackImpl;
import org.eclipse.jetty.security.jaspi.JaspiMessageInfo;
import org.eclipse.jetty.security.jaspi.callback.CredentialValidationCallback;
+import org.eclipse.jetty.util.B64Code;
import org.eclipse.jetty.util.StringUtil;
/**
Modified: jetty/trunk/jetty-jaspi/src/main/java/org/eclipse/jetty/security/jaspi/modules/ClientCertAuthModule.java
===================================================================
--- jetty/trunk/jetty-jaspi/src/main/java/org/eclipse/jetty/security/jaspi/modules/ClientCertAuthModule.java 2010-10-25 01:20:20 UTC (rev 2398)
+++ jetty/trunk/jetty-jaspi/src/main/java/org/eclipse/jetty/security/jaspi/modules/ClientCertAuthModule.java 2010-10-25 03:33:16 UTC (rev 2399)
@@ -25,9 +25,9 @@
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
-import org.eclipse.jetty.http.security.B64Code;
import org.eclipse.jetty.http.security.Constraint;
import org.eclipse.jetty.http.security.Password;
+import org.eclipse.jetty.util.B64Code;
/**
* @deprecated use *ServerAuthentication
Modified: jetty/trunk/jetty-jaspi/src/main/java/org/eclipse/jetty/security/jaspi/modules/DigestAuthModule.java
===================================================================
--- jetty/trunk/jetty-jaspi/src/main/java/org/eclipse/jetty/security/jaspi/modules/DigestAuthModule.java 2010-10-25 01:20:20 UTC (rev 2398)
+++ jetty/trunk/jetty-jaspi/src/main/java/org/eclipse/jetty/security/jaspi/modules/DigestAuthModule.java 2010-10-25 03:33:16 UTC (rev 2399)
@@ -28,9 +28,9 @@
import javax.servlet.http.HttpServletResponse;
import org.eclipse.jetty.http.HttpHeaders;
-import org.eclipse.jetty.http.security.B64Code;
import org.eclipse.jetty.http.security.Constraint;
import org.eclipse.jetty.http.security.Credential;
+import org.eclipse.jetty.util.B64Code;
import org.eclipse.jetty.util.QuotedStringTokenizer;
import org.eclipse.jetty.util.StringUtil;
import org.eclipse.jetty.util.TypeUtil;
Modified: jetty/trunk/jetty-security/src/main/java/org/eclipse/jetty/security/authentication/BasicAuthenticator.java
===================================================================
--- jetty/trunk/jetty-security/src/main/java/org/eclipse/jetty/security/authentication/BasicAuthenticator.java 2010-10-25 01:20:20 UTC (rev 2398)
+++ jetty/trunk/jetty-security/src/main/java/org/eclipse/jetty/security/authentication/BasicAuthenticator.java 2010-10-25 03:33:16 UTC (rev 2399)
@@ -21,13 +21,13 @@
import javax.servlet.http.HttpServletResponse;
import org.eclipse.jetty.http.HttpHeaders;
-import org.eclipse.jetty.http.security.B64Code;
import org.eclipse.jetty.http.security.Constraint;
import org.eclipse.jetty.security.ServerAuthException;
import org.eclipse.jetty.security.UserAuthentication;
import org.eclipse.jetty.server.Authentication;
import org.eclipse.jetty.server.UserIdentity;
import org.eclipse.jetty.server.Authentication.User;
+import org.eclipse.jetty.util.B64Code;
import org.eclipse.jetty.util.StringUtil;
/**
Modified: jetty/trunk/jetty-security/src/main/java/org/eclipse/jetty/security/authentication/ClientCertAuthenticator.java
===================================================================
--- jetty/trunk/jetty-security/src/main/java/org/eclipse/jetty/security/authentication/ClientCertAuthenticator.java 2010-10-25 01:20:20 UTC (rev 2398)
+++ jetty/trunk/jetty-security/src/main/java/org/eclipse/jetty/security/authentication/ClientCertAuthenticator.java 2010-10-25 03:33:16 UTC (rev 2399)
@@ -22,13 +22,13 @@
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
-import org.eclipse.jetty.http.security.B64Code;
import org.eclipse.jetty.http.security.Constraint;
import org.eclipse.jetty.security.ServerAuthException;
import org.eclipse.jetty.security.UserAuthentication;
import org.eclipse.jetty.server.Authentication;
import org.eclipse.jetty.server.UserIdentity;
import org.eclipse.jetty.server.Authentication.User;
+import org.eclipse.jetty.util.B64Code;
/**
* @version $Rev: 4793 $ $Date: 2009-03-19 00:00:01 +0100 (Thu, 19 Mar 2009) $
Modified: jetty/trunk/jetty-security/src/main/java/org/eclipse/jetty/security/authentication/DigestAuthenticator.java
===================================================================
--- jetty/trunk/jetty-security/src/main/java/org/eclipse/jetty/security/authentication/DigestAuthenticator.java 2010-10-25 01:20:20 UTC (rev 2398)
+++ jetty/trunk/jetty-security/src/main/java/org/eclipse/jetty/security/authentication/DigestAuthenticator.java 2010-10-25 03:33:16 UTC (rev 2399)
@@ -22,7 +22,6 @@
import javax.servlet.http.HttpServletResponse;
import org.eclipse.jetty.http.HttpHeaders;
-import org.eclipse.jetty.http.security.B64Code;
import org.eclipse.jetty.http.security.Constraint;
import org.eclipse.jetty.http.security.Credential;
import org.eclipse.jetty.security.Authenticator.AuthConfiguration;
@@ -33,6 +32,7 @@
import org.eclipse.jetty.server.Request;
import org.eclipse.jetty.server.UserIdentity;
import org.eclipse.jetty.server.Authentication.User;
+import org.eclipse.jetty.util.B64Code;
import org.eclipse.jetty.util.QuotedStringTokenizer;
import org.eclipse.jetty.util.StringUtil;
import org.eclipse.jetty.util.TypeUtil;
Modified: jetty/trunk/jetty-security/src/test/java/org/eclipse/jetty/security/ConstraintTest.java
===================================================================
--- jetty/trunk/jetty-security/src/test/java/org/eclipse/jetty/security/ConstraintTest.java 2010-10-25 01:20:20 UTC (rev 2398)
+++ jetty/trunk/jetty-security/src/test/java/org/eclipse/jetty/security/ConstraintTest.java 2010-10-25 03:33:16 UTC (rev 2399)
@@ -27,7 +27,6 @@
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
-import org.eclipse.jetty.http.security.B64Code;
import org.eclipse.jetty.http.security.Constraint;
import org.eclipse.jetty.http.security.Password;
import org.eclipse.jetty.security.authentication.BasicAuthenticator;
@@ -41,6 +40,7 @@
import org.eclipse.jetty.server.handler.ContextHandler;
import org.eclipse.jetty.server.handler.HandlerWrapper;
import org.eclipse.jetty.server.session.SessionHandler;
+import org.eclipse.jetty.util.B64Code;
import org.eclipse.jetty.util.log.Log;
import org.junit.After;
import org.junit.Before;
Modified: jetty/trunk/jetty-server/src/main/java/org/eclipse/jetty/server/session/AbstractSessionIdManager.java
===================================================================
--- jetty/trunk/jetty-server/src/main/java/org/eclipse/jetty/server/session/AbstractSessionIdManager.java 2010-10-25 01:20:20 UTC (rev 2398)
+++ jetty/trunk/jetty-server/src/main/java/org/eclipse/jetty/server/session/AbstractSessionIdManager.java 2010-10-25 03:33:16 UTC (rev 2399)
@@ -18,7 +18,6 @@
import javax.servlet.http.HttpServletRequest;
-import org.eclipse.jetty.http.security.B64Code;
import org.eclipse.jetty.server.SessionIdManager;
import org.eclipse.jetty.util.component.AbstractLifeCycle;
import org.eclipse.jetty.util.log.Log;
Modified: jetty/trunk/jetty-servlets/src/main/java/org/eclipse/jetty/servlets/MultiPartFilter.java
===================================================================
--- jetty/trunk/jetty-servlets/src/main/java/org/eclipse/jetty/servlets/MultiPartFilter.java 2010-10-25 01:20:20 UTC (rev 2398)
+++ jetty/trunk/jetty-servlets/src/main/java/org/eclipse/jetty/servlets/MultiPartFilter.java 2010-10-25 03:33:16 UTC (rev 2399)
@@ -41,7 +41,7 @@
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
-import org.eclipse.jetty.http.security.B64Code;
+import org.eclipse.jetty.util.B64Code;
import org.eclipse.jetty.util.LazyList;
import org.eclipse.jetty.util.MultiMap;
import org.eclipse.jetty.util.QuotedStringTokenizer;
Copied: jetty/trunk/jetty-util/src/main/java/org/eclipse/jetty/util/B64Code.java (from rev 2396, jetty/trunk/jetty-http/src/main/java/org/eclipse/jetty/http/security/B64Code.java)
===================================================================
--- jetty/trunk/jetty-util/src/main/java/org/eclipse/jetty/util/B64Code.java (rev 0)
+++ jetty/trunk/jetty-util/src/main/java/org/eclipse/jetty/util/B64Code.java 2010-10-25 03:33:16 UTC (rev 2399)
@@ -0,0 +1,344 @@
+// ========================================================================
+// Copyright (c) 1999-2009 Mort Bay Consulting Pty. Ltd.
+// ------------------------------------------------------------------------
+// All rights reserved. This program and the accompanying materials
+// are made available under the terms of the Eclipse Public License v1.0
+// and Apache License v2.0 which accompanies this distribution.
+// The Eclipse Public License is available at
+// http://www.eclipse.org/legal/epl-v10.html
+// The Apache License v2.0 is available at
+// http://www.opensource.org/licenses/apache2.0.php
+// You may elect to redistribute this code under either of these licenses.
+// ========================================================================
+
+package org.eclipse.jetty.util;
+
+import java.io.ByteArrayOutputStream;
+import java.io.UnsupportedEncodingException;
+
+
+/* ------------------------------------------------------------ */
+/** Fast B64 Encoder/Decoder as described in RFC 1421.
+ * <p>Does not insert or interpret whitespace as described in RFC
+ * 1521. If you require this you must pre/post process your data.
+ * <p> Note that in a web context the usual case is to not want
+ * linebreaks or other white space in the encoded output.
+ *
+ */
+public class B64Code
+{
+ // ------------------------------------------------------------------
+ static final char pad='=';
+ static final char[] rfc1421alphabet=
+ {
+ 'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P',
+ 'Q','R','S','T','U','V','W','X','Y','Z','a','b','c','d','e','f',
+ 'g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v',
+ 'w','x','y','z','0','1','2','3','4','5','6','7','8','9','+','/'
+ };
+
+ static final byte[] rfc1421nibbles;
+
+ static
+ {
+ rfc1421nibbles=new byte[256];
+ for (int i=0;i<256;i++)
+ rfc1421nibbles[i]=-1;
+ for (byte b=0;b<64;b++)
+ rfc1421nibbles[(byte)rfc1421alphabet[b]]=b;
+ rfc1421nibbles[(byte)pad]=0;
+ }
+
+ // ------------------------------------------------------------------
+ /**
+ * Base 64 encode as described in RFC 1421.
+ * <p>Does not insert whitespace as described in RFC 1521.
+ * @param s String to encode.
+ * @return String containing the encoded form of the input.
+ */
+ static public String encode(String s)
+ {
+ try
+ {
+ return encode(s,null);
+ }
+ catch (UnsupportedEncodingException e)
+ {
+ throw new IllegalArgumentException(e.toString());
+ }
+ }
+
+ // ------------------------------------------------------------------
+ /**
+ * Base 64 encode as described in RFC 1421.
+ * <p>Does not insert whitespace as described in RFC 1521.
+ * @param s String to encode.
+ * @param charEncoding String representing the name of
+ * the character encoding of the provided input String.
+ * @return String containing the encoded form of the input.
+ */
+ static public String encode(String s,String charEncoding)
+ throws UnsupportedEncodingException
+ {
+ byte[] bytes;
+ if (charEncoding==null)
+ bytes=s.getBytes(StringUtil.__ISO_8859_1);
+ else
+ bytes=s.getBytes(charEncoding);
+
+ return new String(encode(bytes));
+ }
+
+ // ------------------------------------------------------------------
+ /**
+ * Fast Base 64 encode as described in RFC 1421.
+ * <p>Does not insert whitespace as described in RFC 1521.
+ * <p> Avoids creating extra copies of the input/output.
+ * @param b byte array to encode.
+ * @return char array containing the encoded form of the input.
+ */
+ static public char[] encode(byte[] b)
+ {
+ return encode(b,false);
+ }
+
+ // ------------------------------------------------------------------
+ /**
+ * Fast Base 64 encode as described in RFC 1421 and RFC2045
+ * <p>Does not insert whitespace as described in RFC 1521, unless rfc2045 is passed as true.
+ * <p> Avoids creating extra copies of the input/output.
+ * @param b byte array to encode.
+ * @param rfc2045 If true, break lines at 76 characters with CRLF
+ * @return char array containing the encoded form of the input.
+ */
+ static public char[] encode(byte[] b, boolean rfc2045)
+ {
+ if (b==null)
+ return null;
+
+ int bLen=b.length;
+ int cLen=((bLen+2)/3)*4;
+ if (rfc2045)
+ cLen+=2+2*cLen/76;
+ char c[]=new char[cLen];
+ int ci=0;
+ int bi=0;
+ byte b0, b1, b2;
+ int stop=(bLen/3)*3;
+ int l=0;
+ while (bi<stop)
+ {
+ b0=b[bi++];
+ b1=b[bi++];
+ b2=b[bi++];
+ c[ci++]=rfc1421alphabet[(b0>>>2)&0x3f];
+ c[ci++]=rfc1421alphabet[(b0<<4)&0x3f|(b1>>>4)&0x0f];
+ c[ci++]=rfc1421alphabet[(b1<<2)&0x3f|(b2>>>6)&0x03];
+ c[ci++]=rfc1421alphabet[b2&077];
+ l+=4;
+ if (rfc2045 && l%76==0)
+ {
+ c[ci++]=13;
+ c[ci++]=10;
+ }
+ }
+
+ if (bLen!=bi)
+ {
+ switch (bLen%3)
+ {
+ case 2:
+ b0=b[bi++];
+ b1=b[bi++];
+ c[ci++]=rfc1421alphabet[(b0>>>2)&0x3f];
+ c[ci++]=rfc1421alphabet[(b0<<4)&0x3f|(b1>>>4)&0x0f];
+ c[ci++]=rfc1421alphabet[(b1<<2)&0x3f];
+ c[ci++]=pad;
+ break;
+
+ case 1:
+ b0=b[bi++];
+ c[ci++]=rfc1421alphabet[(b0>>>2)&0x3f];
+ c[ci++]=rfc1421alphabet[(b0<<4)&0x3f];
+ c[ci++]=pad;
+ c[ci++]=pad;
+ break;
+
+ default:
+ break;
+ }
+ }
+
+ if (rfc2045)
+ {
+ c[ci++]=13;
+ c[ci++]=10;
+ }
+ return c;
+ }
+
+ // ------------------------------------------------------------------
+ /**
+ * Base 64 decode as described in RFC 2045.
+ * <p>Unlike {@link #decode(char[])}, extra whitespace is ignored.
+ * @param encoded String to decode.
+ * @param charEncoding String representing the character encoding
+ * used to map the decoded bytes into a String.
+ * @return String decoded byte array.
+ * @throws UnsupportedEncodingException if the encoding is not supported
+ * @throws IllegalArgumentException if the input is not a valid
+ * B64 encoding.
+ */
+ static public String decode(String encoded,String charEncoding)
+ throws UnsupportedEncodingException
+ {
+ byte[] decoded=decode(encoded);
+ if (charEncoding==null)
+ return new String(decoded);
+ return new String(decoded,charEncoding);
+ }
+
+ /* ------------------------------------------------------------ */
+ /**
+ * Fast Base 64 decode as described in RFC 1421.
+ *
+ * <p>Unlike other decode methods, this does not attempt to
+ * cope with extra whitespace as described in RFC 1521/2045.
+ * <p> Avoids creating extra copies of the input/output.
+ * <p> Note this code has been flattened for performance.
+ * @param b char array to decode.
+ * @return byte array containing the decoded form of the input.
+ * @throws IllegalArgumentException if the input is not a valid
+ * B64 encoding.
+ */
+ static public byte[] decode(char[] b)
+ {
+ if (b==null)
+ return null;
+
+ int bLen=b.length;
+ if (bLen%4!=0)
+ throw new IllegalArgumentException("Input block size is not 4");
+
+ int li=bLen-1;
+ while (li>=0 && b[li]==(byte)pad)
+ li--;
+
+ if (li<0)
+ return new byte[0];
+
+ // Create result array of exact required size.
+ int rLen=((li+1)*3)/4;
+ byte r[]=new byte[rLen];
+ int ri=0;
+ int bi=0;
+ int stop=(rLen/3)*3;
+ byte b0,b1,b2,b3;
+ try
+ {
+ while (ri<stop)
+ {
+ b0=rfc1421nibbles[b[bi++]];
+ b1=rfc1421nibbles[b[bi++]];
+ b2=rfc1421nibbles[b[bi++]];
+ b3=rfc1421nibbles[b[bi++]];
+ if (b0<0 || b1<0 || b2<0 || b3<0)
+ throw new IllegalArgumentException("Not B64 encoded");
+
+ r[ri++]=(byte)(b0<<2|b1>>>4);
+ r[ri++]=(byte)(b1<<4|b2>>>2);
+ r[ri++]=(byte)(b2<<6|b3);
+ }
+
+ if (rLen!=ri)
+ {
+ switch (rLen%3)
+ {
+ case 2:
+ b0=rfc1421nibbles[b[bi++]];
+ b1=rfc1421nibbles[b[bi++]];
+ b2=rfc1421nibbles[b[bi++]];
+ if (b0<0 || b1<0 || b2<0)
+ throw new IllegalArgumentException("Not B64 encoded");
+ r[ri++]=(byte)(b0<<2|b1>>>4);
+ r[ri++]=(byte)(b1<<4|b2>>>2);
+ break;
+
+ case 1:
+ b0=rfc1421nibbles[b[bi++]];
+ b1=rfc1421nibbles[b[bi++]];
+ if (b0<0 || b1<0)
+ throw new IllegalArgumentException("Not B64 encoded");
+ r[ri++]=(byte)(b0<<2|b1>>>4);
+ break;
+
+ default:
+ break;
+ }
+ }
+ }
+ catch (IndexOutOfBoundsException e)
+ {
+ throw new IllegalArgumentException("char "+bi
+ +" was not B64 encoded");
+ }
+
+ return r;
+ }
+
+ /* ------------------------------------------------------------ */
+ /**
+ * Base 64 decode as described in RFC 2045.
+ * <p>Unlike {@link #decode(char[])}, extra whitespace is ignored.
+ * @param encoded String to decode.
+ * @return byte array containing the decoded form of the input.
+ * @throws IllegalArgumentException if the input is not a valid
+ * B64 encoding.
+ */
+ static public byte[] decode(String encoded)
+ {
+ if (encoded==null)
+ return null;
+
+ int ci=0;
+ byte nibbles[] = new byte[4];
+ int s=0;
+ ByteArrayOutputStream bout = new ByteArrayOutputStream(4*encoded.length()/3);
+
+ while (ci<encoded.length())
+ {
+ char c=encoded.charAt(ci++);
+
+ if (c==pad)
+ break;
+
+ if (Character.isWhitespace(c))
+ continue;
+
+ byte nibble=rfc1421nibbles[c];
+ if (nibble<0)
+ throw new IllegalArgumentException("Not B64 encoded");
+
+ nibbles[s++]=rfc1421nibbles[c];
+
+ switch(s)
+ {
+ case 1:
+ break;
+ case 2:
+ bout.write(nibbles[0]<<2|nibbles[1]>>>4);
+ break;
+ case 3:
+ bout.write(nibbles[1]<<4|nibbles[2]>>>2);
+ break;
+ case 4:
+ bout.write(nibbles[2]<<6|nibbles[3]);
+ s=0;
+ break;
+ }
+
+ }
+
+ return bout.toByteArray();
+ }
+}