From 22094368c2865dcfb6daf8366425212b721a4657 Mon Sep 17 00:00:00 2001
From: matthew_swift <matthew_swift@localhost>
Date: Thu, 05 Feb 2009 17:42:14 +0000
Subject: [PATCH] Merge ASN1 branch to trunk

---
 opends/src/server/org/opends/server/util/Base64.java |   50 ++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 50 insertions(+), 0 deletions(-)

diff --git a/opends/src/server/org/opends/server/util/Base64.java b/opends/src/server/org/opends/server/util/Base64.java
index 8d71e09..bb8a518 100644
--- a/opends/src/server/org/opends/server/util/Base64.java
+++ b/opends/src/server/org/opends/server/util/Base64.java
@@ -46,6 +46,7 @@
 import org.opends.messages.MessageBuilder;
 import org.opends.server.core.DirectoryServer;
 import org.opends.server.types.NullOutputStream;
+import org.opends.server.types.ByteSequence;
 import org.opends.server.util.args.ArgumentException;
 import org.opends.server.util.args.BooleanArgument;
 import org.opends.server.util.args.StringArgument;
@@ -133,6 +134,55 @@
     return buffer.toString();
   }
 
+  /**
+   * Encodes the provided raw data using base64.
+   *
+   * @param  rawData  The raw data to encode.  It must not be <CODE>null</CODE>.
+   *
+   * @return  The base64-encoded representation of the provided raw data.
+   */
+  public static String encode(ByteSequence rawData)
+  {
+    ensureNotNull(rawData);
+
+
+    StringBuilder buffer = new StringBuilder(4 * rawData.length() / 3);
+
+    int pos = 0;
+    int iterations = rawData.length() / 3;
+    for (int i=0; i < iterations; i++)
+    {
+      int value = ((rawData.byteAt(pos++) & 0xFF) << 16) |
+                  ((rawData.byteAt(pos++) & 0xFF) <<  8) |
+          (rawData.byteAt(pos++) & 0xFF);
+
+      buffer.append(BASE64_ALPHABET[(value >>> 18) & 0x3F]);
+      buffer.append(BASE64_ALPHABET[(value >>> 12) & 0x3F]);
+      buffer.append(BASE64_ALPHABET[(value >>>  6) & 0x3F]);
+      buffer.append(BASE64_ALPHABET[value & 0x3F]);
+    }
+
+
+    switch (rawData.length() % 3)
+    {
+      case 1:
+        buffer.append(BASE64_ALPHABET[(rawData.byteAt(pos) >>> 2) & 0x3F]);
+        buffer.append(BASE64_ALPHABET[(rawData.byteAt(pos) <<  4) & 0x3F]);
+        buffer.append("==");
+        break;
+      case 2:
+        int value = ((rawData.byteAt(pos++) & 0xFF) << 8) |
+            (rawData.byteAt(pos) & 0xFF);
+        buffer.append(BASE64_ALPHABET[(value >>> 10) & 0x3F]);
+        buffer.append(BASE64_ALPHABET[(value >>>  4) & 0x3F]);
+        buffer.append(BASE64_ALPHABET[(value <<   2) & 0x3F]);
+        buffer.append("=");
+        break;
+    }
+
+    return buffer.toString();
+  }
+
 
 
   /**

--
Gitblit v1.10.0