1 | #ifndef CRYPTOPP_OAEP_H |
---|
2 | #define CRYPTOPP_OAEP_H |
---|
3 | |
---|
4 | #include "cryptlib.h" |
---|
5 | #include "pubkey.h" |
---|
6 | #include "sha.h" |
---|
7 | |
---|
8 | NAMESPACE_BEGIN(CryptoPP) |
---|
9 | |
---|
10 | //! _ |
---|
11 | class CRYPTOPP_DLL OAEP_Base : public PK_EncryptionMessageEncodingMethod |
---|
12 | { |
---|
13 | public: |
---|
14 | bool ParameterSupported(const char *name) const {return strcmp(name, Name::EncodingParameters()) == 0;} |
---|
15 | size_t MaxUnpaddedLength(size_t paddedLength) const; |
---|
16 | void Pad(RandomNumberGenerator &rng, const byte *raw, size_t inputLength, byte *padded, size_t paddedLength, const NameValuePairs ¶meters) const; |
---|
17 | DecodingResult Unpad(const byte *padded, size_t paddedLength, byte *raw, const NameValuePairs ¶meters) const; |
---|
18 | |
---|
19 | protected: |
---|
20 | virtual unsigned int DigestSize() const =0; |
---|
21 | virtual HashTransformation * NewHash() const =0; |
---|
22 | virtual MaskGeneratingFunction * NewMGF() const =0; |
---|
23 | }; |
---|
24 | |
---|
25 | //! <a href="http://www.weidai.com/scan-mirror/ca.html#cem_OAEP-MGF1">EME-OAEP</a>, for use with classes derived from TF_ES |
---|
26 | template <class H, class MGF=P1363_MGF1> |
---|
27 | class OAEP : public OAEP_Base, public EncryptionStandard |
---|
28 | { |
---|
29 | public: |
---|
30 | static std::string CRYPTOPP_API StaticAlgorithmName() {return std::string("OAEP-") + MGF::StaticAlgorithmName() + "(" + H::StaticAlgorithmName() + ")";} |
---|
31 | typedef OAEP<H, MGF> EncryptionMessageEncodingMethod; |
---|
32 | |
---|
33 | protected: |
---|
34 | unsigned int DigestSize() const {return H::DIGESTSIZE;} |
---|
35 | HashTransformation * NewHash() const {return new H;} |
---|
36 | MaskGeneratingFunction * NewMGF() const {return new MGF;} |
---|
37 | }; |
---|
38 | |
---|
39 | CRYPTOPP_DLL_TEMPLATE_CLASS OAEP<SHA>; |
---|
40 | |
---|
41 | NAMESPACE_END |
---|
42 | |
---|
43 | #endif |
---|