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