WvStreams
wvrsa.h
00001 /* -*- Mode: C++ -*-
00002  * Worldvisions Tunnel Vision Software:
00003  *   Copyright (C) 1997-2002 Net Integration Technologies, Inc.
00004  *
00005  * RSA cryptography abstractions.
00006  */
00007 #ifndef __WVRSA_H
00008 #define __WVRSA_H
00009 
00010 #include "wverror.h"
00011 #include "wvencoder.h"
00012 #include "wvencoderstream.h"
00013 #include "wvlog.h"
00014 
00015 struct rsa_st;
00016 
00026 class WvRSAKey
00027 {
00028 public:
00036     enum DumpMode { RsaPEM, RsaPubPEM, RsaHex, RsaPubHex };
00037 
00038     struct rsa_st *rsa;
00039     
00040     WvRSAKey();
00041     WvRSAKey(const WvRSAKey &k);
00042     WvRSAKey(WvStringParm keystr, bool priv);
00043     WvRSAKey(struct rsa_st *_rsa, bool priv); // note: takes ownership
00044 
00048     WvRSAKey(int bits);
00049     
00050     virtual ~WvRSAKey();
00051     
00052     virtual bool isok() const;
00053     
00057     virtual WvString encode(const DumpMode mode) const;
00058     virtual void encode(const DumpMode mode, WvBuf &buf) const;
00059 
00064     virtual void decode(const DumpMode mode, WvStringParm encoded);
00065     virtual void decode(const DumpMode mode, WvBuf &encoded);
00066 
00067 private:
00068     bool priv;
00069     mutable WvLog debug;
00070 };
00071 
00072 
00084 class WvRSAEncoder : public WvEncoder
00085 {
00086 public:
00087     enum Mode {
00088         Encrypt,     
00089         Decrypt,     
00090         SignEncrypt, 
00091         SignDecrypt  
00092     };
00093 
00101     WvRSAEncoder(Mode mode, const WvRSAKey &key);
00102     virtual ~WvRSAEncoder();
00103 
00104 protected:
00105     virtual bool _encode(WvBuf &in, WvBuf &out, bool flush);
00106     virtual bool _reset(); // supported
00107 
00108 private:
00109     Mode mode;
00110     WvRSAKey key;
00111     size_t rsasize;
00112 };
00113 
00114 
00123 class WvRSAStream : public WvEncoderStream
00124 {
00125 public:
00126     WvRSAStream(WvStream *_cloned,
00127         const WvRSAKey &_my_key, const WvRSAKey &_their_key, 
00128         WvRSAEncoder::Mode readmode = WvRSAEncoder::Decrypt,
00129         WvRSAEncoder::Mode writemode = WvRSAEncoder::Encrypt);
00130     virtual ~WvRSAStream() { }
00131 };
00132 
00133 
00134 #endif // __WVRSA_H