135
135
// ********************************************************
138
137
template <class BASE>
139
138
class CRYPTOPP_NO_VTABLE PK_FixedLengthCryptoSystemImpl : public BASE
142
size_t MaxPlaintextLength(size_t ciphertextLength) const
141
unsigned int MaxPlaintextLength(unsigned int ciphertextLength) const
143
142
{return ciphertextLength == FixedCiphertextLength() ? FixedMaxPlaintextLength() : 0;}
144
size_t CiphertextLength(size_t plaintextLength) const
143
unsigned int CiphertextLength(unsigned int plaintextLength) const
145
144
{return plaintextLength <= FixedMaxPlaintextLength() ? FixedCiphertextLength() : 0;}
147
virtual size_t FixedMaxPlaintextLength() const =0;
148
virtual size_t FixedCiphertextLength() const =0;
146
virtual unsigned int FixedMaxPlaintextLength() const =0;
147
virtual unsigned int FixedCiphertextLength() const =0;
152
151
template <class INTERFACE, class BASE>
153
152
class CRYPTOPP_NO_VTABLE TF_CryptoSystemBase : public PK_FixedLengthCryptoSystemImpl<INTERFACE>, protected BASE
156
bool ParameterSupported(const char *name) const {return this->GetMessageEncodingInterface().ParameterSupported(name);}
157
size_t FixedMaxPlaintextLength() const {return this->GetMessageEncodingInterface().MaxUnpaddedLength(PaddedBlockBitLength());}
158
size_t FixedCiphertextLength() const {return this->GetTrapdoorFunctionBounds().MaxImage().ByteCount();}
155
bool ParameterSupported(const char *name) const {return GetMessageEncodingInterface().ParameterSupported(name);}
156
unsigned int FixedMaxPlaintextLength() const {return GetMessageEncodingInterface().MaxUnpaddedLength(PaddedBlockBitLength());}
157
unsigned int FixedCiphertextLength() const {return GetTrapdoorFunctionBounds().MaxImage().ByteCount();}
161
size_t PaddedBlockByteLength() const {return BitsToBytes(PaddedBlockBitLength());}
162
size_t PaddedBlockBitLength() const {return this->GetTrapdoorFunctionBounds().PreimageBound().BitCount()-1;}
160
unsigned int PaddedBlockByteLength() const {return BitsToBytes(PaddedBlockBitLength());}
161
unsigned int PaddedBlockBitLength() const {return GetTrapdoorFunctionBounds().PreimageBound().BitCount()-1;}
166
165
class CRYPTOPP_DLL CRYPTOPP_NO_VTABLE TF_DecryptorBase : public TF_CryptoSystemBase<PK_Decryptor, TF_Base<TrapdoorFunctionInverse, PK_EncryptionMessageEncodingMethod> >
169
DecodingResult Decrypt(RandomNumberGenerator &rng, const byte *ciphertext, size_t ciphertextLength, byte *plaintext, const NameValuePairs ¶meters = g_nullNameValuePairs) const;
168
DecodingResult Decrypt(RandomNumberGenerator &rng, const byte *ciphertext, unsigned int ciphertextLength, byte *plaintext, const NameValuePairs ¶meters = g_nullNameValuePairs) const;
173
172
class CRYPTOPP_DLL CRYPTOPP_NO_VTABLE TF_EncryptorBase : public TF_CryptoSystemBase<PK_Encryptor, TF_Base<RandomizedTrapdoorFunction, PK_EncryptionMessageEncodingMethod> >
176
void Encrypt(RandomNumberGenerator &rng, const byte *plaintext, size_t plaintextLength, byte *ciphertext, const NameValuePairs ¶meters = g_nullNameValuePairs) const;
175
void Encrypt(RandomNumberGenerator &rng, const byte *plaintext, unsigned int plaintextLength, byte *ciphertext, const NameValuePairs ¶meters = g_nullNameValuePairs) const;
179
178
// ********************************************************
181
typedef std::pair<const byte *, size_t> HashIdentifier;
180
typedef std::pair<const byte *, unsigned int> HashIdentifier;
183
//! interface for message encoding method for public key signature schemes
184
183
class CRYPTOPP_NO_VTABLE PK_SignatureMessageEncodingMethod
187
186
virtual ~PK_SignatureMessageEncodingMethod() {}
189
virtual size_t MinRepresentativeBitLength(size_t hashIdentifierLength, size_t digestLength) const
191
virtual size_t MaxRecoverableLength(size_t representativeBitLength, size_t hashIdentifierLength, size_t digestLength) const
188
virtual unsigned int MaxRecoverableLength(unsigned int representativeBitLength, unsigned int hashIdentifierLength, unsigned int digestLength) const
194
191
bool IsProbabilistic() const
302
299
class PK_MessageAccumulatorImpl : public PK_MessageAccumulatorBase, protected ObjectHolder<HASH_ALGORITHM>
305
HashTransformation & AccessHash() {return this->m_object;}
302
HashTransformation & AccessHash() {return m_object;}
309
306
template <class INTERFACE, class BASE>
310
307
class CRYPTOPP_NO_VTABLE TF_SignatureSchemeBase : public INTERFACE, protected BASE
313
size_t SignatureLength() const
314
{return this->GetTrapdoorFunctionBounds().MaxPreimage().ByteCount();}
315
size_t MaxRecoverableLength() const
316
{return this->GetMessageEncodingInterface().MaxRecoverableLength(MessageRepresentativeBitLength(), GetHashIdentifier().second, GetDigestSize());}
317
size_t MaxRecoverableLengthFromSignatureLength(size_t signatureLength) const
318
{return this->MaxRecoverableLength();}
310
unsigned int SignatureLength() const
311
{return GetTrapdoorFunctionBounds().MaxPreimage().ByteCount();}
312
unsigned int MaxRecoverableLength() const
313
{return GetMessageEncodingInterface().MaxRecoverableLength(MessageRepresentativeBitLength(), GetHashIdentifier().second, GetDigestSize());}
314
unsigned int MaxRecoverableLengthFromSignatureLength(unsigned int signatureLength) const
315
{return MaxRecoverableLength();}
320
317
bool IsProbabilistic() const
321
{return this->GetTrapdoorFunctionInterface().IsRandomized() || this->GetMessageEncodingInterface().IsProbabilistic();}
318
{return GetTrapdoorFunctionInterface().IsRandomized() || GetMessageEncodingInterface().IsProbabilistic();}
322
319
bool AllowNonrecoverablePart() const
323
{return this->GetMessageEncodingInterface().AllowNonrecoverablePart();}
320
{return GetMessageEncodingInterface().AllowNonrecoverablePart();}
324
321
bool RecoverablePartFirst() const
325
{return this->GetMessageEncodingInterface().RecoverablePartFirst();}
322
{return GetMessageEncodingInterface().RecoverablePartFirst();}
328
size_t MessageRepresentativeLength() const {return BitsToBytes(MessageRepresentativeBitLength());}
329
size_t MessageRepresentativeBitLength() const {return this->GetTrapdoorFunctionBounds().ImageBound().BitCount()-1;}
325
unsigned int MessageRepresentativeLength() const {return BitsToBytes(MessageRepresentativeBitLength());}
326
unsigned int MessageRepresentativeBitLength() const {return GetTrapdoorFunctionBounds().ImageBound().BitCount()-1;}
330
327
virtual HashIdentifier GetHashIdentifier() const =0;
331
virtual size_t GetDigestSize() const =0;
328
virtual unsigned int GetDigestSize() const =0;
335
332
class CRYPTOPP_DLL CRYPTOPP_NO_VTABLE TF_SignerBase : public TF_SignatureSchemeBase<PK_Signer, TF_Base<RandomizedTrapdoorFunctionInverse, PK_SignatureMessageEncodingMethod> >
338
void InputRecoverableMessage(PK_MessageAccumulator &messageAccumulator, const byte *recoverableMessage, size_t recoverableMessageLength) const;
339
size_t SignAndRestart(RandomNumberGenerator &rng, PK_MessageAccumulator &messageAccumulator, byte *signature, bool restart=true) const;
335
void InputRecoverableMessage(PK_MessageAccumulator &messageAccumulator, const byte *recoverableMessage, unsigned int recoverableMessageLength) const;
336
unsigned int SignAndRestart(RandomNumberGenerator &rng, PK_MessageAccumulator &messageAccumulator, byte *signature, bool restart=true) const;
343
340
class CRYPTOPP_DLL CRYPTOPP_NO_VTABLE TF_VerifierBase : public TF_SignatureSchemeBase<PK_Verifier, TF_Base<TrapdoorFunction, PK_SignatureMessageEncodingMethod> >
346
void InputSignature(PK_MessageAccumulator &messageAccumulator, const byte *signature, size_t signatureLength) const;
343
void InputSignature(PK_MessageAccumulator &messageAccumulator, const byte *signature, unsigned int signatureLength) const;
347
344
bool VerifyAndRestart(PK_MessageAccumulator &messageAccumulator) const;
348
345
DecodingResult RecoverAndRestart(byte *recoveredMessage, PK_MessageAccumulator &recoveryAccumulator) const;
351
348
// ********************************************************
354
351
template <class T1, class T2, class T3>
355
352
struct TF_CryptoSchemeOptions
432
448
const KEY * m_pKey;
436
template <class BASE, class SCHEME_OPTIONS, class KEY_CLASS>
437
class CRYPTOPP_NO_VTABLE TF_ObjectImpl : public TF_ObjectImplBase<BASE, SCHEME_OPTIONS, KEY_CLASS>
452
template <class BASE, class SCHEME_OPTIONS, class KEY_COPIER>
453
class CRYPTOPP_NO_VTABLE TF_ObjectImpl : public TF_ObjectImplBase<TwoBases<BASE, KEY_COPIER>, SCHEME_OPTIONS, typename KEY_COPIER::KeyClass>
440
typedef KEY_CLASS KeyClass;
456
typedef typename KEY_COPIER::KeyClass KeyClass;
442
458
const KeyClass & GetKey() const {return m_trapdoorFunction;}
443
459
KeyClass & AccessKey() {return m_trapdoorFunction;}
461
void CopyKeyInto(typename SCHEME_OPTIONS::PrivateKey &key) const {key = GetKey();}
462
void CopyKeyInto(typename SCHEME_OPTIONS::PublicKey &key) const {key = GetKey();}
446
465
KeyClass m_trapdoorFunction;
450
template <class SCHEME_OPTIONS>
451
class TF_DecryptorImpl : public TF_ObjectImpl<TF_DecryptorBase, SCHEME_OPTIONS, typename SCHEME_OPTIONS::PrivateKey>
456
template <class SCHEME_OPTIONS>
457
class TF_EncryptorImpl : public TF_ObjectImpl<TF_EncryptorBase, SCHEME_OPTIONS, typename SCHEME_OPTIONS::PublicKey>
462
template <class SCHEME_OPTIONS>
463
class TF_SignerImpl : public TF_ObjectImpl<TF_SignerBase, SCHEME_OPTIONS, typename SCHEME_OPTIONS::PrivateKey>
468
template <class SCHEME_OPTIONS>
469
class TF_VerifierImpl : public TF_ObjectImpl<TF_VerifierBase, SCHEME_OPTIONS, typename SCHEME_OPTIONS::PublicKey>
469
template <class SCHEME_OPTIONS>
470
class TF_DecryptorImpl : public TF_ObjectImpl<TF_DecryptorBase, SCHEME_OPTIONS, PrivateKeyCopier<typename SCHEME_OPTIONS::Keys> >
475
template <class SCHEME_OPTIONS>
476
class TF_EncryptorImpl : public TF_ObjectImpl<TF_EncryptorBase, SCHEME_OPTIONS, PublicKeyCopier<typename SCHEME_OPTIONS::Keys> >
481
template <class SCHEME_OPTIONS>
482
class TF_SignerImpl : public TF_ObjectImpl<TF_SignerBase, SCHEME_OPTIONS, PrivateKeyCopier<typename SCHEME_OPTIONS::Keys> >
487
template <class SCHEME_OPTIONS>
488
class TF_VerifierImpl : public TF_ObjectImpl<TF_VerifierBase, SCHEME_OPTIONS, PublicKeyCopier<typename SCHEME_OPTIONS::Keys> >
473
492
// ********************************************************
476
494
class CRYPTOPP_NO_VTABLE MaskGeneratingFunction
479
497
virtual ~MaskGeneratingFunction() {}
480
virtual void GenerateAndMask(HashTransformation &hash, byte *output, size_t outputLength, const byte *input, size_t inputLength, bool mask = true) const =0;
498
virtual void GenerateAndMask(HashTransformation &hash, byte *output, unsigned int outputLength, const byte *input, unsigned int inputLength, bool mask = true) const =0;
483
CRYPTOPP_DLL void CRYPTOPP_API 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);
501
CRYPTOPP_DLL void P1363_MGF1KDF2_Common(HashTransformation &hash, byte *output, unsigned int outputLength, const byte *input, unsigned int inputLength, const byte *derivationParams, unsigned int derivationParamsLength, bool mask, unsigned int counterStart);
486
504
class P1363_MGF1 : public MaskGeneratingFunction
489
static const char * CRYPTOPP_API StaticAlgorithmName() {return "MGF1";}
490
void GenerateAndMask(HashTransformation &hash, byte *output, size_t outputLength, const byte *input, size_t inputLength, bool mask = true) const
507
static const char * StaticAlgorithmName() {return "MGF1";}
508
void GenerateAndMask(HashTransformation &hash, byte *output, unsigned int outputLength, const byte *input, unsigned int inputLength, bool mask = true) const
492
510
P1363_MGF1KDF2_Common(hash, output, outputLength, input, inputLength, NULL, 0, mask, 0);
997
1015
// for validation testing
998
1016
void RawSign(const Integer &k, const Integer &e, Integer &r, Integer &s) const
1000
const DL_ElgamalLikeSignatureAlgorithm<T> &alg = this->GetSignatureAlgorithm();
1001
const DL_GroupParameters<T> ¶ms = this->GetAbstractGroupParameters();
1002
const DL_PrivateKey<T> &key = this->GetKeyInterface();
1018
const DL_ElgamalLikeSignatureAlgorithm<T> &alg = GetSignatureAlgorithm();
1019
const DL_GroupParameters<T> ¶ms = GetAbstractGroupParameters();
1020
const DL_PrivateKey<T> &key = GetKeyInterface();
1004
1022
r = params.ConvertElementToInteger(params.ExponentiateBase(k));
1005
1023
alg.Sign(params, key.GetPrivateExponent(), k, e, r, s);
1008
void InputRecoverableMessage(PK_MessageAccumulator &messageAccumulator, const byte *recoverableMessage, size_t recoverableMessageLength) const
1026
void InputRecoverableMessage(PK_MessageAccumulator &messageAccumulator, const byte *recoverableMessage, unsigned int recoverableMessageLength) const
1010
1028
PK_MessageAccumulatorBase &ma = static_cast<PK_MessageAccumulatorBase &>(messageAccumulator);
1011
1029
ma.m_recoverableMessage.Assign(recoverableMessage, recoverableMessageLength);
1012
this->GetMessageEncodingInterface().ProcessRecoverableMessage(ma.AccessHash(),
1030
GetMessageEncodingInterface().ProcessRecoverableMessage(ma.AccessHash(),
1013
1031
recoverableMessage, recoverableMessageLength,
1014
1032
ma.m_presignature, ma.m_presignature.size(),
1015
1033
ma.m_semisignature);
1018
size_t SignAndRestart(RandomNumberGenerator &rng, PK_MessageAccumulator &messageAccumulator, byte *signature, bool restart) const
1036
unsigned int SignAndRestart(RandomNumberGenerator &rng, PK_MessageAccumulator &messageAccumulator, byte *signature, bool restart) const
1020
this->GetMaterial().DoQuickSanityCheck();
1038
GetMaterial().DoQuickSanityCheck();
1022
1040
PK_MessageAccumulatorBase &ma = static_cast<PK_MessageAccumulatorBase &>(messageAccumulator);
1023
const DL_ElgamalLikeSignatureAlgorithm<T> &alg = this->GetSignatureAlgorithm();
1024
const DL_GroupParameters<T> ¶ms = this->GetAbstractGroupParameters();
1025
const DL_PrivateKey<T> &key = this->GetKeyInterface();
1041
const DL_ElgamalLikeSignatureAlgorithm<T> &alg = GetSignatureAlgorithm();
1042
const DL_GroupParameters<T> ¶ms = GetAbstractGroupParameters();
1043
const DL_PrivateKey<T> &key = GetKeyInterface();
1027
SecByteBlock representative(this->MessageRepresentativeLength());
1028
this->GetMessageEncodingInterface().ComputeMessageRepresentative(
1045
SecByteBlock representative(MessageRepresentativeLength());
1046
GetMessageEncodingInterface().ComputeMessageRepresentative(
1030
1048
ma.m_recoverableMessage, ma.m_recoverableMessage.size(),
1031
ma.AccessHash(), this->GetHashIdentifier(), ma.m_empty,
1032
representative, this->MessageRepresentativeBitLength());
1049
ma.AccessHash(), GetHashIdentifier(), ma.m_empty,
1050
representative, MessageRepresentativeBitLength());
1033
1051
ma.m_empty = true;
1034
1052
Integer e(representative, representative.size());
1037
if (this->MaxRecoverableLength() > 0)
1055
if (MaxRecoverableLength() > 0)
1038
1056
r.Decode(ma.m_semisignature, ma.m_semisignature.size());
1040
1058
r.Decode(ma.m_presignature, ma.m_presignature.size());
1042
1060
alg.Sign(params, key.GetPrivateExponent(), ma.m_k, e, r, s);
1044
size_t rLen = alg.RLen(params);
1062
unsigned int rLen = alg.RLen(params);
1045
1063
r.Encode(signature, rLen);
1046
1064
s.Encode(signature+rLen, alg.SLen(params));
1049
1067
RestartMessageAccumulator(rng, ma);
1051
return this->SignatureLength();
1069
return SignatureLength();
1055
1073
void RestartMessageAccumulator(RandomNumberGenerator &rng, PK_MessageAccumulatorBase &ma) const
1057
const DL_ElgamalLikeSignatureAlgorithm<T> &alg = this->GetSignatureAlgorithm();
1058
const DL_GroupParameters<T> ¶ms = this->GetAbstractGroupParameters();
1075
const DL_ElgamalLikeSignatureAlgorithm<T> &alg = GetSignatureAlgorithm();
1076
const DL_GroupParameters<T> ¶ms = GetAbstractGroupParameters();
1059
1077
ma.m_k.Randomize(rng, 1, params.GetSubgroupOrder()-1);
1060
1078
ma.m_presignature.New(params.GetEncodedElementSize(false));
1061
1079
params.ConvertElementToInteger(params.ExponentiateBase(ma.m_k)).Encode(ma.m_presignature, ma.m_presignature.size());
1066
1084
template <class T>
1067
1085
class CRYPTOPP_NO_VTABLE DL_VerifierBase : public DL_SignatureSchemeBase<PK_Verifier, DL_PublicKey<T> >
1070
void InputSignature(PK_MessageAccumulator &messageAccumulator, const byte *signature, size_t signatureLength) const
1088
void InputSignature(PK_MessageAccumulator &messageAccumulator, const byte *signature, unsigned int signatureLength) const
1072
1090
PK_MessageAccumulatorBase &ma = static_cast<PK_MessageAccumulatorBase &>(messageAccumulator);
1073
const DL_ElgamalLikeSignatureAlgorithm<T> &alg = this->GetSignatureAlgorithm();
1074
const DL_GroupParameters<T> ¶ms = this->GetAbstractGroupParameters();
1091
const DL_ElgamalLikeSignatureAlgorithm<T> &alg = GetSignatureAlgorithm();
1092
const DL_GroupParameters<T> ¶ms = GetAbstractGroupParameters();
1076
size_t rLen = alg.RLen(params);
1094
unsigned int rLen = alg.RLen(params);
1077
1095
ma.m_semisignature.Assign(signature, rLen);
1078
1096
ma.m_s.Decode(signature+rLen, alg.SLen(params));
1080
this->GetMessageEncodingInterface().ProcessSemisignature(ma.AccessHash(), ma.m_semisignature, ma.m_semisignature.size());
1098
GetMessageEncodingInterface().ProcessSemisignature(ma.AccessHash(), ma.m_semisignature, ma.m_semisignature.size());
1083
1101
bool VerifyAndRestart(PK_MessageAccumulator &messageAccumulator) const
1085
this->GetMaterial().DoQuickSanityCheck();
1103
GetMaterial().DoQuickSanityCheck();
1087
1105
PK_MessageAccumulatorBase &ma = static_cast<PK_MessageAccumulatorBase &>(messageAccumulator);
1088
const DL_ElgamalLikeSignatureAlgorithm<T> &alg = this->GetSignatureAlgorithm();
1089
const DL_GroupParameters<T> ¶ms = this->GetAbstractGroupParameters();
1090
const DL_PublicKey<T> &key = this->GetKeyInterface();
1106
const DL_ElgamalLikeSignatureAlgorithm<T> &alg = GetSignatureAlgorithm();
1107
const DL_GroupParameters<T> ¶ms = GetAbstractGroupParameters();
1108
const DL_PublicKey<T> &key = GetKeyInterface();
1092
SecByteBlock representative(this->MessageRepresentativeLength());
1093
this->GetMessageEncodingInterface().ComputeMessageRepresentative(NullRNG(), ma.m_recoverableMessage, ma.m_recoverableMessage.size(),
1094
ma.AccessHash(), this->GetHashIdentifier(), ma.m_empty,
1095
representative, this->MessageRepresentativeBitLength());
1110
SecByteBlock representative(MessageRepresentativeLength());
1111
GetMessageEncodingInterface().ComputeMessageRepresentative(NullRNG(), ma.m_recoverableMessage, ma.m_recoverableMessage.size(),
1112
ma.AccessHash(), GetHashIdentifier(), ma.m_empty,
1113
representative, MessageRepresentativeBitLength());
1096
1114
ma.m_empty = true;
1097
1115
Integer e(representative, representative.size());
1475
1513
PK_FinalTemplate() {}
1477
PK_FinalTemplate(const CryptoMaterial &key)
1478
{this->AccessKey().AssignFrom(key);}
1480
PK_FinalTemplate(BufferedTransformation &bt)
1481
{this->AccessKey().BERDecode(bt);}
1483
PK_FinalTemplate(const AsymmetricAlgorithm &algorithm)
1484
{this->AccessKey().AssignFrom(algorithm.GetMaterial());}
1486
1515
PK_FinalTemplate(const Integer &v1)
1487
{this->AccessKey().Initialize(v1);}
1516
{AccessKey().Initialize(v1);}
1518
PK_FinalTemplate(const typename BASE::KeyClass &key) {AccessKey().operator=(key);}
1521
PK_FinalTemplate(const PublicKeyCopier<T> &key)
1522
{key.CopyKeyInto(AccessKey());}
1525
PK_FinalTemplate(const PrivateKeyCopier<T> &key)
1526
{key.CopyKeyInto(AccessKey());}
1528
PK_FinalTemplate(BufferedTransformation &bt) {AccessKey().BERDecode(bt);}
1489
1530
#if (defined(_MSC_VER) && _MSC_VER < 1300)
1491
1532
template <class T1, class T2>
1492
1533
PK_FinalTemplate(T1 &v1, T2 &v2)
1493
{this->AccessKey().Initialize(v1, v2);}
1534
{AccessKey().Initialize(v1, v2);}
1495
1536
template <class T1, class T2, class T3>
1496
1537
PK_FinalTemplate(T1 &v1, T2 &v2, T3 &v3)
1497
{this->AccessKey().Initialize(v1, v2, v3);}
1538
{AccessKey().Initialize(v1, v2, v3);}
1499
1540
template <class T1, class T2, class T3, class T4>
1500
1541
PK_FinalTemplate(T1 &v1, T2 &v2, T3 &v3, T4 &v4)
1501
{this->AccessKey().Initialize(v1, v2, v3, v4);}
1542
{AccessKey().Initialize(v1, v2, v3, v4);}
1503
1544
template <class T1, class T2, class T3, class T4, class T5>
1504
1545
PK_FinalTemplate(T1 &v1, T2 &v2, T3 &v3, T4 &v4, T5 &v5)
1505
{this->AccessKey().Initialize(v1, v2, v3, v4, v5);}
1546
{AccessKey().Initialize(v1, v2, v3, v4, v5);}
1507
1548
template <class T1, class T2, class T3, class T4, class T5, class T6>
1508
1549
PK_FinalTemplate(T1 &v1, T2 &v2, T3 &v3, T4 &v4, T5 &v5, T6 &v6)
1509
{this->AccessKey().Initialize(v1, v2, v3, v4, v5, v6);}
1550
{AccessKey().Initialize(v1, v2, v3, v4, v5, v6);}
1511
1552
template <class T1, class T2, class T3, class T4, class T5, class T6, class T7>
1512
1553
PK_FinalTemplate(T1 &v1, T2 &v2, T3 &v3, T4 &v4, T5 &v5, T6 &v6, T7 &v7)
1513
{this->AccessKey().Initialize(v1, v2, v3, v4, v5, v6, v7);}
1554
{AccessKey().Initialize(v1, v2, v3, v4, v5, v6, v7);}
1515
1556
template <class T1, class T2, class T3, class T4, class T5, class T6, class T7, class T8>
1516
1557
PK_FinalTemplate(T1 &v1, T2 &v2, T3 &v3, T4 &v4, T5 &v5, T6 &v6, T7 &v7, T8 &v8)
1517
{this->AccessKey().Initialize(v1, v2, v3, v4, v5, v6, v7, v8);}
1558
{AccessKey().Initialize(v1, v2, v3, v4, v5, v6, v7, v8);}
1521
1562
template <class T1, class T2>
1522
1563
PK_FinalTemplate(const T1 &v1, const T2 &v2)
1523
{this->AccessKey().Initialize(v1, v2);}
1564
{AccessKey().Initialize(v1, v2);}
1525
1566
template <class T1, class T2, class T3>
1526
1567
PK_FinalTemplate(const T1 &v1, const T2 &v2, const T3 &v3)
1527
{this->AccessKey().Initialize(v1, v2, v3);}
1568
{AccessKey().Initialize(v1, v2, v3);}
1529
1570
template <class T1, class T2, class T3, class T4>
1530
1571
PK_FinalTemplate(const T1 &v1, const T2 &v2, const T3 &v3, const T4 &v4)
1531
{this->AccessKey().Initialize(v1, v2, v3, v4);}
1572
{AccessKey().Initialize(v1, v2, v3, v4);}
1533
1574
template <class T1, class T2, class T3, class T4, class T5>
1534
1575
PK_FinalTemplate(const T1 &v1, const T2 &v2, const T3 &v3, const T4 &v4, const T5 &v5)
1535
{this->AccessKey().Initialize(v1, v2, v3, v4, v5);}
1576
{AccessKey().Initialize(v1, v2, v3, v4, v5);}
1537
1578
template <class T1, class T2, class T3, class T4, class T5, class T6>
1538
1579
PK_FinalTemplate(const T1 &v1, const T2 &v2, const T3 &v3, const T4 &v4, const T5 &v5, const T6 &v6)
1539
{this->AccessKey().Initialize(v1, v2, v3, v4, v5, v6);}
1580
{AccessKey().Initialize(v1, v2, v3, v4, v5, v6);}
1541
1582
template <class T1, class T2, class T3, class T4, class T5, class T6, class T7>
1542
1583
PK_FinalTemplate(const T1 &v1, const T2 &v2, const T3 &v3, const T4 &v4, const T5 &v5, const T6 &v6, const T7 &v7)
1543
{this->AccessKey().Initialize(v1, v2, v3, v4, v5, v6, v7);}
1584
{AccessKey().Initialize(v1, v2, v3, v4, v5, v6, v7);}
1545
1586
template <class T1, class T2, class T3, class T4, class T5, class T6, class T7, class T8>
1546
1587
PK_FinalTemplate(const T1 &v1, const T2 &v2, const T3 &v3, const T4 &v4, const T5 &v5, const T6 &v6, const T7 &v7, const T8 &v8)
1547
{this->AccessKey().Initialize(v1, v2, v3, v4, v5, v6, v7, v8);}
1588
{AccessKey().Initialize(v1, v2, v3, v4, v5, v6, v7, v8);}
1549
1590
template <class T1, class T2>
1550
1591
PK_FinalTemplate(T1 &v1, const T2 &v2)
1551
{this->AccessKey().Initialize(v1, v2);}
1592
{AccessKey().Initialize(v1, v2);}
1553
1594
template <class T1, class T2, class T3>
1554
1595
PK_FinalTemplate(T1 &v1, const T2 &v2, const T3 &v3)
1555
{this->AccessKey().Initialize(v1, v2, v3);}
1596
{AccessKey().Initialize(v1, v2, v3);}
1557
1598
template <class T1, class T2, class T3, class T4>
1558
1599
PK_FinalTemplate(T1 &v1, const T2 &v2, const T3 &v3, const T4 &v4)
1559
{this->AccessKey().Initialize(v1, v2, v3, v4);}
1600
{AccessKey().Initialize(v1, v2, v3, v4);}
1561
1602
template <class T1, class T2, class T3, class T4, class T5>
1562
1603
PK_FinalTemplate(T1 &v1, const T2 &v2, const T3 &v3, const T4 &v4, const T5 &v5)
1563
{this->AccessKey().Initialize(v1, v2, v3, v4, v5);}
1604
{AccessKey().Initialize(v1, v2, v3, v4, v5);}
1565
1606
template <class T1, class T2, class T3, class T4, class T5, class T6>
1566
1607
PK_FinalTemplate(T1 &v1, const T2 &v2, const T3 &v3, const T4 &v4, const T5 &v5, const T6 &v6)
1567
{this->AccessKey().Initialize(v1, v2, v3, v4, v5, v6);}
1608
{AccessKey().Initialize(v1, v2, v3, v4, v5, v6);}
1569
1610
template <class T1, class T2, class T3, class T4, class T5, class T6, class T7>
1570
1611
PK_FinalTemplate(T1 &v1, const T2 &v2, const T3 &v3, const T4 &v4, const T5 &v5, const T6 &v6, const T7 &v7)
1571
{this->AccessKey().Initialize(v1, v2, v3, v4, v5, v6, v7);}
1612
{AccessKey().Initialize(v1, v2, v3, v4, v5, v6, v7);}
1573
1614
template <class T1, class T2, class T3, class T4, class T5, class T6, class T7, class T8>
1574
1615
PK_FinalTemplate(T1 &v1, const T2 &v2, const T3 &v3, const T4 &v4, const T5 &v5, const T6 &v6, const T7 &v7, const T8 &v8)
1575
{this->AccessKey().Initialize(v1, v2, v3, v4, v5, v6, v7, v8);}
1616
{AccessKey().Initialize(v1, v2, v3, v4, v5, v6, v7, v8);}