mirror of
https://github.com/spring-projects/spring-security.git
synced 2025-06-25 13:32:30 +00:00
Update Base64 implementation to include fixes (using diff) from the original up to version 2.3.7.
This commit is contained in:
parent
11a091f051
commit
f509193604
@ -2,7 +2,7 @@ package org.springframework.security.core.codec;
|
|||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Base64 encoder which is a reduced version of Robert Harder's public domain implementation.
|
* Base64 encoder which is a reduced version of Robert Harder's public domain implementation (version 2.3.7).
|
||||||
* See <a href="http://iharder.net/base64">http://iharder.net/base64</a> for more information.
|
* See <a href="http://iharder.net/base64">http://iharder.net/base64</a> for more information.
|
||||||
* <p>
|
* <p>
|
||||||
* For internal use only.
|
* For internal use only.
|
||||||
@ -101,8 +101,8 @@ public final class Base64 {
|
|||||||
-9,-9,-9,-9,-9,-9, // Decimal 91 - 96
|
-9,-9,-9,-9,-9,-9, // Decimal 91 - 96
|
||||||
26,27,28,29,30,31,32,33,34,35,36,37,38, // Letters 'a' through 'm'
|
26,27,28,29,30,31,32,33,34,35,36,37,38, // Letters 'a' through 'm'
|
||||||
39,40,41,42,43,44,45,46,47,48,49,50,51, // Letters 'n' through 'z'
|
39,40,41,42,43,44,45,46,47,48,49,50,51, // Letters 'n' through 'z'
|
||||||
-9,-9,-9,-9 // Decimal 123 - 126
|
-9,-9,-9,-9,-9 // Decimal 123 - 127
|
||||||
/*,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9, // Decimal 127 - 139
|
,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9, // Decimal 128 - 139
|
||||||
-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9, // Decimal 140 - 152
|
-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9, // Decimal 140 - 152
|
||||||
-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9, // Decimal 153 - 165
|
-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9, // Decimal 153 - 165
|
||||||
-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9, // Decimal 166 - 178
|
-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9, // Decimal 166 - 178
|
||||||
@ -111,7 +111,7 @@ public final class Base64 {
|
|||||||
-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9, // Decimal 205 - 217
|
-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9, // Decimal 205 - 217
|
||||||
-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9, // Decimal 218 - 230
|
-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9, // Decimal 218 - 230
|
||||||
-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9, // Decimal 231 - 243
|
-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9, // Decimal 231 - 243
|
||||||
-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9 // Decimal 244 - 255 */
|
-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9 // Decimal 244 - 255
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@ -163,8 +163,8 @@ public final class Base64 {
|
|||||||
-9, // Decimal 96
|
-9, // Decimal 96
|
||||||
26,27,28,29,30,31,32,33,34,35,36,37,38, // Letters 'a' through 'm'
|
26,27,28,29,30,31,32,33,34,35,36,37,38, // Letters 'a' through 'm'
|
||||||
39,40,41,42,43,44,45,46,47,48,49,50,51, // Letters 'n' through 'z'
|
39,40,41,42,43,44,45,46,47,48,49,50,51, // Letters 'n' through 'z'
|
||||||
-9,-9,-9,-9 // Decimal 123 - 126
|
-9,-9,-9,-9,-9 // Decimal 123 - 127
|
||||||
/*,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9, // Decimal 127 - 139
|
,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9, // Decimal 128 - 139
|
||||||
-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9, // Decimal 140 - 152
|
-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9, // Decimal 140 - 152
|
||||||
-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9, // Decimal 153 - 165
|
-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9, // Decimal 153 - 165
|
||||||
-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9, // Decimal 166 - 178
|
-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9, // Decimal 166 - 178
|
||||||
@ -173,7 +173,7 @@ public final class Base64 {
|
|||||||
-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9, // Decimal 205 - 217
|
-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9, // Decimal 205 - 217
|
||||||
-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9, // Decimal 218 - 230
|
-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9, // Decimal 218 - 230
|
||||||
-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9, // Decimal 231 - 243
|
-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9, // Decimal 231 - 243
|
||||||
-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9 // Decimal 244 - 255 */
|
-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9 // Decimal 244 - 255
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@ -228,8 +228,8 @@ public final class Base64 {
|
|||||||
-9, // Decimal 96
|
-9, // Decimal 96
|
||||||
38,39,40,41,42,43,44,45,46,47,48,49,50, // Letters 'a' through 'm'
|
38,39,40,41,42,43,44,45,46,47,48,49,50, // Letters 'a' through 'm'
|
||||||
51,52,53,54,55,56,57,58,59,60,61,62,63, // Letters 'n' through 'z'
|
51,52,53,54,55,56,57,58,59,60,61,62,63, // Letters 'n' through 'z'
|
||||||
-9,-9,-9,-9 // Decimal 123 - 126
|
-9,-9,-9,-9,-9 // Decimal 123 - 127
|
||||||
/*,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9, // Decimal 127 - 139
|
,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9, // Decimal 128 - 139
|
||||||
-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9, // Decimal 140 - 152
|
-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9, // Decimal 140 - 152
|
||||||
-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9, // Decimal 153 - 165
|
-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9, // Decimal 153 - 165
|
||||||
-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9, // Decimal 166 - 178
|
-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9, // Decimal 166 - 178
|
||||||
@ -238,7 +238,7 @@ public final class Base64 {
|
|||||||
-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9, // Decimal 205 - 217
|
-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9, // Decimal 205 - 217
|
||||||
-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9, // Decimal 218 - 230
|
-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9, // Decimal 218 - 230
|
||||||
-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9, // Decimal 231 - 243
|
-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9, // Decimal 231 - 243
|
||||||
-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9 // Decimal 244 - 255 */
|
-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9 // Decimal 244 - 255
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@ -370,10 +370,6 @@ public final class Base64 {
|
|||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Similar to {@link #encodeBytes(byte[], int, int, int)} but returns
|
|
||||||
* a byte array instead of instantiating a String. This is more efficient
|
|
||||||
* if you're working with I/O streams and have large data sets to encode.
|
|
||||||
*
|
|
||||||
*
|
*
|
||||||
* @param source The data to convert
|
* @param source The data to convert
|
||||||
* @param off Offset in array where conversion should begin
|
* @param off Offset in array where conversion should begin
|
||||||
@ -444,7 +440,7 @@ public final class Base64 {
|
|||||||
|
|
||||||
|
|
||||||
// Only resize array if we didn't guess it right.
|
// Only resize array if we didn't guess it right.
|
||||||
if( e < outBuff.length - 1 ){
|
if( e <= outBuff.length - 1 ){
|
||||||
byte[] finalOut = new byte[e];
|
byte[] finalOut = new byte[e];
|
||||||
System.arraycopy(outBuff,0, finalOut,0,e);
|
System.arraycopy(outBuff,0, finalOut,0,e);
|
||||||
//System.err.println("Having to resize array from " + outBuff.length + " to " + e );
|
//System.err.println("Having to resize array from " + outBuff.length + " to " + e );
|
||||||
@ -601,26 +597,24 @@ public final class Base64 {
|
|||||||
byte[] b4 = new byte[4]; // Four byte buffer from source, eliminating white space
|
byte[] b4 = new byte[4]; // Four byte buffer from source, eliminating white space
|
||||||
int b4Posn = 0; // Keep track of four byte input buffer
|
int b4Posn = 0; // Keep track of four byte input buffer
|
||||||
int i = 0; // Source array counter
|
int i = 0; // Source array counter
|
||||||
byte sbiCrop = 0; // Low seven bits (ASCII) of input
|
|
||||||
byte sbiDecode = 0; // Special value from DECODABET
|
byte sbiDecode = 0; // Special value from DECODABET
|
||||||
|
|
||||||
for( i = off; i < off+len; i++ ) { // Loop through source
|
for( i = off; i < off+len; i++ ) { // Loop through source
|
||||||
|
|
||||||
sbiCrop = (byte)(source[i] & 0x7f); // Only the low seven bits
|
sbiDecode = DECODABET[ source[i]&0xFF ];
|
||||||
sbiDecode = DECODABET[ sbiCrop ]; // Special value
|
|
||||||
|
|
||||||
// White space, Equals sign, or legit Base64 character
|
// White space, Equals sign, or legit Base64 character
|
||||||
// Note the values such as -5 and -9 in the
|
// Note the values such as -5 and -9 in the
|
||||||
// DECODABETs at the top of the file.
|
// DECODABETs at the top of the file.
|
||||||
if( sbiDecode >= WHITE_SPACE_ENC ) {
|
if( sbiDecode >= WHITE_SPACE_ENC ) {
|
||||||
if( sbiDecode >= EQUALS_SIGN_ENC ) {
|
if( sbiDecode >= EQUALS_SIGN_ENC ) {
|
||||||
b4[ b4Posn++ ] = sbiCrop; // Save non-whitespace
|
b4[ b4Posn++ ] = source[i]; // Save non-whitespace
|
||||||
if( b4Posn > 3 ) { // Time to decode?
|
if( b4Posn > 3 ) { // Time to decode?
|
||||||
outBuffPosn += decode4to3( b4, 0, outBuff, outBuffPosn, options );
|
outBuffPosn += decode4to3( b4, 0, outBuff, outBuffPosn, options );
|
||||||
b4Posn = 0;
|
b4Posn = 0;
|
||||||
|
|
||||||
// If that was the equals sign, break out of 'for' loop
|
// If that was the equals sign, break out of 'for' loop
|
||||||
if( sbiCrop == EQUALS_SIGN ) {
|
if( source[i] == EQUALS_SIGN ) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -629,7 +623,7 @@ public final class Base64 {
|
|||||||
else {
|
else {
|
||||||
// There's a bad input character in the Base64 stream.
|
// There's a bad input character in the Base64 stream.
|
||||||
throw new InvalidBase64CharacterException( String.format(
|
throw new InvalidBase64CharacterException( String.format(
|
||||||
"Bad Base64 input character '%c' in array position %d", source[i], i ) );
|
"Bad Base64 input character decimal %d in array position %d", ((int)source[i])&0xFF, i ) );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user