Temporarily include bndlib 1.47 for testing purposes (not yet on central)
git-svn-id: https://svn.apache.org/repos/asf/felix/trunk@1185095 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/bundleplugin/src/main/java/aQute/lib/base64/Base64.java b/bundleplugin/src/main/java/aQute/lib/base64/Base64.java
new file mode 100644
index 0000000..1210a02
--- /dev/null
+++ b/bundleplugin/src/main/java/aQute/lib/base64/Base64.java
@@ -0,0 +1,135 @@
+package aQute.lib.base64;
+
+import java.io.*;
+
+/*
+ * Base 64 converter.
+ *
+ * TODO Implement string to byte[]
+ */
+public class Base64 {
+ byte[] data;
+
+ static final String alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
+ static byte[] values = new byte[128];
+
+ static {
+ for (int i = 0; i < values.length; i++) {
+ values[i] = -1;
+ }
+ // Create reverse index
+ for (int i = 0; i < alphabet.length(); i++) {
+ char c = alphabet.charAt(i);
+ values[c] = (byte) i;
+ }
+ }
+
+ public Base64(byte data[]) {
+ this.data = data;
+ }
+
+ public final static byte[] decodeBase64(String string) {
+ string = string.trim();
+ ByteArrayOutputStream out = new ByteArrayOutputStream();
+
+ int register = 0;
+ int i = 0;
+ int pads = 0;
+
+ byte test[] = new byte[3];
+
+ while (i < string.length()) {
+ char c = string.charAt(i);
+ if (c > 0x7F)
+ throw new IllegalArgumentException(
+ "Invalid base64 character in " + string
+ + ", character value > 128 ");
+
+ int v = 0;
+ if ( c == '=' ) {
+ pads++;
+ } else {
+ v = values[c];
+ if ( v < 0 )
+ throw new IllegalArgumentException(
+ "Invalid base64 character in " + string + ", " + c );
+ }
+ register <<= 6;
+ register |= v;
+ test[2] = (byte) (register & 0xFF);
+ test[1] = (byte) ((register >> 8) & 0xFF);
+ test[0] = (byte) ((register >> 16) & 0xFF);
+
+ i++;
+
+ if ((i % 4) == 0) {
+ flush(out, register, pads);
+ register = 0;
+ pads = 0;
+ }
+ }
+ return out.toByteArray();
+ }
+
+ static private void flush(ByteArrayOutputStream out, int register, int pads) {
+ switch (pads) {
+ case 0:
+ out.write(0xFF & (register >> 16));
+ out.write(0xFF & (register >> 8));
+ out.write(0xFF & (register >> 0));
+ break;
+
+ case 1:
+ out.write(0xFF & (register >> 16));
+ out.write(0xFF & (register >> 8));
+ break;
+
+ case 2:
+ out.write(0xFF & (register >> 16));
+ }
+ }
+
+ public Base64(String s) {
+ data = decodeBase64(s);
+ }
+
+ public String toString() {
+ return encodeBase64(data);
+ }
+
+ public static String encodeBase64(byte data[]) {
+ StringBuffer sb = new StringBuffer();
+ int buf = 0;
+ int bits = 0;
+ int n = 0;
+
+ while (true) {
+ if (bits >= 6) {
+ bits -= 6;
+ int v = 0x3F & (buf >> bits);
+ sb.append(alphabet.charAt(v));
+ } else {
+ if (n >= data.length)
+ break;
+
+ buf <<= 8;
+ buf |= 0xFF & data[n++];
+ bits += 8;
+ }
+ }
+ if (bits != 0) // must be less than 7
+ sb.append(alphabet.charAt(0x3F & (buf << (6 - bits))));
+
+ int mod = 4 - (sb.length() % 4);
+ if (mod != 4) {
+ for (int i = 0; i < mod; i++)
+ sb.append('=');
+ }
+ return sb.toString();
+ }
+
+ public Object toData() {
+ return data;
+ }
+
+}
diff --git a/bundleplugin/src/main/java/aQute/lib/base64/packageinfo b/bundleplugin/src/main/java/aQute/lib/base64/packageinfo
new file mode 100644
index 0000000..7c8de03
--- /dev/null
+++ b/bundleplugin/src/main/java/aQute/lib/base64/packageinfo
@@ -0,0 +1 @@
+version 1.0