00001 #ifndef CRYPTOPP_OAEP_H
00002 #define CRYPTOPP_OAEP_H
00003
00004 #include "cryptlib.h"
00005 #include "pubkey.h"
00006 #include "sha.h"
00007
00008 NAMESPACE_BEGIN(CryptoPP)
00009
00010
00011 class CRYPTOPP_DLL OAEP_Base : public PK_EncryptionMessageEncodingMethod
00012 {
00013 public:
00014 bool ParameterSupported(const char *name) const {return strcmp(name, Name::EncodingParameters()) == 0;}
00015 size_t MaxUnpaddedLength(size_t paddedLength) const;
00016 void Pad(RandomNumberGenerator &rng, const byte *raw, size_t inputLength, byte *padded, size_t paddedLength, const NameValuePairs ¶meters) const;
00017 DecodingResult Unpad(const byte *padded, size_t paddedLength, byte *raw, const NameValuePairs ¶meters) const;
00018
00019 protected:
00020 virtual unsigned int DigestSize() const =0;
00021 virtual HashTransformation * NewHash() const =0;
00022 virtual MaskGeneratingFunction * NewMGF() const =0;
00023 };
00024
00025
00026 template <class H, class MGF=P1363_MGF1>
00027 class OAEP : public OAEP_Base, public EncryptionStandard
00028 {
00029 public:
00030 static std::string CRYPTOPP_API StaticAlgorithmName() {return std::string("OAEP-") + MGF::StaticAlgorithmName() + "(" + H::StaticAlgorithmName() + ")";}
00031 typedef OAEP<H, MGF> EncryptionMessageEncodingMethod;
00032
00033 protected:
00034 unsigned int DigestSize() const {return H::DIGESTSIZE;}
00035 HashTransformation * NewHash() const {return new H;}
00036 MaskGeneratingFunction * NewMGF() const {return new MGF;}
00037 };
00038
00039 CRYPTOPP_DLL_TEMPLATE_CLASS OAEP<SHA>;
00040
00041 NAMESPACE_END
00042
00043 #endif