Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | File List | Namespace Members | Class Members | File Members | Related Pages

wvtripledes.h

Go to the documentation of this file.
00001 /* -*- Mode: C++ -*-
00002  * Worldvisions Tunnel Vision Software:
00003  *   Copyright (C) 1997-2003 Net Integration Technologies, Inc.
00004  *
00005  * TripleDES cryptography abstractions.
00006  */
00007 #ifndef __WVTRIPLEDES_H
00008 #define __WVTRIPLEDES_H
00009 
00010 #include "wvencoder.h"
00011 #include "wvencoderstream.h"
00012 #include "wvcrypto.h"
00013 
00014 #include <openssl/des.h>
00015 
00016 /**
00017  * An encoder implementing the TripleDES encryption method.
00018  * 
00019  * Supports reset().
00020  * 
00021  */
00022 class WvTripleDESEncoder : public WvCryptoEncoder
00023 {
00024 public:
00025     enum Mode {
00026         ECBEncrypt, /*!< Encrypt using ECB mode (avoid) */
00027         ECBDecrypt, /*!< Decrypt using ECB mode (avoid) */
00028         CFBEncrypt, /*!< Encrypt using CFB mode (simulates a stream) */
00029         CFBDecrypt, /*!< Decrypt using CFB mode (simulates a stream) */
00030         CBCEncrypt, /*!< Encrypt using CBC mode */
00031         CBCDecrypt  /*!< Decrypt using CBC mode */
00032     };
00033 
00034     /*
00035      * Creates a new TripleDES cipher encoder.
00036      *
00037      * "mode" is the encryption mode
00038      * "key[1-3]" are the initial keys
00039      */
00040     WvTripleDESEncoder(Mode mode, const void *key1, const void *key2, 
00041                        const void *key3);
00042 /*     virtual ~WvTripleDESEncoder(); */
00043 
00044     /*
00045      * Sets the current TripleDES keys and resets the initialization
00046      * vector to all nulls.
00047      *
00048      * "key[1-3]" are the new keys
00049      */
00050     virtual void setkey(const void *key)
00051     { 
00052         setkey(key, (unsigned char*)key+DES_KEY_SZ, 
00053                (unsigned char *)key+(DES_KEY_SZ*2)); 
00054         return; 
00055     }
00056     virtual void setkey(const void *_key1, const void *_key2, 
00057                         const void *_key3);
00058     
00059     /*
00060      * Sets the current TripleDES initialization vector.
00061      *
00062      * "iv" is the new IV must be 8 bytes
00063      */
00064     virtual void setiv(const void *iv);
00065 
00066 protected:
00067     virtual bool _encode(WvBuf &in, WvBuf &out, bool flush);
00068     virtual bool _reset(); // supported: restores most recently set
00069     // key and initialization vector
00070 
00071 private:
00072     Mode mode;
00073     des_cblock key;
00074     des_key_schedule deskey1;
00075     des_key_schedule deskey2;
00076     des_key_schedule deskey3;
00077     des_cblock ivec; // initialization vector
00078     int ivecoff; // current offset into initvec
00079 };
00080 
00081 
00082 /**
00083  * A crypto stream implementing TripleDES encryption.
00084  * 
00085  * By default, written data is encrypted using
00086  * WvTripleDESEncoder::CFBEncrypt, read data is decrypted using
00087  * WvTripleDESEncoder::CFBDecrypt.
00088  * 
00089  * @see WvTripleDESEncoder
00090  */
00091 class WvTripleDESStream : public WvEncoderStream
00092 {
00093 public:
00094     WvTripleDESStream(WvStream *_cloned, const void *_key1,
00095                       const void *_key2, const void *_key3,
00096                       WvTripleDESEncoder::Mode readmode = WvTripleDESEncoder::CFBDecrypt,
00097                       WvTripleDESEncoder::Mode writemode = WvTripleDESEncoder::CFBEncrypt);
00098     virtual ~WvTripleDESStream() { }
00099 };
00100 
00101 #endif // __WVTRIPLEDES_H

Generated on Sat Mar 13 14:56:00 2004 for WvStreams by doxygen 1.3.6-20040222