1
////////////////////////////////////////////////////////////////////////////
2
// NoteCase notes manager project <http://notecase.sf.net>
4
// This code is licensed under BSD license.See "license.txt" for more details.
6
// File: Overrides large file access class to add reading/writing Blowfish encrypted data
7
////////////////////////////////////////////////////////////////////////////
12
#define min(x,y) (((x)<(y))?(x):(y))
15
File64Enc::File64Enc()
20
File64Enc::~File64Enc()
25
void File64Enc::SetPassword(const char *szPass)
27
m_crypt.Initialize((BYTE *)szPass, strlen(szPass));
30
int File64Enc::Read(char *szBuffer, int nLen)
32
int nRead = File64::Read(szBuffer, nLen);
33
m_crypt.Decode((BYTE *)szBuffer, (BYTE *)szBuffer, nRead);
34
szBuffer[nRead] = '\0';
38
int File64Enc::Write(const char *szBuffer, int nLen)
42
int nAvailSpace = ENC_BUFFER_SIZE-m_nDataSize;
45
//prepare new buffer (append new data to its end)
46
int nAdd = min(nLen, nAvailSpace);
47
memcpy(m_szBuffer+m_nDataSize, szBuffer+nPos, nAdd);
53
nAvailSpace = ENC_BUFFER_SIZE-m_nDataSize;
55
//flush data if buffer full
57
nTotalSize += WriteBuffer();
63
int File64Enc::WriteFinal()
65
//write anything left in the buffer
69
int File64Enc::WriteBuffer()
71
//encode and write buffer into the file
74
int nOrigSize = m_nDataSize;
75
int nEncSize = m_crypt.Encode((BYTE *)m_szBuffer, (BYTE *)m_szBuffer, nOrigSize);
76
File64::Write(m_szBuffer, nEncSize);