You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@harmony.apache.org by ml...@apache.org on 2006/04/12 05:48:16 UTC

svn commit: r393374 - in /incubator/harmony/enhanced/classlib/trunk/modules: archive/src/main/java/java/util/jar/ luni/src/main/java/org/apache/harmony/luni/internal/net/www/protocol/http/ luni/src/main/java/org/apache/harmony/luni/util/ prefs/src/main...

Author: mloenko
Date: Tue Apr 11 20:48:13 2006
New Revision: 393374

URL: http://svn.apache.org/viewcvs?rev=393374&view=rev
Log:
Change as discussed in the
'select one (was: RE: svn commit: r391955 [5/5] - in /incubator/harmony/enhanced/...)'
mail thread: switching to a single Base64 implementation. Removing unused ASN.1 and DefaultPolicy

Removed:
    incubator/harmony/enhanced/classlib/trunk/modules/luni/src/main/java/org/apache/harmony/luni/util/ASN1Decoder.java
    incubator/harmony/enhanced/classlib/trunk/modules/luni/src/main/java/org/apache/harmony/luni/util/ASN1Encoder.java
    incubator/harmony/enhanced/classlib/trunk/modules/luni/src/main/java/org/apache/harmony/luni/util/ASN1Exception.java
    incubator/harmony/enhanced/classlib/trunk/modules/luni/src/main/java/org/apache/harmony/luni/util/BASE64Decoder.java
    incubator/harmony/enhanced/classlib/trunk/modules/luni/src/main/java/org/apache/harmony/luni/util/BASE64Encoder.java
    incubator/harmony/enhanced/classlib/trunk/modules/luni/src/main/java/org/apache/harmony/luni/util/DefaultPolicy.java
Modified:
    incubator/harmony/enhanced/classlib/trunk/modules/archive/src/main/java/java/util/jar/JarVerifier.java
    incubator/harmony/enhanced/classlib/trunk/modules/luni/src/main/java/org/apache/harmony/luni/internal/net/www/protocol/http/HttpURLConnection.java
    incubator/harmony/enhanced/classlib/trunk/modules/prefs/src/main/java/java/util/prefs/AbstractPreferences.java
    incubator/harmony/enhanced/classlib/trunk/modules/security/src/main/java/common/org/apache/harmony/misc/Base64.java

Modified: incubator/harmony/enhanced/classlib/trunk/modules/archive/src/main/java/java/util/jar/JarVerifier.java
URL: http://svn.apache.org/viewcvs/incubator/harmony/enhanced/classlib/trunk/modules/archive/src/main/java/java/util/jar/JarVerifier.java?rev=393374&r1=393373&r2=393374&view=diff
==============================================================================
--- incubator/harmony/enhanced/classlib/trunk/modules/archive/src/main/java/java/util/jar/JarVerifier.java (original)
+++ incubator/harmony/enhanced/classlib/trunk/modules/archive/src/main/java/java/util/jar/JarVerifier.java Tue Apr 11 20:48:13 2006
@@ -32,7 +32,7 @@
 import java.util.Vector;
 import java.util.zip.ZipEntry;
 
-import org.apache.harmony.luni.util.BASE64Decoder;
+import org.apache.harmony.misc.Base64;
 
 import org.apache.harmony.security.utils.JarUtils;
 
@@ -366,7 +366,7 @@
 	 */
 	void verifySignatures(VerifierEntry entry, ZipEntry zipEntry) {
 		byte[] digest = entry.digest.digest();
-		if (!MessageDigest.isEqual(digest, BASE64Decoder.decode(entry.hash)))
+		if (!MessageDigest.isEqual(digest, Base64.decode(entry.hash)))
 			/* [MSG "K00ec", "{0} has invalid digest for {1} in {2}"] */
 			throw new SecurityException(Msg.getString("K00ec", new Object[] {
 					JarFile.MANIFEST_NAME, zipEntry.getName(), jarName }));
@@ -422,7 +422,7 @@
 			} catch (UnsupportedEncodingException e) {
 				throw new RuntimeException(e.toString());
 			}
