|
|
@@ -1,121 +0,0 @@
|
|
|
-/*
|
|
|
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
|
|
|
- *
|
|
|
- * Copyright (c) 2007-2017 Oracle and/or its affiliates. All rights reserved.
|
|
|
- *
|
|
|
- * The contents of this file are subject to the terms of either the GNU
|
|
|
- * General Public License Version 2 only ("GPL") or the Common Development
|
|
|
- * and Distribution License("CDDL") (collectively, the "License"). You
|
|
|
- * may not use this file except in compliance with the License. You can
|
|
|
- * obtain a copy of the License at
|
|
|
- * https://oss.oracle.com/licenses/CDDL+GPL-1.1
|
|
|
- * or LICENSE.txt. See the License for the specific
|
|
|
- * language governing permissions and limitations under the License.
|
|
|
- *
|
|
|
- * When distributing the software, include this License Header Notice in each
|
|
|
- * file and include the License file at LICENSE.txt.
|
|
|
- *
|
|
|
- * GPL Classpath Exception:
|
|
|
- * Oracle designates this particular file as subject to the "Classpath"
|
|
|
- * exception as provided by Oracle in the GPL Version 2 section of the License
|
|
|
- * file that accompanied this code.
|
|
|
- *
|
|
|
- * Modifications:
|
|
|
- * If applicable, add the following below the License Header, with the fields
|
|
|
- * enclosed by brackets [] replaced by your own identifying information:
|
|
|
- * "Portions Copyright [year] [name of copyright owner]"
|
|
|
- *
|
|
|
- * Contributor(s):
|
|
|
- * If you wish your version of this file to be governed by only the CDDL or
|
|
|
- * only the GPL Version 2, indicate your decision by adding "[Contributor]
|
|
|
- * elects to include this software in this distribution under the [CDDL or GPL
|
|
|
- * Version 2] license." If you don't indicate a single choice of license, a
|
|
|
- * recipient has the option to distribute your version of this file under
|
|
|
- * either the CDDL, the GPL Version 2 or to extend the choice of license to
|
|
|
- * its licensees as provided above. However, if you add GPL Version 2 code
|
|
|
- * and therefore, elected the GPL Version 2 license, then the option applies
|
|
|
- * only if the new code is made subject to such option by the copyright
|
|
|
- * holder.
|
|
|
- */
|
|
|
-
|
|
|
-package net.ranides.assira.io.uri.impl;
|
|
|
-
|
|
|
-class FormatBase64 {
|
|
|
-
|
|
|
- private static final char[] encodeMap = initEncodeMap();
|
|
|
-
|
|
|
- private static char[] initEncodeMap() {
|
|
|
- char[] map = new char[64];
|
|
|
- int i;
|
|
|
- for (i = 0; i < 26; i++) {
|
|
|
- map[i] = (char) ('A' + i);
|
|
|
- }
|
|
|
- for (i = 26; i < 52; i++) {
|
|
|
- map[i] = (char) ('a' + (i - 26));
|
|
|
- }
|
|
|
- for (i = 52; i < 62; i++) {
|
|
|
- map[i] = (char) ('0' + (i - 52));
|
|
|
- }
|
|
|
- map[62] = '+';
|
|
|
- map[63] = '/';
|
|
|
-
|
|
|
- return map;
|
|
|
- }
|
|
|
-
|
|
|
- static String printBase64Binary(byte[] input) {
|
|
|
- return printBase64Binary(input, 0, input.length);
|
|
|
- }
|
|
|
-
|
|
|
- static String printBase64Binary(byte[] input, int offset, int len) {
|
|
|
- char[] buf = new char[((len + 2) / 3) * 4];
|
|
|
- int ptr = _printBase64Binary(input, offset, len, buf, 0);
|
|
|
- assert ptr == buf.length;
|
|
|
- return new String(buf);
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * Encodes a byte array into a char array by doing base64 encoding.
|
|
|
- *
|
|
|
- * The caller must supply a big enough buffer.
|
|
|
- *
|
|
|
- * @return
|
|
|
- * the value of {@code ptr+((len+2)/3)*4}, which is the new offset
|
|
|
- * in the output buffer where the further bytes should be placed.
|
|
|
- */
|
|
|
- private static int _printBase64Binary(byte[] input, int offset, int len, char[] buf, int ptr) {
|
|
|
- // encode elements until only 1 or 2 elements are left to encode
|
|
|
- int remaining = len;
|
|
|
- int i;
|
|
|
- for (i = offset;remaining >= 3; remaining -= 3, i += 3) {
|
|
|
- buf[ptr++] = encode(input[i] >> 2);
|
|
|
- buf[ptr++] = encode(
|
|
|
- ((input[i] & 0x3) << 4)
|
|
|
- | ((input[i + 1] >> 4) & 0xF));
|
|
|
- buf[ptr++] = encode(
|
|
|
- ((input[i + 1] & 0xF) << 2)
|
|
|
- | ((input[i + 2] >> 6) & 0x3));
|
|
|
- buf[ptr++] = encode(input[i + 2] & 0x3F);
|
|
|
- }
|
|
|
- // encode when exactly 1 element (left) to encode
|
|
|
- if (remaining == 1) {
|
|
|
- buf[ptr++] = encode(input[i] >> 2);
|
|
|
- buf[ptr++] = encode(((input[i]) & 0x3) << 4);
|
|
|
- buf[ptr++] = '=';
|
|
|
- buf[ptr++] = '=';
|
|
|
- }
|
|
|
- // encode when exactly 2 elements (left) to encode
|
|
|
- if (remaining == 2) {
|
|
|
- buf[ptr++] = encode(input[i] >> 2);
|
|
|
- buf[ptr++] = encode(((input[i] & 0x3) << 4)
|
|
|
- | ((input[i + 1] >> 4) & 0xF));
|
|
|
- buf[ptr++] = encode((input[i + 1] & 0xF) << 2);
|
|
|
- buf[ptr++] = '=';
|
|
|
- }
|
|
|
- return ptr;
|
|
|
- }
|
|
|
-
|
|
|
- private static char encode(int i) {
|
|
|
- return encodeMap[i & 0x3F];
|
|
|
- }
|
|
|
-
|
|
|
-}
|