summaryrefslogtreecommitdiffstats
path: root/cryptopp562/ecp.h
diff options
context:
space:
mode:
authorMalfurious <m@lfurio.us>2024-10-24 06:44:24 -0400
committerMalfurious <m@lfurio.us>2024-10-24 06:44:24 -0400
commit512aa4c77b3dc0d72db713a9215ff65a98a99ec3 (patch)
tree6db82e0109dc987b5b021f81d4e8a0926eb75ff7 /cryptopp562/ecp.h
parent428471d39fb8c205a9fad899c88c30a2cb7df685 (diff)
parent10affea371406c0ae4c080e5a19390a8e9bd154b (diff)
downloadcompass-512aa4c77b3dc0d72db713a9215ff65a98a99ec3.tar.gz
compass-512aa4c77b3dc0d72db713a9215ff65a98a99ec3.zip
Merge branch 'mbedtls'
Replace Crypto++ 5.6.2 with Mbed TLS 3.6.0 Newer compilers are starting to show the age of the crypto library we've been using, as it is sometimes a pain to recompile compass lately. So, the tracked version of Crypto++ was at least due for an upgrade. However, I plan to soon begin reimplementing compass in C. So, I'm taking this opportunity to first just migrate the cryptography library to a newer C alternative. This branch does so, and integrates its use into the current C++ version of compass. * mbedtls: Remove unnecessary exception handler catch block Refactor random password generation to use mbedtls entropy source Refactor SHA256 function to use mbedtls Refactor AES functions to use mbedtls Add Mbedtls library Remove Crypto++ library
Diffstat (limited to 'cryptopp562/ecp.h')
-rw-r--r--cryptopp562/ecp.h126
1 files changed, 0 insertions, 126 deletions
diff --git a/cryptopp562/ecp.h b/cryptopp562/ecp.h
deleted file mode 100644
index d946be6..0000000
--- a/cryptopp562/ecp.h
+++ /dev/null
@@ -1,126 +0,0 @@
-#ifndef CRYPTOPP_ECP_H
-#define CRYPTOPP_ECP_H
-
-#include "modarith.h"
-#include "eprecomp.h"
-#include "smartptr.h"
-#include "pubkey.h"
-
-NAMESPACE_BEGIN(CryptoPP)
-
-//! Elliptical Curve Point
-struct CRYPTOPP_DLL ECPPoint
-{
- ECPPoint() : identity(true) {}
- ECPPoint(const Integer &x, const Integer &y)
- : identity(false), x(x), y(y) {}
-
- bool operator==(const ECPPoint &t) const
- {return (identity && t.identity) || (!identity && !t.identity && x==t.x && y==t.y);}
- bool operator< (const ECPPoint &t) const
- {return identity ? !t.identity : (!t.identity && (x<t.x || (x==t.x && y<t.y)));}
-
- bool identity;
- Integer x, y;
-};
-
-CRYPTOPP_DLL_TEMPLATE_CLASS AbstractGroup<ECPPoint>;
-
-//! Elliptic Curve over GF(p), where p is prime
-class CRYPTOPP_DLL ECP : public AbstractGroup<ECPPoint>
-{
-public:
- typedef ModularArithmetic Field;
- typedef Integer FieldElement;
- typedef ECPPoint Point;
-
- ECP() {}
- ECP(const ECP &ecp, bool convertToMontgomeryRepresentation = false);
- ECP(const Integer &modulus, const FieldElement &a, const FieldElement &b)
- : m_fieldPtr(new Field(modulus)), m_a(a.IsNegative() ? modulus+a : a), m_b(b) {}
- // construct from BER encoded parameters
- // this constructor will decode and extract the the fields fieldID and curve of the sequence ECParameters
- ECP(BufferedTransformation &bt);
-
- // encode the fields fieldID and curve of the sequence ECParameters
- void DEREncode(BufferedTransformation &bt) const;
-
- bool Equal(const Point &P, const Point &Q) const;
- const Point& Identity() const;
- const Point& Inverse(const Point &P) const;
- bool InversionIsFast() const {return true;}
- const Point& Add(const Point &P, const Point &Q) const;
- const Point& Double(const Point &P) const;
- Point ScalarMultiply(const Point &P, const Integer &k) const;
- Point CascadeScalarMultiply(const Point &P, const Integer &k1, const Point &Q, const Integer &k2) const;
- void SimultaneousMultiply(Point *results, const Point &base, const Integer *exponents, unsigned int exponentsCount) const;
-
- Point Multiply(const Integer &k, const Point &P) const
- {return ScalarMultiply(P, k);}
- Point CascadeMultiply(const Integer &k1, const Point &P, const Integer &k2, const Point &Q) const
- {return CascadeScalarMultiply(P, k1, Q, k2);}
-
- bool ValidateParameters(RandomNumberGenerator &rng, unsigned int level=3) const;
- bool VerifyPoint(const Point &P) const;
-
- unsigned int EncodedPointSize(bool compressed = false) const
- {return 1 + (compressed?1:2)*GetField().MaxElementByteLength();}
- // returns false if point is compressed and not valid (doesn't check if uncompressed)
- bool DecodePoint(Point &P, BufferedTransformation &bt, size_t len) const;
- bool DecodePoint(Point &P, const byte *encodedPoint, size_t len) const;
- void EncodePoint(byte *encodedPoint, const Point &P, bool compressed) const;
- void EncodePoint(BufferedTransformation &bt, const Point &P, bool compressed) const;
-
- Point BERDecodePoint(BufferedTransformation &bt) const;
- void DEREncodePoint(BufferedTransformation &bt, const Point &P, bool compressed) const;
-
- Integer FieldSize() const {return GetField().GetModulus();}
- const Field & GetField() const {return *m_fieldPtr;}
- const FieldElement & GetA() const {return m_a;}
- const FieldElement & GetB() const {return m_b;}
-
- bool operator==(const ECP &rhs) const
- {return GetField() == rhs.GetField() && m_a == rhs.m_a && m_b == rhs.m_b;}
-
-private:
- clonable_ptr<Field> m_fieldPtr;
- FieldElement m_a, m_b;
- mutable Point m_R;
-};
-
-CRYPTOPP_DLL_TEMPLATE_CLASS DL_FixedBasePrecomputationImpl<ECP::Point>;
-CRYPTOPP_DLL_TEMPLATE_CLASS DL_GroupPrecomputation<ECP::Point>;
-
-template <class T> class EcPrecomputation;
-
-//! ECP precomputation
-template<> class EcPrecomputation<ECP> : public DL_GroupPrecomputation<ECP::Point>
-{
-public:
- typedef ECP EllipticCurve;
-
- // DL_GroupPrecomputation
- bool NeedConversions() const {return true;}
- Element ConvertIn(const Element &P) const
- {return P.identity ? P : ECP::Point(m_ec->GetField().ConvertIn(P.x), m_ec->GetField().ConvertIn(P.y));};
- Element ConvertOut(const Element &P) const
- {return P.identity ? P : ECP::Point(m_ec->GetField().ConvertOut(P.x), m_ec->GetField().ConvertOut(P.y));}
- const AbstractGroup<Element> & GetGroup() const {return *m_ec;}
- Element BERDecodeElement(BufferedTransformation &bt) const {return m_ec->BERDecodePoint(bt);}
- void DEREncodeElement(BufferedTransformation &bt, const Element &v) const {m_ec->DEREncodePoint(bt, v, false);}
-
- // non-inherited
- void SetCurve(const ECP &ec)
- {
- m_ec.reset(new ECP(ec, true));
- m_ecOriginal = ec;
- }
- const ECP & GetCurve() const {return *m_ecOriginal;}
-
-private:
- value_ptr<ECP> m_ec, m_ecOriginal;
-};
-
-NAMESPACE_END
-
-#endif