-			return MessageDigest.isEqual(b, BASE64Decoder.decode(hashBytes));
+			return MessageDigest.isEqual(b, Base64.decode(hashBytes));
 		}
 		if (ignorable) {
 			return true;

Modified: incubator/harmony/enhanced/classlib/trunk/modules/luni/src/main/java/org/apache/harmony/luni/internal/net/www/protocol/http/HttpURLConnection.java
URL: http://svn.apache.org/viewcvs/incubator/harmony/enhanced/classlib/trunk/modules/luni/src/main/java/org/apache/harmony/luni/internal/net/www/protocol/http/HttpURLConnection.java?rev=393374&r1=393373&r2=393374&view=diff
==============================================================================
--- incubator/harmony/enhanced/classlib/trunk/modules/luni/src/main/java/org/apache/harmony/luni/internal/net/www/protocol/http/HttpURLConnection.java (original)
+++ incubator/harmony/enhanced/classlib/trunk/modules/luni/src/main/java/org/apache/harmony/luni/internal/net/www/protocol/http/HttpURLConnection.java Tue Apr 11 20:48:13 2006
@@ -941,7 +941,7 @@
 			connected = false;
 			// base64 encode the username and password
 			byte[] bytes = (pa.getUserName() + ":" + new String(pa.getPassword())).getBytes("ISO8859_1");
-			String encoded = new String(org.apache.harmony.luni.util.BASE64Encoder.encode(bytes), "ISO8859_1");
+			String encoded = org.apache.harmony.misc.Base64.encode(bytes, "ISO8859_1");
 			setRequestProperty("Authorization", scheme + " " + encoded);
 			continue;
 		}

Modified: incubator/harmony/enhanced/classlib/trunk/modules/prefs/src/main/java/java/util/prefs/AbstractPreferences.java
URL: http://svn.apache.org/viewcvs/incubator/harmony/enhanced/classlib/trunk/modules/prefs/src/main/java/java/util/prefs/AbstractPreferences.java?rev=393374&r1=393373&r2=393374&view=diff
==============================================================================
--- incubator/harmony/enhanced/classlib/trunk/modules/prefs/src/main/java/java/util/prefs/AbstractPreferences.java (original)
+++ incubator/harmony/enhanced/classlib/trunk/modules/prefs/src/main/java/java/util/prefs/AbstractPreferences.java Tue Apr 11 20:48:13 2006
@@ -25,8 +25,7 @@
 import java.util.StringTokenizer;
 import java.util.TreeSet;
 
