1f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectpackage org.bouncycastle.util.encoders;
2f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/**
4f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Convert binary data to and from UrlBase64 encoding.  This is identical to
5f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Base64 encoding, except that the padding character is "." and the other
6f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * non-alphanumeric characters are "-" and "_" instead of "+" and "/".
7f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * <p>
8f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * The purpose of UrlBase64 encoding is to provide a compact encoding of binary
9f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * data that is safe for use as an URL parameter. Base64 encoding does not
10f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * produce encoded values that are safe for use in URLs, since "/" can be
11f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * interpreted as a path delimiter; "+" is the encoded form of a space; and
12f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * "=" is used to separate a name from the corresponding value in an URL
13f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * parameter.
14f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */
15f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectpublic class UrlBase64Encoder extends Base64Encoder
16f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project{
17f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public UrlBase64Encoder()
18f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    {
19f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        encodingTable[encodingTable.length - 2] = (byte) '-';
20f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        encodingTable[encodingTable.length - 1] = (byte) '_';
21f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        padding = (byte) '.';
22f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // we must re-create the decoding table with the new encoded values.
23f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        initialiseDecodingTable();
24f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
25f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project}
26