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

diamond.h

Go to the documentation of this file.
00001 #ifndef CRYPTOPP_DIAMOND_H
00002 #define CRYPTOPP_DIAMOND_H
00003 
00004 /** \file
00005 */
00006 
00007 #include "seckey.h"
00008 #include "secblock.h"
00009 
00010 NAMESPACE_BEGIN(CryptoPP)
00011 
00012 struct Diamond2_Info : public FixedBlockSize<16>, public VariableKeyLength<16, 1, 256>, public VariableRounds<10>
00013 {
00014         static const char *StaticAlgorithmName() {return "Diamond2";}
00015 };
00016 
00017 /// <a href="http://www.weidai.com/scan-mirror/cs.html#Diamond2">Diamond2</a>
00018 class Diamond2 : public Diamond2_Info, public BlockCipherDocumentation
00019 {
00020         class Base : public BlockCipherBaseTemplate<Diamond2_Info>
00021         {
00022         public:
00023                 void UncheckedSetKey(CipherDir direction, const byte *userKey, unsigned int length, unsigned int rounds);
00024 
00025         protected:
00026                 enum {ROUNDSIZE=4096};
00027                 inline void substitute(int round, byte *x, const byte *y) const;
00028 
00029                 int numrounds;
00030                 SecByteBlock s;         // Substitution boxes
00031 
00032                 static inline void permute(byte *);
00033                 static inline void ipermute(byte *);
00034 #ifdef DIAMOND_USE_PERMTABLE
00035                 static const word32 permtable[9][256];
00036                 static const word32 ipermtable[9][256];
00037 #endif
00038         };
00039 
00040         class Enc : public Base
00041         {
00042         public:
00043                 void ProcessAndXorBlock(const byte *inBlock, const byte *xorBlock, byte *outBlock) const;
00044         };
00045 
00046         class Dec : public Base
00047         {
00048         public:
00049                 void ProcessAndXorBlock(const byte *inBlock, const byte *xorBlock, byte *outBlock) const;
00050         };
00051 
00052 public:
00053         typedef BlockCipherTemplate<ENCRYPTION, Enc> Encryption;
00054         typedef BlockCipherTemplate<DECRYPTION, Dec> Decryption;
00055 };
00056 
00057 typedef Diamond2::Encryption Diamond2Encryption;
00058 typedef Diamond2::Decryption Diamond2Decryption;
00059 
00060 struct Diamond2Lite_Info : public FixedBlockSize<8>, public VariableKeyLength<16, 1, 256>, public VariableRounds<8>
00061 {
00062         static const char *StaticAlgorithmName() {return "Diamond2Lite";}
00063 };
00064 
00065 /// <a href="http://www.weidai.com/scan-mirror/cs.html#Diamond2">Diamond2Lite</a>
00066 class Diamond2Lite : public Diamond2Lite_Info, public BlockCipherDocumentation
00067 {
00068         class Base : public BlockCipherBaseTemplate<Diamond2Lite_Info>
00069         {
00070         public:
00071                 void UncheckedSetKey(CipherDir direction, const byte *userKey, unsigned int length, unsigned int rounds);
00072 
00073         protected:
00074                 enum {ROUNDSIZE=2048};
00075                 inline void substitute(int round, byte *x, const byte *y) const;
00076                 int numrounds;
00077                 SecByteBlock s;         // Substitution boxes
00078 
00079                 static inline void permute(byte *);
00080                 static inline void ipermute(byte *);
00081         #ifdef DIAMOND_USE_PERMTABLE
00082                 static const word32 permtable[8][256];
00083                 static const word32 ipermtable[8][256];
00084         #endif
00085         };
00086 
00087         class Enc : public Base
00088         {
00089         public:
00090                 void ProcessAndXorBlock(const byte *inBlock, const byte *xorBlock, byte *outBlock) const;
00091         };
00092 
00093         class Dec : public Base
00094         {
00095         public:
00096                 void ProcessAndXorBlock(const byte *inBlock, const byte *xorBlock, byte *outBlock) const;
00097         };
00098 
00099 public:
00100         typedef BlockCipherTemplate<ENCRYPTION, Enc> Encryption;
00101         typedef BlockCipherTemplate<DECRYPTION, Dec> Decryption;
00102 };
00103 
00104 typedef Diamond2Lite::Encryption Diamond2LiteEncryption;
00105 typedef Diamond2Lite::Decryption Diamond2LiteDecryption;
00106 
00107 NAMESPACE_END
00108 
00109 #endif

Generated on Mon Apr 19 18:12:29 2004 for Crypto++ by doxygen 1.3.6-20040222