Crypto++  8.8
Free C++ class library of cryptographic schemes
oaep.h
Go to the documentation of this file.
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  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 &parameters) const;
24  DecodingResult Unpad(const byte *padded, size_t paddedLength, byte *raw, const NameValuePairs &parameters) 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  static std::string CRYPTOPP_API StaticAlgorithmName() {return std::string("OAEP-") + MGF::StaticAlgorithmName() + "(" + H::StaticAlgorithmName() + ")";}
43 
44 protected:
45  unsigned int DigestSize() const {return H::DIGESTSIZE;}
46  HashTransformation * NewHash() const {return new H;}
47  MaskGeneratingFunction * NewMGF() const {return new MGF;}
48 };
49 
51 
52 NAMESPACE_END
53 
54 #endif
Interface for hash functions and data processing part of MACs.
Definition: cryptlib.h:1118
Mask generation function interface.
Definition: pubkey.h:688
Interface for retrieving values given their names.
Definition: cryptlib.h:327
OAEP padding base class.
Definition: oaep.h:19
size_t MaxUnpaddedLength(size_t paddedLength) const
max size of unpadded message in bytes, given max size of padded message in bits (1 less than size of ...
OAEP padding.
Definition: oaep.h:39
Message encoding method for public key encryption.
Definition: pubkey.h:209
Interface for random number generators.
Definition: cryptlib.h:1440
#define CRYPTOPP_API
Win32 calling convention.
Definition: config_dll.h:119
#define CRYPTOPP_DLL_TEMPLATE_CLASS
Instantiate templates in a dynamic library.
Definition: config_dll.h:72
Abstract base classes that provide a uniform interface to this library.
Crypto++ library namespace.
const char * Pad()
bool
Definition: argnames.h:72
const char * EncodingParameters()
ConstByteArrayParameter.
Definition: argnames.h:66
const char * DigestSize()
int, in bytes
Definition: argnames.h:79
This file contains helper classes/functions for implementing public key algorithms.
Classes for SHA-1 and SHA-2 family of message digests.
Returns a decoding results.
Definition: cryptlib.h:283
Base class for public key encryption standard classes.
Definition: pubkey.h:2274