Crypto++ 8.2 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() + ")";}
42 typedef OAEP<H, MGF> EncryptionMessageEncodingMethod;
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
50 CRYPTOPP_DLL_TEMPLATE_CLASS OAEP<SHA1>;
51
52 NAMESPACE_END
53
54 #endif
Name::DigestSize
const char * DigestSize()
int, in bytes
Definition: argnames.h:79
OAEP_Base
OAEP padding base class.
Definition: oaep.h:18
Name::Pad
const char * Pad()
bool
Definition: argnames.h:72
pubkey.h
This file contains helper classes/functions for implementing public key algorithms.
cryptlib.h
Abstract base classes that provide a uniform interface to this library.
PK_EncryptionMessageEncodingMethod
Message encoding method for public key encryption.
Definition: pubkey.h:208
RandomNumberGenerator
Interface for random number generators.
Definition: cryptlib.h:1413
DecodingResult
Returns a decoding results.
Definition: cryptlib.h:277
Name::EncodingParameters
const char * EncodingParameters()
ConstByteArrayParameter.
Definition: argnames.h:66
EncryptionStandard
Base class for public key encryption standard classes.
Definition: pubkey.h:2264
MaskGeneratingFunction
Mask generation function interface.
Definition: pubkey.h:687
sha.h
Classes for SHA-1 and SHA-2 family of message digests.
HashTransformation
Interface for hash functions and data processing part of MACs.
Definition: cryptlib.h:1112
CryptoPP
Crypto++ library namespace.
OAEP
OAEP padding.
Definition: oaep.h:38
NameValuePairs
Interface for retrieving values given their names.
Definition: cryptlib.h:321