Main Page   Class Hierarchy   Compound List   File List   Compound Members   File Members  

wvcrypto.h

Go to the documentation of this file.
00001 /*
00002  * Worldvisions Tunnel Vision Software:
00003  *   Copyright (C) 1997-2002 Net Integration Technologies, Inc.
00004  * 
00005  * Streams with built-in cryptography on read/write.
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

Generated on Sun Aug 25 02:29:30 2002 for WvStreams by doxygen1.2.14 written by Dimitri van Heesch, © 1997-2002