# pubkey.h File Reference

## Detailed Description

This file contains helper classes/functions for implementing public key algorithms.

The class hierachies in this .h file tend to look like this:

                      x1
                     / \
                    y1  z1
                     |  |
                x2<y1>  x2<z1>
                     |  |
                    y2  z2
                     |  |
                x3<y2>  x3<z2>
                     |  |
                    y3  z3

- x1, y1, z1 are abstract interface classes defined in cryptlib.h
- x2, y2, z2 are implementations of the interfaces using "abstract policies", which are pure virtual functions that should return interfaces to interchangeable algorithms. These classes have "Base" suffixes.
- x3, y3, z3 hold actual algorithms and implement those virtual functions. These classes have "Impl" suffixes.

The "TF_" prefix means an implementation using trapdoor functions on integers. The "DL_" prefix means an implementation using group operations (in groups where discrete log is hard).

Definition in file pubkey.h.

`#include "modarith.h"`
`#include "filters.h"`
`#include "eprecomp.h"`
`#include "fips140.h"`
`#include "argnames.h"`
`#include <memory>`

Go to the source code of this file.

## Classes
class | TrapdoorFunctionBounds
| _ More...
class | RandomizedTrapdoorFunction
| _ More...
class | TrapdoorFunction
| _ More...
class | RandomizedTrapdoorFunctionInverse
| _ More...
class | TrapdoorFunctionInverse
| _ More...
class | PK_EncryptionMessageEncodingMethod
| message encoding method for public key encryption More...
class | TF_Base< TFI, MEI >
| _ More...
class | PK_FixedLengthCryptoSystemImpl< BASE >
| _ More...
class | TF_CryptoSystemBase< INTERFACE, BASE >
| _ More...
class | TF_DecryptorBase
| _ More...
class | TF_EncryptorBase
| _ More...
class | PK_SignatureMessageEncodingMethod
| interface for message encoding method for public key signature schemes More...
struct | PK_SignatureMessageEncodingMethod::HashIdentifierLookup
struct | PK_SignatureMessageEncodingMethod::HashIdentifierLookup::HashIdentifierLookup2< H >
class | PK_DeterministicSignatureMessageEncodingMethod
class | PK_RecoverableSignatureMessageEncodingMethod
class | DL_SignatureMessageEncodingMethod_DSA
class | DL_SignatureMessageEncodingMethod_NR
class | PK_MessageAccumulatorBase
class | PK_MessageAccumulatorImpl< HASH_ALGORITHM >
class | TF_SignatureSchemeBase< INTERFACE, BASE >
| _ More...
class | TF_SignerBase
| _ More...
class | TF_VerifierBase
| _ More...
struct | TF_CryptoSchemeOptions< T1, T2, T3 >
| _ More...
struct | TF_SignatureSchemeOptions< T1, T2, T3, T4 >
| _ More...
class | TF_ObjectImplBase< BASE, SCHEME_OPTIONS, KEY_CLASS >
| _ More...
class | TF_ObjectImplExtRef< BASE, SCHEME_OPTIONS, KEY >
| _ More...
class | TF_ObjectImpl< BASE, SCHEME_OPTIONS, KEY_CLASS >
| _ More...
class | TF_DecryptorImpl< SCHEME_OPTIONS >
| _ More...
class | TF_EncryptorImpl< SCHEME_OPTIONS >
| _ More...
class | TF_SignerImpl< SCHEME_OPTIONS >
| _ More...
class | TF_VerifierImpl< SCHEME_OPTIONS >
| _ More...
class | MaskGeneratingFunction
| _ More...
class | P1363_MGF1
| _ More...
class | P1363_KDF2< H >
| _ More...
class | DL_BadElement
| to be thrown by DecodeElement and AgreeWithStaticPrivateKey More...
class | DL_GroupParameters< T >
| interface for DL group parameters More...
class | DL_GroupParametersImpl< GROUP_PRECOMP, BASE_PRECOMP, BASE >
| _ More...
class | DL_Key< T >
| _ More...
class | DL_PublicKey< T >
| interface for DL public keys More...
class | DL_PrivateKey< T >
| interface for DL private keys More...
class | DL_KeyImpl< PK, GP, O >
| _ More...
class | DL_PrivateKeyImpl< GP >
| _ More...
class | DL_PrivateKey_WithSignaturePairwiseConsistencyTest< BASE, SIGNATURE_SCHEME >
| _ More...
class | DL_PublicKeyImpl< GP >
| _ More...
class | DL_ElgamalLikeSignatureAlgorithm< T >
| interface for Elgamal-like signature algorithms More...
class | DL_KeyAgreementAlgorithm< T >
| interface for DL key agreement algorithms More...
class | DL_KeyDerivationAlgorithm< T >
| interface for key derivation algorithms used in DL cryptosystems More...
class | DL_SymmetricEncryptionAlgorithm
| interface for symmetric encryption algorithms used in DL cryptosystems More...
class | DL_Base< KI >
| _ More...
class | DL_SignatureSchemeBase< INTERFACE, KEY_INTERFACE >
| _ More...
class | DL_SignerBase< T >
| _ More...
class | DL_VerifierBase< T >
| _ More...
class | DL_CryptoSystemBase< PK, KI >
| _ More...
class | DL_DecryptorBase< T >
| _ More...
class | DL_EncryptorBase< T >
| _ More...
struct | DL_SchemeOptionsBase< T1, T2 >
| _ More...
struct | DL_KeyedSchemeOptions< T1, T2 >
| _ More...
struct | DL_SignatureSchemeOptions< T1, T2, T3, T4, T5 >
| _ More...
struct | DL_CryptoSchemeOptions< T1, T2, T3, T4, T5 >
| _ More...
class | DL_ObjectImplBase< BASE, SCHEME_OPTIONS, KEY >
| _ More...
class | DL_ObjectImpl< BASE, SCHEME_OPTIONS, KEY >
| _ More...
class | DL_SignerImpl< SCHEME_OPTIONS >
| _ More...
class | DL_VerifierImpl< SCHEME_OPTIONS >
| _ More...
class | DL_EncryptorImpl< SCHEME_OPTIONS >
| _ More...
class | DL_DecryptorImpl< SCHEME_OPTIONS >
| _ More...
class | DL_SimpleKeyAgreementDomainBase< T >
| _ More...
class | DL_KeyAgreementAlgorithm_DH< ELEMENT, COFACTOR_OPTION >
| DH key agreement algorithm. More...
class | PK_FinalTemplate< BASE >
| A template implementing constructors for public key algorithm classes. More...
struct | EncryptionStandard
| Base class for public key encryption standard classes. These classes are used to select from variants of algorithms. Note that not all standards apply to all algorithms. More...
struct | SignatureStandard
| Base class for public key signature standard classes. These classes are used to select from variants of algorithms. Note that not all standards apply to all algorithms. More...
class | TF_ES< STANDARD, KEYS, ALG_INFO >
| Trapdoor Function Based Encryption Scheme. More...
class | TF_SS< STANDARD, H, KEYS, ALG_INFO >
| Trapdoor Function Based Signature Scheme. More...
class | DL_SS< KEYS, SA, MEM, H, ALG_INFO >
| Discrete Log Based Signature Scheme. More...
class | DL_ES< KEYS, AA, DA, EA, ALG_INFO >
| Discrete Log Based Encryption Scheme. More...
## Typedefs
typedef std::pair< const byte *, size_t > | HashIdentifier
typedef EnumToType < CofactorMultiplicationOption, NO_COFACTOR_MULTIPLICTION > | NoCofactorMultiplication
typedef EnumToType < CofactorMultiplicationOption, COMPATIBLE_COFACTOR_MULTIPLICTION > | CompatibleCofactorMultiplication
typedef EnumToType < CofactorMultiplicationOption, INCOMPATIBLE_COFACTOR_MULTIPLICTION > | IncompatibleCofactorMultiplication
## Enumerations
enum | CofactorMultiplicationOption { NO_COFACTOR_MULTIPLICTION, COMPATIBLE_COFACTOR_MULTIPLICTION, INCOMPATIBLE_COFACTOR_MULTIPLICTION }
## Functions
void __cdecl | P1363_MGF1KDF2_Common (HashTransformation &hash, byte *output, size_t outputLength, const byte *input, size_t inputLength, const byte *derivationParams, size_t derivationParamsLength, bool mask, unsigned int counterStart)