Coverage Report

Created: 2025-04-11 06:45

/src/botan/build/include/public/botan/curve_gfp.h
Line
Count
Source
1
/*
2
* Elliptic curves over GF(p)
3
*
4
* (C) 2007 Martin Doering, Christoph Ludwig, Falko Strenzke
5
*     2010-2011,2012,2014,2024 Jack Lloyd
6
*
7
* Botan is released under the Simplified BSD License (see license.txt)
8
*/
9
10
#ifndef BOTAN_GFP_CURVE_H_
11
#define BOTAN_GFP_CURVE_H_
12
13
// TODO(Botan4) delete this header
14
15
#include <botan/bigint.h>
16
17
// Currently exposed in EC_Point
18
//BOTAN_FUTURE_INTERNAL_HEADER(curve_gfp.h)
19
20
namespace Botan {
21
22
class EC_Group_Data;
23
24
/**
25
* This is an internal type which is only exposed for accidental
26
* historical reasons. Do not use it in any way.
27
*
28
* This class will be removed in Botan4.
29
*/
30
class BOTAN_UNSTABLE_API CurveGFp final {
31
   public:
32
      /**
33
      * @return curve coefficient a
34
      */
35
      const BigInt& get_a() const;
36
37
      /**
38
      * @return curve coefficient b
39
      */
40
      const BigInt& get_b() const;
41
42
      /**
43
      * Get prime modulus of the field of the curve
44
      * @return prime modulus of the field of the curve
45
      */
46
      const BigInt& get_p() const;
47
48
      size_t get_p_words() const;
49
50
      CurveGFp(const CurveGFp&) = default;
51
52
   private:
53
      friend class EC_Point;
54
      friend class EC_Group_Data;
55
56
      /**
57
      * Create an uninitialized CurveGFp
58
      */
59
8.45k
      CurveGFp() = default;
60
61
      CurveGFp(const EC_Group_Data* group);
62
63
      CurveGFp& operator=(const CurveGFp&) = default;
64
65
11.6k
      void swap(CurveGFp& other) { std::swap(m_group, other.m_group); }
66
67
38.9k
      bool operator==(const CurveGFp& other) const { return (m_group == other.m_group); }
68
69
   private:
70
      const EC_Group_Data& group() const;
71
72
      /**
73
      * Raw pointer
74
      *
75
      * This EC_Group_Data is not owned because instead the EC_Group_Data
76
      * owns this CurveGFp, so we can always access it safely. If it was
77
      * a shared_ptr this would cause a reference cycle.
78
      */
79
      const EC_Group_Data* m_group = nullptr;
80
};
81
82
}  // namespace Botan
83
84
#endif