00001
00002
00003
00004
00005
00006
00007 #ifndef __WVCRYPTO_H
00008 #define __WVCRYPTO_H
00009
00010 #include "wvfile.h"
00011 #include "wvstreamclone.h"
00012
00013 #define WVCRYPTO_BUFSIZE 2048 // max bytes to encrypt at once
00014
00015
00019 class WvRandomStream : public WvFile
00020 {
00021 public:
00022 WvRandomStream() : WvFile("/dev/urandom", O_RDONLY) {}
00023 };
00024
00025
00030 class WvCryptoStream : public WvStreamClone
00031 {
00032 unsigned char *my_cryptbuf;
00033 size_t cryptbuf_size;
00034
00035 protected:
00036 WvStream *slave;
00037 unsigned char *cryptbuf(size_t size);
00038
00039 public:
00040 WvCryptoStream(WvStream *_slave);
00041 virtual ~WvCryptoStream();
00042 };
00043
00044
00049 class WvXORStream : public WvCryptoStream
00050 {
00051 unsigned char xorvalue;
00052 public:
00053 WvXORStream(WvStream *_slave, unsigned char _xorvalue);
00054
00055 protected:
00056 virtual size_t uread(void *buf, size_t size);
00057 virtual size_t uwrite(const void *buf, size_t size);
00058 };
00059
00060
00065 struct bf_key_st;
00066
00067 class WvBlowfishStream : public WvCryptoStream
00068 {
00069 struct bf_key_st *key;
00070 unsigned char envec[WVCRYPTO_BUFSIZE], devec[WVCRYPTO_BUFSIZE];
00071 int ennum, denum;
00072
00073 public:
00074 WvBlowfishStream(WvStream *_slave, const void *_key, size_t keysize);
00075 virtual ~WvBlowfishStream();
00076
00077 protected:
00078 virtual size_t uread(void *buf, size_t size);
00079 virtual size_t uwrite(const void *buf, size_t size);
00080 };
00081
00082
00088 struct rsa_st;
00089
00090 class WvRSAKey
00091 {
00092 char *pub, *prv;
00093
00094 public:
00095 struct rsa_st *rsa;
00096
00097 WvRSAKey(const char *_keystr, bool priv);
00098 WvRSAKey(int bits);
00099 ~WvRSAKey();
00100
00101 char *private_str() const
00102 { return prv; }
00103 char *public_str() const
00104 { return pub; }
00105 };
00106
00107
00115 class WvRSAStream : public WvCryptoStream
00116 {
00117 WvRSAKey my_key, their_key;
00118 size_t decrypt_silly;
00119
00120 protected:
00121 virtual size_t uread(void *buf, size_t size);
00122 virtual size_t uwrite(const void *buf, size_t size);
00123
00124 public:
00125 WvRSAStream(WvStream *_slave, WvRSAKey &_my_key, WvRSAKey &_their_key);
00126 virtual ~WvRSAStream();
00127 };
00128
00132 class WvMD5
00133 {
00134 unsigned char *md5_hash_value;
00135
00136 public:
00137
00141 WvMD5(const WvString &string_to_hash);
00142
00146 WvMD5(FILE *file_to_hash);
00147 ~WvMD5();
00148
00154 operator const unsigned char *() const
00155 { return md5_hash_value; }
00156
00161 operator const WvString () const
00162 { return md5_hash(); }
00163
00164 WvString md5_hash() const;
00165 };
00166
00167 #endif // __WVCRYPTO_H