summaryrefslogtreecommitdiffstats
path: root/cryptopp562/mqv.h
diff options
context:
space:
mode:
authorMalfurious <m@lfurio.us>2024-10-21 11:09:00 -0400
committerMalfurious <m@lfurio.us>2024-10-24 06:41:41 -0400
commit5494fc310acf0aabb9d828451331e44483eb21c7 (patch)
tree77280a586d52470fca89b9ed73f5f1faaf7907c6 /cryptopp562/mqv.h
parent428471d39fb8c205a9fad899c88c30a2cb7df685 (diff)
downloadcompass-5494fc310acf0aabb9d828451331e44483eb21c7.tar.gz
compass-5494fc310acf0aabb9d828451331e44483eb21c7.zip
Remove Crypto++ library
The tracked version of Crypto++ is going on 10 years old and doesn't always compile properly on modern tooling. This removes the entire subdirectory as well as references to files in the build script. Due to the number of files touched by this commit, I opt to add its replacement in the next commit. Signed-off-by: Malfurious <m@lfurio.us>
Diffstat (limited to 'cryptopp562/mqv.h')
-rw-r--r--cryptopp562/mqv.h141
1 files changed, 0 insertions, 141 deletions
diff --git a/cryptopp562/mqv.h b/cryptopp562/mqv.h
deleted file mode 100644
index 2683817..0000000
--- a/cryptopp562/mqv.h
+++ /dev/null
@@ -1,141 +0,0 @@
-#ifndef CRYPTOPP_MQV_H
-#define CRYPTOPP_MQV_H
-
-/** \file
-*/
-
-#include "gfpcrypt.h"
-
-NAMESPACE_BEGIN(CryptoPP)
-
-//! _
-template <class GROUP_PARAMETERS, class COFACTOR_OPTION = CPP_TYPENAME GROUP_PARAMETERS::DefaultCofactorOption>
-class MQV_Domain : public AuthenticatedKeyAgreementDomain
-{
-public:
- typedef GROUP_PARAMETERS GroupParameters;
- typedef typename GroupParameters::Element Element;
- typedef MQV_Domain<GROUP_PARAMETERS, COFACTOR_OPTION> Domain;
-
- MQV_Domain() {}
-
- MQV_Domain(const GroupParameters &params)
- : m_groupParameters(params) {}
-
- MQV_Domain(BufferedTransformation &bt)
- {m_groupParameters.BERDecode(bt);}
-
- template <class T1, class T2>
- MQV_Domain(T1 v1, T2 v2)
- {m_groupParameters.Initialize(v1, v2);}
-
- template <class T1, class T2, class T3>
- MQV_Domain(T1 v1, T2 v2, T3 v3)
- {m_groupParameters.Initialize(v1, v2, v3);}
-
- template <class T1, class T2, class T3, class T4>
- MQV_Domain(T1 v1, T2 v2, T3 v3, T4 v4)
- {m_groupParameters.Initialize(v1, v2, v3, v4);}
-
- const GroupParameters & GetGroupParameters() const {return m_groupParameters;}
- GroupParameters & AccessGroupParameters() {return m_groupParameters;}
-
- CryptoParameters & AccessCryptoParameters() {return AccessAbstractGroupParameters();}
-
- unsigned int AgreedValueLength() const {return GetAbstractGroupParameters().GetEncodedElementSize(false);}
- unsigned int StaticPrivateKeyLength() const {return GetAbstractGroupParameters().GetSubgroupOrder().ByteCount();}
- unsigned int StaticPublicKeyLength() const {return GetAbstractGroupParameters().GetEncodedElementSize(true);}
-
- void GenerateStaticPrivateKey(RandomNumberGenerator &rng, byte *privateKey) const
- {
- Integer x(rng, Integer::One(), GetAbstractGroupParameters().GetMaxExponent());
- x.Encode(privateKey, StaticPrivateKeyLength());
- }
-
- void GenerateStaticPublicKey(RandomNumberGenerator &rng, const byte *privateKey, byte *publicKey) const
- {
- const DL_GroupParameters<Element> &params = GetAbstractGroupParameters();
- Integer x(privateKey, StaticPrivateKeyLength());
- Element y = params.ExponentiateBase(x);
- params.EncodeElement(true, y, publicKey);
- }
-
- unsigned int EphemeralPrivateKeyLength() const {return StaticPrivateKeyLength() + StaticPublicKeyLength();}
- unsigned int EphemeralPublicKeyLength() const {return StaticPublicKeyLength();}
-
- void GenerateEphemeralPrivateKey(RandomNumberGenerator &rng, byte *privateKey) const
- {
- const DL_GroupParameters<Element> &params = GetAbstractGroupParameters();
- Integer x(rng, Integer::One(), params.GetMaxExponent());
- x.Encode(privateKey, StaticPrivateKeyLength());
- Element y = params.ExponentiateBase(x);
- params.EncodeElement(true, y, privateKey+StaticPrivateKeyLength());
- }
-
- void GenerateEphemeralPublicKey(RandomNumberGenerator &rng, const byte *privateKey, byte *publicKey) const
- {
- memcpy(publicKey, privateKey+StaticPrivateKeyLength(), EphemeralPublicKeyLength());
- }
-
- bool Agree(byte *agreedValue,
- const byte *staticPrivateKey, const byte *ephemeralPrivateKey,
- const byte *staticOtherPublicKey, const byte *ephemeralOtherPublicKey,
- bool validateStaticOtherPublicKey=true) const
- {
- try
- {
- const DL_GroupParameters<Element> &params = GetAbstractGroupParameters();
- Element WW = params.DecodeElement(staticOtherPublicKey, validateStaticOtherPublicKey);
- Element VV = params.DecodeElement(ephemeralOtherPublicKey, true);
-
- Integer s(staticPrivateKey, StaticPrivateKeyLength());
- Integer u(ephemeralPrivateKey, StaticPrivateKeyLength());
- Element V = params.DecodeElement(ephemeralPrivateKey+StaticPrivateKeyLength(), false);
-
- const Integer &r = params.GetSubgroupOrder();
- Integer h2 = Integer::Power2((r.BitCount()+1)/2);
- Integer e = ((h2+params.ConvertElementToInteger(V)%h2)*s+u) % r;
- Integer tt = h2 + params.ConvertElementToInteger(VV) % h2;
-
- if (COFACTOR_OPTION::ToEnum() == NO_COFACTOR_MULTIPLICTION)
- {
- Element P = params.ExponentiateElement(WW, tt);
- P = m_groupParameters.MultiplyElements(P, VV);
- Element R[2];
- const Integer e2[2] = {r, e};
- params.SimultaneousExponentiate(R, P, e2, 2);
- if (!params.IsIdentity(R[0]) || params.IsIdentity(R[1]))
- return false;
- params.EncodeElement(false, R[1], agreedValue);
- }
- else
- {
- const Integer &k = params.GetCofactor();
- if (COFACTOR_OPTION::ToEnum() == COMPATIBLE_COFACTOR_MULTIPLICTION)
- e = ModularArithmetic(r).Divide(e, k);
- Element P = m_groupParameters.CascadeExponentiate(VV, k*e, WW, k*(e*tt%r));
- if (params.IsIdentity(P))
- return false;
- params.EncodeElement(false, P, agreedValue);
- }
- }
- catch (DL_BadElement &)
- {
- return false;
- }
- return true;
- }
-
-private:
- DL_GroupParameters<Element> & AccessAbstractGroupParameters() {return m_groupParameters;}
- const DL_GroupParameters<Element> & GetAbstractGroupParameters() const {return m_groupParameters;}
-
- GroupParameters m_groupParameters;
-};
-
-//! Menezes-Qu-Vanstone in GF(p) with key validation, AKA <a href="http://www.weidai.com/scan-mirror/ka.html#MQV">MQV</a>
-typedef MQV_Domain<DL_GroupParameters_GFP_DefaultSafePrime> MQV;
-
-NAMESPACE_END
-
-#endif