omadrm/drmengine/utils/src/Base64.cpp
changeset 23 493788a4a8a4
parent 0 95b198f216e5
equal deleted inserted replaced
5:79d62d1d7957 23:493788a4a8a4
    17 
    17 
    18 
    18 
    19 
    19 
    20 // INCLUDE FILES
    20 // INCLUDE FILES
    21 #include <e32std.h>
    21 #include <e32std.h>
    22 #include "base64.h"
    22 #include "Base64.h"
    23 
    23 
    24 // LOCAL CONSTANTS AND MACROS
    24 // LOCAL CONSTANTS AND MACROS
    25 LOCAL_C const TUint8* const KBase64Chars = 
    25 LOCAL_C const TUint8* const KBase64Chars =
    26     _S8("ABCDEFGHIJKLMNOPQRSTUVWXYZ"
    26     _S8("ABCDEFGHIJKLMNOPQRSTUVWXYZ"
    27     "abcdefghijklmnopqrstuvwxyz"
    27     "abcdefghijklmnopqrstuvwxyz"
    28     "0123456789+/");
    28     "0123456789+/");
    29 
    29 
    30 // LOCAL FUNCTION PROTOTYPES
    30 // LOCAL FUNCTION PROTOTYPES
    70     TInt i = 0;
    70     TInt i = 0;
    71     TInt j = 0;
    71     TInt j = 0;
    72     TUint8 charArray3[3];
    72     TUint8 charArray3[3];
    73     TUint8 charArray4[4];
    73     TUint8 charArray4[4];
    74     TInt l = 0;
    74     TInt l = 0;
    75     
    75 
    76     ret = HBufC8::NewL((aInput.Length() * 4 + 1) / 3);
    76     ret = HBufC8::NewL((aInput.Length() * 4 + 1) / 3);
    77     TPtr8 des = ret->Des();
    77     TPtr8 des = ret->Des();
    78     while (l < aInput.Length())
    78     while (l < aInput.Length())
    79         {
    79         {
    80         charArray3[i++] = aInput[l];
    80         charArray3[i++] = aInput[l];
    85             charArray4[1] = static_cast<TUint8>(
    85             charArray4[1] = static_cast<TUint8>(
    86                 ((charArray3[0] & 0x03) << 4) + ((charArray3[1] & 0xf0) >> 4));
    86                 ((charArray3[0] & 0x03) << 4) + ((charArray3[1] & 0xf0) >> 4));
    87             charArray4[2] = static_cast<TUint8>(
    87             charArray4[2] = static_cast<TUint8>(
    88                 ((charArray3[1] & 0x0f) << 2) + ((charArray3[2] & 0xc0) >> 6));
    88                 ((charArray3[1] & 0x0f) << 2) + ((charArray3[2] & 0xc0) >> 6));
    89             charArray4[3] = static_cast<TUint8>(charArray3[2] & 0x3f);
    89             charArray4[3] = static_cast<TUint8>(charArray3[2] & 0x3f);
    90         
    90 
    91             for (i = 0; i <4; i++)
    91             for (i = 0; i <4; i++)
    92                 {
    92                 {
    93                 des.Append(KBase64Chars[charArray4[i]]);
    93                 des.Append(KBase64Chars[charArray4[i]]);
    94                 }
    94                 }
    95             i = 0;
    95             i = 0;
    96             }
    96             }
    97         }
    97         }
    98     
    98 
    99     if (i != 0)
    99     if (i != 0)
   100         {
   100         {
   101         for (j = i; j < 3; j++)
   101         for (j = i; j < 3; j++)
   102             {
   102             {
   103             charArray3[j] = '\0';
   103             charArray3[j] = '\0';
   104             }
   104             }
   105         
   105 
   106         charArray4[0] = static_cast<TUint8>((charArray3[0] & 0xfc) >> 2);
   106         charArray4[0] = static_cast<TUint8>((charArray3[0] & 0xfc) >> 2);
   107         charArray4[1] = static_cast<TUint8>(
   107         charArray4[1] = static_cast<TUint8>(
   108             ((charArray3[0] & 0x03) << 4) +((charArray3[1] & 0xf0) >> 4));
   108             ((charArray3[0] & 0x03) << 4) +((charArray3[1] & 0xf0) >> 4));
   109         charArray4[2] = static_cast<TUint8>(
   109         charArray4[2] = static_cast<TUint8>(
   110             ((charArray3[1] & 0x0f) << 2) +((charArray3[2] & 0xc0) >> 6));
   110             ((charArray3[1] & 0x0f) << 2) +((charArray3[2] & 0xc0) >> 6));
   111         charArray4[3] = static_cast<TUint8>(charArray3[2] & 0x3f);
   111         charArray4[3] = static_cast<TUint8>(charArray3[2] & 0x3f);
   112         
   112 
   113         for (j = 0; j < i + 1; j++)
   113         for (j = 0; j < i + 1; j++)
   114             {
   114             {
   115             des.Append(KBase64Chars[charArray4[j]]);
   115             des.Append(KBase64Chars[charArray4[j]]);
   116             }
   116             }
   117         
   117 
   118         while ((i++ < 3))
   118         while ((i++ < 3))
   119             {
   119             {
   120             des.Append('=');
   120             des.Append('=');
   121             }
   121             }
   122         }
   122         }
   123     
   123 
   124     return ret;
   124     return ret;
   125     }
   125     }
   126 
   126 
   127 // -----------------------------------------------------------------------------
   127 // -----------------------------------------------------------------------------
   128 // ?function_name implements...
   128 // ?function_name implements...
   139     TInt i = 0;
   139     TInt i = 0;
   140     TInt j = 0;
   140     TInt j = 0;
   141     TInt in = 0;
   141     TInt in = 0;
   142     TUint8 charArray4[4], charArray3[3];
   142     TUint8 charArray4[4], charArray3[3];
   143     HBufC8* ret;
   143     HBufC8* ret;
   144     
   144 
   145     ret = HBufC8::NewL((aInput.Length() * 3 + 1) / 4);
   145     ret = HBufC8::NewL((aInput.Length() * 3 + 1) / 4);
   146     TPtr8 des = ret->Des();
   146     TPtr8 des = ret->Des();
   147     while (len-- && aInput[in] != '=')
   147     while (len-- && aInput[in] != '=')
   148         {
   148         {
   149         if (FindBase64Char(aInput[in]) < 64)
   149         if (FindBase64Char(aInput[in]) < 64)
   152             }
   152             }
   153         else
   153         else
   154             {
   154             {
   155             in++;
   155             in++;
   156             }
   156             }
   157             
   157 
   158         if (i == 4)
   158         if (i == 4)
   159             {
   159             {
   160             for (i = 0; i < 4; i++)
   160             for (i = 0; i < 4; i++)
   161                 {
   161                 {
   162                 charArray4[i] = FindBase64Char(charArray4[i]);
   162                 charArray4[i] = FindBase64Char(charArray4[i]);
   163                 }
   163                 }
   164             
   164 
   165             charArray3[0] = static_cast<TUint8>(
   165             charArray3[0] = static_cast<TUint8>(
   166                 (charArray4[0] << 2) + ((charArray4[1] & 0x30) >> 4));
   166                 (charArray4[0] << 2) + ((charArray4[1] & 0x30) >> 4));
   167             charArray3[1] = static_cast<TUint8>(
   167             charArray3[1] = static_cast<TUint8>(
   168                 ((charArray4[1] & 0xf) << 4) + ((charArray4[2] & 0x3c) >> 2));
   168                 ((charArray4[1] & 0xf) << 4) + ((charArray4[2] & 0x3c) >> 2));
   169             charArray3[2] = static_cast<TUint8>(
   169             charArray3[2] = static_cast<TUint8>(
   170             ((charArray4[2] & 0x3) << 6) + charArray4[3]);
   170             ((charArray4[2] & 0x3) << 6) + charArray4[3]);
   171             
   171 
   172             for (i = 0; i < 3; i++)
   172             for (i = 0; i < 3; i++)
   173                 {
   173                 {
   174                 des.Append(charArray3[i]);
   174                 des.Append(charArray3[i]);
   175                 }
   175                 }
   176             i = 0;
   176             i = 0;
   177             }
   177             }
   178         }
   178         }
   179     
   179 
   180     if (i != 0)
   180     if (i != 0)
   181         {
   181         {
   182         for (j = i; j < 4; j++)
   182         for (j = i; j < 4; j++)
   183             {
   183             {
   184             charArray4[j] = 0;
   184             charArray4[j] = 0;
   185             }
   185             }
   186     
   186 
   187         for (j = 0; j < 4; j++)
   187         for (j = 0; j < 4; j++)
   188             {
   188             {
   189             charArray4[j] = FindBase64Char(charArray4[j]);
   189             charArray4[j] = FindBase64Char(charArray4[j]);
   190             }
   190             }
   191     
   191 
   192         charArray3[0] = static_cast<TUint8>(
   192         charArray3[0] = static_cast<TUint8>(
   193             (charArray4[0] << 2) + ((charArray4[1] & 0x30) >> 4));
   193             (charArray4[0] << 2) + ((charArray4[1] & 0x30) >> 4));
   194         charArray3[1] = static_cast<TUint8>(
   194         charArray3[1] = static_cast<TUint8>(
   195             ((charArray4[1] & 0xf) << 4) + ((charArray4[2] & 0x3c) >> 2));
   195             ((charArray4[1] & 0xf) << 4) + ((charArray4[2] & 0x3c) >> 2));
   196         charArray3[2] = static_cast<TUint8>(
   196         charArray3[2] = static_cast<TUint8>(
   197             ((charArray4[2] & 0x3) << 6) + charArray4[3]);
   197             ((charArray4[2] & 0x3) << 6) + charArray4[3]);
   198     
   198 
   199         for (j = 0; j < i - 1; j++)
   199         for (j = 0; j < i - 1; j++)
   200             {
   200             {
   201             des.Append(charArray3[j]);
   201             des.Append(charArray3[j]);
   202             }
   202             }
   203         }
   203         }
   204     
   204 
   205     return ret;
   205     return ret;
   206     }
   206     }
   207 
   207 
   208 //  End of File  
   208 //  End of File