Crypto++ 8.7
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
14NAMESPACE_BEGIN(CryptoPP)
15
16/// \brief OAEP padding base class
17/// \since Crypto++ 2.1
19{
20public:
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
26protected:
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
37template <class H, class MGF=P1363_MGF1>
38class OAEP : public OAEP_Base, public EncryptionStandard
39{
40public:
41 static std::string CRYPTOPP_API StaticAlgorithmName() {return std::string("OAEP-") + MGF::StaticAlgorithmName() + "(" + H::StaticAlgorithmName() + ")";}
43
44protected:
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
52NAMESPACE_END
53
54#endif
Interface for hash functions and data processing part of MACs.
Definition: cryptlib.h:1113
Mask generation function interface.
Definition: pubkey.h:688
Interface for retrieving values given their names.
Definition: cryptlib.h:322
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:1435
#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 * DigestSize()
int, in bytes
Definition: argnames.h:79
const char * Pad()
bool
Definition: argnames.h:72
const char * EncodingParameters()
ConstByteArrayParameter.
Definition: argnames.h:66
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:278
Base class for public key encryption standard classes.
Definition: pubkey.h:2274