Crypto++
files.h
1 #ifndef CRYPTOPP_FILES_H
2 #define CRYPTOPP_FILES_H
3 
4 #include "cryptlib.h"
5 #include "filters.h"
6 #include "argnames.h"
7 
8 #include <iostream>
9 #include <fstream>
10 
11 NAMESPACE_BEGIN(CryptoPP)
12 
13 //! file-based implementation of Store interface
14 class CRYPTOPP_DLL FileStore : public Store, private FilterPutSpaceHelper, public NotCopyable
15 {
16 public:
17  class Err : public Exception
18  {
19  public:
20  Err(const std::string &s) : Exception(IO_ERROR, s) {}
21  };
22  class OpenErr : public Err {public: OpenErr(const std::string &filename) : Err("FileStore: error opening file for reading: " + filename) {}};
23  class ReadErr : public Err {public: ReadErr() : Err("FileStore: error reading file") {}};
24 
25  FileStore() : m_stream(NULL) {}
26  FileStore(std::istream &in)
27  {StoreInitialize(MakeParameters(Name::InputStreamPointer(), &in));}
28  FileStore(const char *filename)
29  {StoreInitialize(MakeParameters(Name::InputFileName(), filename));}
30 #if defined(CRYPTOPP_UNIX_AVAILABLE) || _MSC_VER >= 1400
31  //! specify file with Unicode name. On non-Windows OS, this function assumes that setlocale() has been called.
32  FileStore(const wchar_t *filename)
33  {StoreInitialize(MakeParameters(Name::InputFileNameWide(), filename));}
34 #endif
35 
36  std::istream* GetStream() {return m_stream;}
37 
38  lword MaxRetrievable() const;
39  size_t TransferTo2(BufferedTransformation &target, lword &transferBytes, const std::string &channel=DEFAULT_CHANNEL, bool blocking=true);
40  size_t CopyRangeTo2(BufferedTransformation &target, lword &begin, lword end=LWORD_MAX, const std::string &channel=DEFAULT_CHANNEL, bool blocking=true) const;
41  lword Skip(lword skipMax=ULONG_MAX);
42 
43 private:
44  void StoreInitialize(const NameValuePairs &parameters);
45 
47  std::istream *m_stream;
48  byte *m_space;
49  size_t m_len;
50  bool m_waiting;
51 };
52 
53 //! file-based implementation of Source interface
54 class CRYPTOPP_DLL FileSource : public SourceTemplate<FileStore>
55 {
56 public:
57  typedef FileStore::Err Err;
60 
61  FileSource(BufferedTransformation *attachment = NULL)
62  : SourceTemplate<FileStore>(attachment) {}
63  FileSource(std::istream &in, bool pumpAll, BufferedTransformation *attachment = NULL)
64  : SourceTemplate<FileStore>(attachment) {SourceInitialize(pumpAll, MakeParameters(Name::InputStreamPointer(), &in));}
65  FileSource(const char *filename, bool pumpAll, BufferedTransformation *attachment = NULL, bool binary=true)
66  : SourceTemplate<FileStore>(attachment) {SourceInitialize(pumpAll, MakeParameters(Name::InputFileName(), filename)(Name::InputBinaryMode(), binary));}
67 #if defined(CRYPTOPP_UNIX_AVAILABLE) || _MSC_VER >= 1400
68  //! specify file with Unicode name. On non-Windows OS, this function assumes that setlocale() has been called.
69  FileSource(const wchar_t *filename, bool pumpAll, BufferedTransformation *attachment = NULL, bool binary=true)
70  : SourceTemplate<FileStore>(attachment) {SourceInitialize(pumpAll, MakeParameters(Name::InputFileNameWide(), filename)(Name::InputBinaryMode(), binary));}
71 #endif
72 
73  std::istream* GetStream() {return m_store.GetStream();}
74 };
75 
76 //! file-based implementation of Sink interface
77 class CRYPTOPP_DLL FileSink : public Sink, public NotCopyable
78 {
79 public:
80  class Err : public Exception
81  {
82  public:
83  Err(const std::string &s) : Exception(IO_ERROR, s) {}
84  };
85  class OpenErr : public Err {public: OpenErr(const std::string &filename) : Err("FileSink: error opening file for writing: " + filename) {}};
86  class WriteErr : public Err {public: WriteErr() : Err("FileSink: error writing file") {}};
87 
88  FileSink() : m_stream(NULL) {}
89  FileSink(std::ostream &out)
90  {IsolatedInitialize(MakeParameters(Name::OutputStreamPointer(), &out));}
91  FileSink(const char *filename, bool binary=true)
92  {IsolatedInitialize(MakeParameters(Name::OutputFileName(), filename)(Name::OutputBinaryMode(), binary));}
93 #if defined(CRYPTOPP_UNIX_AVAILABLE) || _MSC_VER >= 1400
94  //! specify file with Unicode name. On non-Windows OS, this function assumes that setlocale() has been called.
95  FileSink(const wchar_t *filename, bool binary=true)
96  {IsolatedInitialize(MakeParameters(Name::OutputFileNameWide(), filename)(Name::OutputBinaryMode(), binary));}
97 #endif
98 
99  std::ostream* GetStream() {return m_stream;}
100 
101  void IsolatedInitialize(const NameValuePairs &parameters);
102  size_t Put2(const byte *inString, size_t length, int messageEnd, bool blocking);
103  bool IsolatedFlush(bool hardFlush, bool blocking);
104 
105 private:
107  std::ostream *m_stream;
108 };
109 
110 NAMESPACE_END
111 
112 #endif
base class for all exceptions thrown by Crypto++
Definition: cryptlib.h:109
const char * InputFileNameWide()
const wchar_t *
Definition: argnames.h:53
virtual size_t Put2(const byte *inString, size_t length, int messageEnd, bool blocking)=0
input multiple bytes for blocking or non-blocking processing
file-based implementation of Source interface
Definition: files.h:54
const char * OutputStreamPointer()
std::ostream *
Definition: argnames.h:58
A BufferedTransformation that only contains pre-existing data as "output".
Definition: simple.h:167
const char * InputFileName()
const char *
Definition: argnames.h:52
interface for buffered transformations
Definition: cryptlib.h:770
const char * InputStreamPointer()
std::istream *
Definition: argnames.h:54
const char * OutputBinaryMode()
bool
Definition: argnames.h:59
Turn a Store into a Source.
Definition: filters.h:755
const std::string DEFAULT_CHANNEL
the default channel for BufferedTransformation, equal to the empty string
const char * OutputFileName()
const char *
Definition: argnames.h:56
file-based implementation of Store interface
Definition: files.h:14
A BufferedTransformation that doesn't produce any retrievable output.
Definition: simple.h:189
const char * InputBinaryMode()
bool
Definition: argnames.h:55
file-based implementation of Sink interface
Definition: files.h:77
const char * OutputFileNameWide()
const wchar_t *
Definition: argnames.h:57
interface for retrieving values given their names
Definition: cryptlib.h:224