Line | Count | Source (jump to first uncovered line) |
1 | | // oaep.h - originally written and placed in the public domain by Wei Dai |
2 | | |
3 | | /// \file oaep.h |
4 | | /// \brief Classes for optimal asymmetric encryption padding |
5 | | /// \since Crypto++ 2.1 |
6 | | |
7 | | #ifndef CRYPTOPP_OAEP_H |
8 | | #define CRYPTOPP_OAEP_H |
9 | | |
10 | | #include "cryptlib.h" |
11 | | #include "pubkey.h" |
12 | | #include "sha.h" |
13 | | |
14 | | NAMESPACE_BEGIN(CryptoPP) |
15 | | |
16 | | /// \brief OAEP padding base class |
17 | | /// \since Crypto++ 2.1 |
18 | | class CRYPTOPP_DLL OAEP_Base : public PK_EncryptionMessageEncodingMethod |
19 | | { |
20 | | public: |
21 | 0 | bool ParameterSupported(const char *name) const {return strcmp(name, Name::EncodingParameters()) == 0;} |
22 | | size_t MaxUnpaddedLength(size_t paddedLength) const; |
23 | | void Pad(RandomNumberGenerator &rng, const byte *raw, size_t inputLength, byte *padded, size_t paddedLength, const NameValuePairs ¶meters) const; |
24 | | DecodingResult Unpad(const byte *padded, size_t paddedLength, byte *raw, const NameValuePairs ¶meters) const; |
25 | | |
26 | | protected: |
27 | | virtual unsigned int DigestSize() const =0; |
28 | | virtual HashTransformation * NewHash() const =0; |
29 | | virtual MaskGeneratingFunction * NewMGF() const =0; |
30 | | }; |
31 | | |
32 | | /// \brief OAEP padding |
33 | | /// \tparam H HashTransformation derived class |
34 | | /// \tparam MGF MaskGeneratingFunction derived class |
35 | | /// \sa <a href="http://www.weidai.com/scan-mirror/ca.html#cem_OAEP-MGF1">EME-OAEP</a>, for use with classes derived from TF_ES |
36 | | /// \since Crypto++ 2.1 |
37 | | template <class H, class MGF=P1363_MGF1> |
38 | | class OAEP : public OAEP_Base, public EncryptionStandard |
39 | | { |
40 | | public: |
41 | 0 | static std::string CRYPTOPP_API StaticAlgorithmName() {return std::string("OAEP-") + MGF::StaticAlgorithmName() + "(" + H::StaticAlgorithmName() + ")";} |
42 | | typedef OAEP<H, MGF> EncryptionMessageEncodingMethod; |
43 | | |
44 | | protected: |
45 | 0 | unsigned int DigestSize() const {return H::DIGESTSIZE;} |
46 | 0 | HashTransformation * NewHash() const {return new H;} |
47 | 0 | MaskGeneratingFunction * NewMGF() const {return new MGF;} |
48 | | }; |
49 | | |
50 | | CRYPTOPP_DLL_TEMPLATE_CLASS OAEP<SHA1>; |
51 | | |
52 | | NAMESPACE_END |
53 | | |
54 | | #endif |