Crypto++
5.6.4
Free C++ class library of cryptographic schemes
xtrcrypt.h
Go to the documentation of this file.
1
#ifndef CRYPTOPP_XTRCRYPT_H
2
#define CRYPTOPP_XTRCRYPT_H
3
4
/** \file
5
"The XTR public key system" by Arjen K. Lenstra and Eric R. Verheul
6
*/
7
8
#include "
cryptlib.h
"
9
#include "
xtr.h
"
10
#include "
integer.h
"
11
12
NAMESPACE_BEGIN(
CryptoPP
)
13
14
//! XTR-DH with key validation
15
16
class
XTR_DH
: public
SimpleKeyAgreementDomain
, public
CryptoParameters
17
{
18
typedef
XTR_DH
ThisClass
;
19
20
public
:
21
XTR_DH
(
const
Integer
&p,
const
Integer
&q,
const
GFP2Element
&g);
22
XTR_DH
(
RandomNumberGenerator
&rng,
unsigned
int
pbits,
unsigned
int
qbits);
23
XTR_DH
(
BufferedTransformation
&domainParams);
24
25
void
DEREncode(
BufferedTransformation
&domainParams)
const
;
26
27
bool
Validate(
RandomNumberGenerator
&rng,
unsigned
int
level)
const
;
28
bool
GetVoidValue(
const
char
*name,
const
std::type_info &valueType,
void
*pValue)
const
;
29
void
AssignFrom(
const
NameValuePairs
&source);
30
CryptoParameters
&
AccessCryptoParameters
() {
return
*
this
;}
31
unsigned
int
AgreedValueLength
()
const
{
return
2*m_p.ByteCount();}
32
unsigned
int
PrivateKeyLength
()
const
{
return
m_q.ByteCount();}
33
unsigned
int
PublicKeyLength
()
const
{
return
2*m_p.ByteCount();}
34
35
void
GeneratePrivateKey(
RandomNumberGenerator
&rng,
byte
*privateKey)
const
;
36
void
GeneratePublicKey(
RandomNumberGenerator
&rng,
const
byte
*privateKey,
byte
*publicKey)
const
;
37
bool
Agree(
byte
*agreedValue,
const
byte
*privateKey,
const
byte
*otherPublicKey,
bool
validateOtherPublicKey=
true
)
const
;
38
39
const
Integer
&GetModulus()
const
{
return
m_p;}
40
const
Integer
&GetSubgroupOrder()
const
{
return
m_q;}
41
const
GFP2Element
&GetSubgroupGenerator()
const
{
return
m_g;}
42
43
void
SetModulus(
const
Integer
&p) {m_p = p;}
44
void
SetSubgroupOrder(
const
Integer
&q) {m_q = q;}
45
void
SetSubgroupGenerator(
const
GFP2Element
&g) {m_g = g;}
46
47
private
:
48
unsigned
int
ExponentBitLength()
const
;
49
50
Integer
m_p, m_q;
51
GFP2Element
m_g;
52
};
53
54
NAMESPACE_END
55
56
#endif
CryptoParameters
Interface for crypto prameters.
Definition:
cryptlib.h:2197
SimpleKeyAgreementDomain
Interface for domains of simple key agreement protocols.
Definition:
cryptlib.h:2683
XTR_DH::PublicKeyLength
unsigned int PublicKeyLength() const
Provides the size of the public key.
Definition:
xtrcrypt.h:33
BufferedTransformation
Interface for buffered transformations.
Definition:
cryptlib.h:1353
xtr.h
The XTR public key system.
RandomNumberGenerator
Interface for random number generators.
Definition:
cryptlib.h:1187
GFP2Element
an element of GF(p^2)
Definition:
xtr.h:18
XTR_DH
XTR-DH with key validation.
Definition:
xtrcrypt.h:17
XTR_DH::AgreedValueLength
unsigned int AgreedValueLength() const
Provides the size of the agreed value.
Definition:
xtrcrypt.h:31
CryptoPP
Crypto++ library namespace.
XTR_DH::AccessCryptoParameters
CryptoParameters & AccessCryptoParameters()
Retrieves a reference to Crypto Parameters.
Definition:
xtrcrypt.h:30
NameValuePairs
Interface for retrieving values given their names.
Definition:
cryptlib.h:278
cryptlib.h
Abstract base classes that provide a uniform interface to this library.
XTR_DH::PrivateKeyLength
unsigned int PrivateKeyLength() const
Provides the size of the private key.
Definition:
xtrcrypt.h:32
integer.h
Multiple precision integer with arithmetic operations.
Integer
Multiple precision integer with arithmetic operations.
Definition:
integer.h:46
Generated on Wed Sep 16 2020 15:32:49 for Crypto++ by
1.8.18