-import org.apache.harmony.luni.util.BASE64Decoder;
-import org.apache.harmony.luni.util.BASE64Encoder;
+import org.apache.harmony.misc.Base64;
 
 /**
  * This class is partly implementation of <code>Preferences</code>, which can be 
@@ -445,7 +444,7 @@
             if (bavalue.length % 4 != 0) {
                 return deflt;
             }
-            dres = BASE64Decoder.decode(bavalue);
+            dres = Base64.decode(bavalue);
         } catch (Exception e) {
             dres = deflt;
         }
@@ -700,9 +699,8 @@
      * @see java.util.prefs.Preferences#putByteArray(java.lang.String, byte[])
      */
     public void putByteArray(String key, byte[] value) {
-        byte[] result = BASE64Encoder.encode(value);
         try {
-            put(key, new String(result, "ascii")); //$NON-NLS-1$
+            put(key, Base64.encode(value, "ascii")); //$NON-NLS-1$
         } catch (UnsupportedEncodingException e) {
             //should not happen
         }

Modified: incubator/harmony/enhanced/classlib/trunk/modules/security/src/main/java/common/org/apache/harmony/misc/Base64.java
URL: http://svn.apache.org/viewcvs/incubator/harmony/enhanced/classlib/trunk/modules/security/src/main/java/common/org/apache/harmony/misc/Base64.java?rev=393374&r1=393373&r2=393374&view=diff
==============================================================================
--- incubator/harmony/enhanced/classlib/trunk/modules/security/src/main/java/common/org/apache/harmony/misc/Base64.java (original)
+++ incubator/harmony/enhanced/classlib/trunk/modules/security/src/main/java/common/org/apache/harmony/misc/Base64.java Tue Apr 11 20:48:13 2006
@@ -21,6 +21,8 @@
 
 package org.apache.harmony.misc;
 
+import java.io.UnsupportedEncodingException;
+
 /**
  * This class implements Base64 encoding/decoding functionality
  * as specified in RFC 2045 (http://www.ietf.org/rfc/rfc2045.txt).
@@ -32,59 +34,87 @@
     }
     
     public static byte[] decode(byte[] in, int len) {
+        // approximate output length
         int length = len / 4 * 3;
+        // temporary array
         byte[] out = new byte[length];
-        int pad = 0, index = 0, j = 0, bits = 0;
-        byte[] bytes = new byte[4];
+        // number of padding characters ('=')
+        int pad = 0;
         byte chr;
-        for (int i=0; i<len; i++) {
-            if (in[i] == '\n' || in[i] =='\r') {
+        // compute the number of the padding characters
+        // and adjust the length of the input
+        for (;;len--) {
+            chr = in[len-1];
+            // skip the neutral characters
+            if ((chr == '\n') || (chr == '\r') || 
+                    (chr == ' ') || (chr == '\t')) {
                 continue;
             }
+            if (chr == '=') {
+                pad++;
+            } else {
+                break;
+            }
+        }
+        // index in the output array
+        int out_index = 0;
+        // index in the input array
+        int in_index = 0;
+        // holds the value of the input character
+        int bits = 0;
+        // holds the value of the input quantum
+        int quantum = 0;
+        for (int i=0; i<len; i++) {
             chr = in[i];
-            // char ASCII value
-            //  +    43    62
-            //  /    47    63
-            //  0    48    52
-            //     .  .  .
-            //  9    57    61 (ASCII + 4)
-            //  =    61   pad
-            //  A    65    0
-            //     .  .  .
-            //  Z    90    25 (ASCII - 65)
-            //  a    97    26
-            //     .  .  .
-            //  z    122   51 (ASCII - 71)
-            if (chr == '+') {
-                bits = 62;
-            } else if (chr == '/') {
-                bits = 63;
-            } else if ((chr >= '0') && (chr <= '9')) {
-                bits = chr + 4;
-            } else if (chr == '=') {
-                bits = 0;
-                pad ++;
-            } else if ((chr >= 'A') && (chr <= 'Z')) {
+            // skip the neutral characters
+            if ((chr == '\n') || (chr == '\r') || 
+                    (chr == ' ') || (chr == '\t')) {
+                continue;
+            }
+            if ((chr >= 'A') && (chr <= 'Z')) {
+                // char ASCII value
+                //  A    65    0
+                //  Z    90    25 (ASCII - 65)
                 bits = chr - 65;
             } else if ((chr >= 'a') && (chr <= 'z')) {
+                // char ASCII value
+                //  a    97    26
+                //  z    122   51 (ASCII - 71)
                 bits = chr - 71;
+            } else if ((chr >= '0') && (chr <= '9')) {
+                // char ASCII value
+                //  0    48    52
+                //  9    57    61 (ASCII + 4)
+                bits = chr + 4;
+            } else if (chr == '+') {
+                bits = 62;
+            } else if (chr == '/') {
+                bits = 63;
             } else {
                 return null;
             }
-            bytes[j%4] = (byte) bits;
-            if (j%4 == 3) {
-                out[index++] = (byte) (bytes[0] << 2 | bytes[1] >> 4);
-                if (pad != 2) {
-                    out[index++] = (byte) (bytes[1] << 4 | bytes[2] >> 2);
-                    if (pad != 1) {
-                        out[index++] = (byte) (bytes[2] << 6 | bytes[3]);
-                    }
-                }
+            // append the value to the quantum
+            quantum = (quantum << 6) | (byte) bits;
+            if (in_index%4 == 3) {
+                // 4 characters were read, so make the output:
+                out[out_index++] = (byte) ((quantum & 0x00FF0000) >> 16);
+                out[out_index++] = (byte) ((quantum & 0x0000FF00) >> 8);
+                out[out_index++] = (byte) (quantum & 0x000000FF);
+            }
+            in_index++;
+        }
+        if (pad > 0) {
+            // adjust the quantum value according to the padding
+            quantum = quantum << (6*pad);
+            // make output
+            out[out_index++] = (byte) ((quantum & 0x00FF0000) >> 16);
+            if (pad == 1) {
+                out[out_index++] = (byte) ((quantum & 0x0000FF00) >> 8);
             }
-            j++;
         }
-        byte[] result = new byte[index];
-        System.arraycopy(out, 0, result, 0, index);
+        // create the resulting array
+        byte[] result = new byte[out_index];
+        System.arraycopy(out, 0, result, 0, out_index);
         return result;
     }
 
@@ -95,7 +125,7 @@
          'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '0', '1', '2', '3', 
          '4', '5', '6', '7', '8', '9', '+', '/'};
 
-    public static String encode(byte[] in) {
+    public static String encode(byte[] in, String charsetName) throws UnsupportedEncodingException {
         int length = in.length * 4 / 3;
         length += length / 76 + 3; // for crlr
         byte[] out = new byte[length];
@@ -129,7 +159,7 @@
                 out[index++] = '=';
                 break;
         }
-        return new String(out, 0, index);
+        return new String(out, 0, index, charsetName);
     }
 }