Crypto++  8.4
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
HashTransformation
Interface for hash functions and data processing part of MACs.
Definition: cryptlib.h:1113
Name::DigestSize
const char * DigestSize()
int, in bytes
Definition: argnames.h:79
Name::EncodingParameters
const char * EncodingParameters()
ConstByteArrayParameter.
Definition: argnames.h:66
MaskGeneratingFunction
Mask generation function interface.
Definition: pubkey.h:688
pubkey.h
This file contains helper classes/functions for implementing public key algorithms.
OAEP_Base::MaxUnpaddedLength
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 ...
RandomNumberGenerator
Interface for random number generators.
Definition: cryptlib.h:1418
sha.h
Classes for SHA-1 and SHA-2 family of message digests.
EncryptionStandard
Base class for public key encryption standard classes.
Definition: pubkey.h:2264
DecodingResult
Returns a decoding results.
Definition: cryptlib.h:278
OAEP
OAEP padding.
Definition: oaep.h:39
PK_EncryptionMessageEncodingMethod
Message encoding method for public key encryption.
Definition: pubkey.h:209
CryptoPP
Crypto++ library namespace.
CRYPTOPP_API
#define CRYPTOPP_API
Win32 calling convention.
Definition: config_dll.h:119
CRYPTOPP_DLL_TEMPLATE_CLASS
#define CRYPTOPP_DLL_TEMPLATE_CLASS
Instantiate templates in a dynamic library.
Definition: config_dll.h:72
NameValuePairs
Interface for retrieving values given their names.
Definition: cryptlib.h:322
cryptlib.h
Abstract base classes that provide a uniform interface to this library.
Name::Pad
const char * Pad()
bool
Definition: argnames.h:72
OAEP_Base
OAEP padding base class.
Definition: oaep.h:19