Gray C++ Libraries  0.0.2
A set of C++ libraries for MSVC, GNU on Windows, WinCE, Linux
cECPGroupDef.h
Go to the documentation of this file.
1 //
4 //
5 #ifndef _INC_cECPGroupDef_H
6 #define _INC_cECPGroupDef_H
7 #ifndef NO_PRAGMA_ONCE
8 #pragma once
9 #endif
10 
11 #include "cECPGroupParams.h"
12 #include "../File/cASN.h"
15 
16 namespace GrayLib
17 {
19 
21  {
25  // TODO split this for support of ECP_CurveType_t ECP_CurveType_MONTGOMERY vs ECP_CurveType_SHORT_WEIERSTRASS
26 
27  public:
29  const char* m_pszName;
30 
31  protected:
32  static HRESULT GRAYCALL Mod_koblitz(cBigInteger& N, const cBigUnsigned::BLOCK_t* Rp, cBigUnsigned::BLOCK_ENUM_t nBlocksN, cBigUnsigned::BLOCK_ENUM_t nBlocksAdj, BIT_ENUM_t iBitsShift, cBigUnsigned::BLOCK_t mask);
33 
34  public:
35  cECPGroupDef(ECPGroup_TYPE eECPGroupId = ECPGroup_NONE, const char* pszName = "") noexcept
36  : m_eECPGroupId(eECPGroupId)
37  , m_pszName(pszName)
38  {
39  }
40 
41  ECPGroup_TYPE get_HashCode() const noexcept
42  {
43  return m_eECPGroupId;
44  }
45 
46  virtual HRESULT ModP(OUT cBigInteger& N) const
47  {
51  return E_NOTIMPL;
52  }
53 
54  virtual void InjectParams(cECPGroupParams& g) const = 0;
55 
57  };
58 
59  class GRAYLIB_LINK cECPGroupMgr : public cSingleton<cECPGroupMgr>
60  {
63 
64  private:
66 
67  public:
68  cECPGroupMgr();
69  ~cECPGroupMgr();
70 
72  {
74  for (int i = 0; i < m_a.GetSize(); i++)
75  {
76  const cECPGroupDef* pGroupDef = m_a[i];
77  if (pGroupDef->get_HashCode() == e)
78  return pGroupDef;
79  }
80  return nullptr;
81  }
82 
84  {
87  return m_a.GetData();
88  }
89 
90  void AddECPGroupDef(const cECPGroupDef* pDef)
91  {
92  ASSERT(pDef != nullptr);
93  ASSERT(GetECPGroupDef(pDef->get_HashCode()) == nullptr); // not already here.
94  m_a.Add(pDef);
95  }
96 
97  // Load each using manual linkage reference for static library. Allows apps to not include stuff they don't want/use
98 #define ECPGROUPTYPEDEF(a,b,c,d,e) static const cECPGroupDef* Load_##a();
99 #include "cECPGroupTypes.tbl"
100 #undef ECPGROUPTYPEDEF
101 
102  void LoadAllECPGroupDefs();
103  static ECPGroup_TYPE GRAYCALL FindMatchECPGroupId(const cECPGroupParams& g);
104  };
105 }
106 
107 #endif
#define GRAYCALL
declare calling convention for static functions so everyone knows the arg passing scheme....
Definition: GrayCore.h:36
#define GRAYLIB_LINK
Definition: GrayLibBase.h:35
Using X files without the sources and the makefile How to use you just create a debug directory e g
Definition: Readme.txt:21
#define UNREFERENCED_REFERENCE(x)
Definition: SysTypes.h:318
INT32 HRESULT
_WIN32 style error codes. INT32
Definition: SysTypes.h:465
#define ASSERT(exp)
Definition: cDebugAssert.h:87
Definition: cBigInteger.h:18
unsigned int BLOCK_ENUM_t
Type for the index of a BLOCK_t in the array. NOT bits BIT_ENUM_t.
Definition: cBitArray.h:78
UINT32 BLOCK_t
The biggest unsigned type I can do atomic math on for this architecture.
Definition: cBitArray.h:46
Definition: cECPGroupDef.h:21
ECPGroup_TYPE get_HashCode() const noexcept
Definition: cECPGroupDef.h:41
virtual void InjectParams(cECPGroupParams &g) const =0
cECPGroupDef(ECPGroup_TYPE eECPGroupId=ECPGroup_NONE, const char *pszName="") noexcept
Definition: cECPGroupDef.h:35
const char * m_pszName
Human-friendly name.
Definition: cECPGroupDef.h:29
virtual HRESULT ModP(OUT cBigInteger &N) const
Definition: cECPGroupDef.h:46
UNITTEST_FRIEND(cECPGroupDef)
ECPGroup_TYPE m_eECPGroupId
cECPGroupMgr TLS predefined NamedCurve identifier from TLS_EXT_supported_groups
Definition: cECPGroupDef.h:28
Definition: cECPGroupDef.h:60
void AddECPGroupDef(const cECPGroupDef *pDef)
Definition: cECPGroupDef.h:90
const cECPGroupDef * GetECPGroupDef(ECPGroup_TYPE e) const
Definition: cECPGroupDef.h:71
const cECPGroupDef ** GetECPGroupDefs(void)
Definition: cECPGroupDef.h:83
Definition: cECPGroupParams.h:105
ITERATE_t Add(ARG_TYPE newElement)
Definition: cArray.h:199
ITERATE_t GetSize() const noexcept
Definition: cArray.h:137
const TYPE * GetData() const
Definition: cArray.h:181
Definition: cArray.h:864
Definition: cSingleton.h:127
Definition: cMesh.h:22
ECPGroup_TYPE
Definition: cECPGroupParams.h:28
UNITTEST2_PREDEF(cQuadtree)
unsigned int BIT_ENUM_t
Enumerate number of bits or address a single bit in some array of bits.
Definition: cBits.h:20