Leaked source code of windows server 2003
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
/*--------------------------------------------------------------------------*
* * Microsoft Windows * Copyright (C) Microsoft Corporation, 1999 - 1999 * * File: base64.h * * Contents: Implements encoding / decoding table for base64 format * * History: 17-Dec-99 audriusz Created * *--------------------------------------------------------------------------*/
/*+-------------------------------------------------------------------------*
* class base64_table * * PURPOSE: Class maintains Base64 conversion templates. It exposes static methods * to both encode and decode Base64 data * * USAGE: call static methods to encode/decode one piece of data (24 bites or less) * *+-------------------------------------------------------------------------*/ class base64_table { protected: static BYTE _six2pr64[64]; static BYTE _pr2six[256]; public: base64_table(); int decode4(BYTE * src, int nChars, BYTE * dest); BYTE map2six(BYTE bt); // static functions used for zero terminated LPOLESTR format data only
static void encode(const BYTE * &src, DWORD &cbInput, LPOLESTR &dest); static bool decode(LPCOLESTR &src, BYTE * &dest); };
/*+-------------------------------------------------------------------------*
* * METHOD: base64_table::map2six * * PURPOSE: maps symbols to 6bit value if smb is valid, 0xff else * *+-------------------------------------------------------------------------*/ inline BYTE base64_table::map2six(BYTE bt) { return (bt > 255 ? 0xff : _pr2six[bt]); }
/*+-------------------------------------------------------------------------*
* * METHOD: base64_table::decode4 * * PURPOSE: glues 3 bytes from stored 6bit values * * NOTE: gluing is done in place - data pointed by src is destroyed * *+-------------------------------------------------------------------------*/ inline int base64_table::decode4(BYTE * src, int nChars, BYTE * dest) { // glue to form 3 full bytes
src[0] <<= 2; src[0] |= (src[1] >> 4); src[1] <<= 4; src[1] |= (src[2] >> 2); src[2] <<= 6; src[2] |= (src[3] );
// now store as many bytes as have complete set of bites;
// int nFull = nChars*6/8; // it actually boils to 0 or nChars - 1, whichever is bigger
for (int i=0; i< nChars-1; i++) *dest++ = src[i];
return nChars ? nChars - 1 : 0; }
|