-rw-r--r-- | src/eyetil.h | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/src/eyetil.h b/src/eyetil.h index eff2c43..03b9ba8 100644 --- a/src/eyetil.h +++ b/src/eyetil.h | |||
@@ -1,41 +1,46 @@ | |||
1 | #ifndef __EYETIL_H | 1 | #ifndef __EYETIL_H |
2 | #define __EYETIL_H | 2 | #define __EYETIL_H |
3 | 3 | ||
4 | #include <vector> | 4 | #include <vector> |
5 | #include <string> | 5 | #include <string> |
6 | #include <archive.h> | 6 | #include <archive.h> |
7 | #include <archive_entry.h> | 7 | #include <archive_entry.h> |
8 | #include "openssl/md5.h" | 8 | #include "openssl/md5.h" |
9 | 9 | ||
10 | struct throwable_exit { | ||
11 | int rc; | ||
12 | throwable_exit(int rc_) : rc(rc_) { } | ||
13 | }; | ||
14 | |||
10 | class binary_t : public std::vector<unsigned char> { | 15 | class binary_t : public std::vector<unsigned char> { |
11 | public: | 16 | public: |
12 | binary_t() { } | 17 | binary_t() { } |
13 | binary_t(size_type n) : std::vector<unsigned char>(n) { } | 18 | binary_t(size_type n) : std::vector<unsigned char>(n) { } |
14 | binary_t(const std::string& h) { from_hex(h); } | 19 | binary_t(const std::string& h) { from_hex(h); } |
15 | binary_t(const void *d,size_t s) { from_data(d,s); } | 20 | binary_t(const void *d,size_t s) { from_data(d,s); } |
16 | 21 | ||
17 | binary_t& from_hex(const std::string& h); | 22 | binary_t& from_hex(const std::string& h); |
18 | binary_t& from_data(const void *d,size_t s); | 23 | binary_t& from_data(const void *d,size_t s); |
19 | binary_t& make_nonce(); | 24 | binary_t& make_nonce(); |
20 | 25 | ||
21 | std::string hex() const; | 26 | std::string hex() const; |
22 | binary_t md5() const; | 27 | binary_t md5() const; |
23 | }; | 28 | }; |
24 | 29 | ||
25 | struct md5_digester { | 30 | struct md5_digester { |
26 | MD5_CTX ctx; | 31 | MD5_CTX ctx; |
27 | md5_digester() { init(); } | 32 | md5_digester() { init(); } |
28 | 33 | ||
29 | void init(); | 34 | void init(); |
30 | void update(const void *d,size_t l); | 35 | void update(const void *d,size_t l); |
31 | binary_t final(); | 36 | binary_t final(); |
32 | 37 | ||
33 | template<typename T> | 38 | template<typename T> |
34 | void update(const T& x) { update(&x,sizeof(x)); } | 39 | void update(const T& x) { update(&x,sizeof(x)); } |
35 | 40 | ||
36 | template<typename T> | 41 | template<typename T> |
37 | struct update_iterator : public std::iterator<std::output_iterator_tag,T,void,T*,T&> { | 42 | struct update_iterator : public std::iterator<std::output_iterator_tag,T,void,T*,T&> { |
38 | md5_digester *d; | 43 | md5_digester *d; |
39 | update_iterator(md5_digester *d_) : d(d_) { } | 44 | update_iterator(md5_digester *d_) : d(d_) { } |
40 | update_iterator(const update_iterator& x) : d(x.d) { } | 45 | update_iterator(const update_iterator& x) : d(x.d) { } |
41 | 46 | ||