void CBase64::Encode(const unsigned char* pBuffer, unsigned long nBufLen) { SetDecodeBuffer(pBuffer, nBufLen); AllocEncode(nBufLen * 2); TempBucket Raw; unsigned long nIndex = 0; while((nIndex + 3) <= nBufLen) { Raw.Clear(); ::CopyMemory(&Raw, m_pDBuffer + nIndex, 3); Raw.nSize = 3; _EncodeToBuffer(Raw, m_pEBuffer + m_nEDataLen); nIndex += 3; m_nEDataLen += 4; } if(nBufLen > nIndex) { Raw.Clear(); Raw.nSize = (unsigned char) (nBufLen - nIndex); ::CopyMemory(&Raw, m_pDBuffer + nIndex, nBufLen - nIndex); _EncodeToBuffer(Raw, m_pEBuffer + m_nEDataLen); m_nEDataLen += 4; } }
void CBase64::Encode(const PBYTE pBuffer, DWORD nBufLen) { SetDecodeBuffer(pBuffer, nBufLen); AllocEncode(nBufLen * 2); TempBucket Raw; DWORD nIndex = 0; while((nIndex + 3) <= nBufLen) { Raw.Clear(); memcpy(&Raw, m_pDBuffer + nIndex, 3); Raw.nSize = 3; _EncodeToBuffer(Raw, m_pEBuffer + m_nEDataLen); nIndex += 3; m_nEDataLen += 4; } if(nBufLen > nIndex) { Raw.Clear(); Raw.nSize = (BYTE) (nBufLen - nIndex); memcpy(&Raw, m_pDBuffer + nIndex, nBufLen - nIndex); _EncodeToBuffer(Raw, m_pEBuffer + m_nEDataLen); m_nEDataLen += 4; } }
void CBase64::Decode(const PBYTE pBuffer, DWORD dwBufLen) { if(!CBase64::m_Init) _Init(); SetEncodeBuffer(pBuffer, dwBufLen); AllocDecode(dwBufLen); TempBucket Raw; DWORD nIndex = 0; while((nIndex + 4) <= m_nEDataLen) { Raw.Clear(); Raw.nData[0] = CBase64::m_DecodeTable[m_pEBuffer[nIndex]]; Raw.nData[1] = CBase64::m_DecodeTable[m_pEBuffer[nIndex + 1]]; Raw.nData[2] = CBase64::m_DecodeTable[m_pEBuffer[nIndex + 2]]; Raw.nData[3] = CBase64::m_DecodeTable[m_pEBuffer[nIndex + 3]]; if(Raw.nData[2] == 255) Raw.nData[2] = 0; if(Raw.nData[3] == 255) Raw.nData[3] = 0; Raw.nSize = 4; _DecodeToBuffer(Raw, m_pDBuffer + m_nDDataLen); nIndex += 4; m_nDDataLen += 3; } // If nIndex < m_nEDataLen, then we got a decode message without padding. // We may want to throw some kind of warning here, but we are still required // to handle the decoding as if it was properly padded. if(nIndex < m_nEDataLen) { Raw.Clear(); for(DWORD i = nIndex; i < m_nEDataLen; i++) { Raw.nData[i - nIndex] = CBase64::m_DecodeTable[m_pEBuffer[i]]; Raw.nSize++; if(Raw.nData[i - nIndex] == 255) Raw.nData[i - nIndex] = 0; } _DecodeToBuffer(Raw, m_pDBuffer + m_nDDataLen); m_nDDataLen += (m_nEDataLen - nIndex); } }
void CBase64::Decode(const PBYTE pBuffer, DWORD dwBufLen) { if (!CBase64::m_Init) _Init(); SetEncodeBuffer(pBuffer, dwBufLen); AllocDecode(dwBufLen); TempBucket Raw; DWORD nIndex = 0; while((nIndex + 4) <= m_nEDataLen) { Raw.Clear(); Raw.nData[0] = CBase64::m_DecodeTable[m_pEBuffer[nIndex]]; Raw.nData[1] = CBase64::m_DecodeTable[m_pEBuffer[nIndex + 1]]; Raw.nData[2] = CBase64::m_DecodeTable[m_pEBuffer[nIndex + 2]]; Raw.nData[3] = CBase64::m_DecodeTable[m_pEBuffer[nIndex + 3]]; if (Raw.nData[2] == 255) Raw.nData[2] = 0; if (Raw.nData[3] == 255) Raw.nData[3] = 0; Raw.nSize = 4; _DecodeToBuffer(Raw, m_pDBuffer + m_nDDataLen); nIndex += 4; m_nDDataLen += 3; } if (nIndex < m_nEDataLen) { Raw.Clear(); for (DWORD i=nIndex; i<m_nEDataLen; i++) { Raw.nData[i - nIndex] = CBase64::m_DecodeTable[m_pEBuffer[i]]; Raw.nSize++; if(Raw.nData[i - nIndex] == 255) Raw.nData[i - nIndex] = 0; } _DecodeToBuffer(Raw, m_pDBuffer + m_nDDataLen); m_nDDataLen += (m_nEDataLen - nIndex); } }