Go to the documentation of this file.00001 #ifndef CRYPTOPP_RC2_H
00002 #define CRYPTOPP_RC2_H
00003
00004
00005
00006
00007 #include "seckey.h"
00008 #include "secblock.h"
00009 #include "algparam.h"
00010
00011 NAMESPACE_BEGIN(CryptoPP)
00012
00013
00014 struct RC2_Info : public FixedBlockSize<8>, public VariableKeyLength<16, 1, 128>
00015 {
00016 CRYPTOPP_CONSTANT(DEFAULT_EFFECTIVE_KEYLENGTH = 1024)
00017 CRYPTOPP_CONSTANT(MAX_EFFECTIVE_KEYLENGTH = 1024)
00018 static const char *StaticAlgorithmName() {return "RC2";}
00019 };
00020
00021
00022 class RC2 : public RC2_Info, public BlockCipherDocumentation
00023 {
00024 class CRYPTOPP_NO_VTABLE Base : public BlockCipherImpl<RC2_Info>
00025 {
00026 public:
00027 void UncheckedSetKey(const byte *userKey, unsigned int length, const NameValuePairs ¶ms);
00028 unsigned int OptimalDataAlignment() const {return GetAlignmentOf<word16>();}
00029
00030 protected:
00031 FixedSizeSecBlock<word16, 64> K;
00032 };
00033
00034 class CRYPTOPP_NO_VTABLE Enc : public Base
00035 {
00036 public:
00037 void ProcessAndXorBlock(const byte *inBlock, const byte *xorBlock, byte *outBlock) const;
00038 };
00039
00040 class CRYPTOPP_NO_VTABLE Dec : public Base
00041 {
00042 public:
00043 void ProcessAndXorBlock(const byte *inBlock, const byte *xorBlock, byte *outBlock) const;
00044 };
00045
00046 public:
00047 class Encryption : public BlockCipherFinal<ENCRYPTION, Enc>
00048 {
00049 public:
00050 Encryption() {}
00051 Encryption(const byte *key, size_t keyLen=DEFAULT_KEYLENGTH)
00052 {SetKey(key, keyLen);}
00053 Encryption(const byte *key, size_t keyLen, int effectiveKeyLen)
00054 {SetKey(key, keyLen, MakeParameters("EffectiveKeyLength", effectiveKeyLen));}
00055 };
00056
00057 class Decryption : public BlockCipherFinal<DECRYPTION, Dec>
00058 {
00059 public:
00060 Decryption() {}
00061 Decryption(const byte *key, size_t keyLen=DEFAULT_KEYLENGTH)
00062 {SetKey(key, keyLen);}
00063 Decryption(const byte *key, size_t keyLen, int effectiveKeyLen)
00064 {SetKey(key, keyLen, MakeParameters("EffectiveKeyLength", effectiveKeyLen));}
00065 };
00066 };
00067
00068 typedef RC2::Encryption RC2Encryption;
00069 typedef RC2::Decryption RC2Decryption;
00070
00071 NAMESPACE_END
00072
00073 #endif