00001
#ifndef CRYPTOPP_RC2_H
00002
#define CRYPTOPP_RC2_H
00003
00004
00005
00006
00007
#include "seckey.h"
00008
#include "secblock.h"
00009
00010 NAMESPACE_BEGIN(CryptoPP)
00011
00012 struct RC2_Info : public
FixedBlockSize<8>, public
VariableKeyLength<16, 1, 128>
00013 {
00014
enum {DEFAULT_EFFECTIVE_KEYLENGTH = 1024, MAX_EFFECTIVE_KEYLENGTH = 1024};
00015
static const char *StaticAlgorithmName() {
return "RC2";}
00016 };
00017
00018
00019 class RC2 :
public RC2_Info,
public BlockCipherDocumentation
00020 {
00021
class Base :
public BlockCipherBaseTemplate<RC2_Info>
00022 {
00023
public:
00024
void UncheckedSetKey(
CipherDir direction,
const byte *key,
unsigned int length,
unsigned int effectiveKeyLength);
00025
void SetKeyWithEffectiveKeyLength(
const byte *key,
unsigned int length,
unsigned int effectiveKeyLength);
00026
00027
protected:
00028
template <
class T>
00029
static inline void CheckedSetKey(T *obj,
CipherDir dir,
const byte *key,
unsigned int length,
const NameValuePairs ¶m)
00030 {
00031 obj->ThrowIfInvalidKeyLength(length);
00032
int effectiveKeyLength = param.
GetIntValueWithDefault(
"EffectiveKeyLength", DEFAULT_EFFECTIVE_KEYLENGTH);
00033 obj->SetKeyWithEffectiveKeyLength(key, length, effectiveKeyLength);
00034 }
00035
00036 FixedSizeSecBlock<word16, 64> K;
00037 };
00038
00039
class Enc :
public Base
00040 {
00041
public:
00042
void ProcessAndXorBlock(
const byte *inBlock,
const byte *xorBlock, byte *outBlock)
const;
00043 };
00044
00045
class Dec :
public Base
00046 {
00047
public:
00048
void ProcessAndXorBlock(
const byte *inBlock,
const byte *xorBlock, byte *outBlock)
const;
00049 };
00050
00051
public:
00052
class Encryption :
public BlockCipherTemplate<ENCRYPTION, Enc>
00053 {
00054
public:
00055 Encryption() {}
00056 Encryption(
const byte *key,
unsigned int keyLen=DEFAULT_KEYLENGTH,
unsigned int effectiveLen=1024)
00057 {SetKeyWithEffectiveKeyLength(key, keyLen, effectiveLen);}
00058 };
00059
00060
class Decryption :
public BlockCipherTemplate<DECRYPTION, Dec>
00061 {
00062
public:
00063 Decryption() {}
00064 Decryption(
const byte *key,
unsigned int keyLen=DEFAULT_KEYLENGTH,
unsigned int effectiveLen=1024)
00065 {SetKeyWithEffectiveKeyLength(key, keyLen, effectiveLen);}
00066 };
00067 };
00068
00069
typedef RC2::Encryption RC2Encryption;
00070
typedef RC2::Decryption RC2Decryption;
00071
00072 NAMESPACE_END
00073
00074
#endif