llxorcipher.h

Go to the documentation of this file.
00001 
00031 #ifndef LLXORCIPHER_H
00032 #define LLXORCIPHER_H
00033 
00034 #include "llcipher.h"
00035 
00036 //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
00037 // Class LLXORCipher
00038 //
00039 // Implementation of LLCipher which encrypts using a XOR pad.
00040 //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
00041 
00042 class LLXORCipher : public LLCipher
00043 {
00044 public:
00045         LLXORCipher(const U8* pad, U32 pad_len);
00046         LLXORCipher(const LLXORCipher& cipher);
00047         virtual ~LLXORCipher();
00048         LLXORCipher& operator=(const LLXORCipher& cipher);
00049 
00050         // Cipher functions
00051         /*virtual*/ U32 encrypt(const U8* src, U32 src_len, U8* dst, U32 dst_len);
00052         /*virtual*/ U32 decrypt(const U8* src, U32 src_len, U8* dst, U32 dst_len);
00053         /*virtual*/ U32 requiredEncryptionSpace(U32 src_len) const;
00054 
00055         // special syntactic-sugar since xor can be performed in place.
00056         BOOL encrypt(U8* buf, U32 len) { return encrypt((const U8*)buf, len, buf, len); }
00057         BOOL decrypt(U8* buf, U32 len) { return decrypt((const U8*)buf, len, buf, len); }
00058 
00059 #ifdef _DEBUG
00060         // This function runs tests to make sure the crc is
00061         // working. Returns TRUE if it is.
00062         static BOOL testHarness();
00063 #endif
00064 
00065 protected:
00066         void init(const U8* pad, U32 pad_len);
00067         U8* mPad;
00068         U8* mHead;
00069         U32 mPadLen;
00070 };
00071 
00072 #endif

Generated on Thu Jul 1 06:09:49 2010 for Second Life Viewer by  doxygen 1.4.7