6 #ifndef _INC_cECPGroupParams_H
7 #define _INC_cECPGroupParams_H
12 #include "../Math/cBigInteger.h"
35 #define ECPGROUPTYPEDEF(a,b,c,d,e) ECPGroup_##a = c,
37 #undef ECPGROUPTYPEDEF
86 bool IsMatchParams(
const cECPPoint& ref)
const;
87 void SetPointNormal();
91 bool SetPointFromStr(
RADIX_t radix,
const char* x,
const char* y);
93 HRESULT WritePointBinary(BYTE* pBuf,
size_t nSizeBuffer,
size_t nSizeP,
bool bCompressed)
const;
95 HRESULT WritePointLen(BYTE* pBuf,
size_t nSizeBuffer,
size_t nSizeP,
bool bCompressed)
const;
97 HRESULT ReadPointBinary(
size_t nSizeP,
const BYTE* pBuf,
size_t nSizeBuffer);
99 HRESULT ReadPointLen(
size_t nSizeP,
const BYTE* pBuf,
size_t nSizeBuffer);
117 static const WORD k_ECP_MAX_BITS = 521;
121 static const WORD k_COMB_MAX_D = (k_ECP_MAX_BITS + 1) / 2;
160 while (N.isNegative())
162 N.InitAdd(N, this->m_P);
169 while (N.Compare(this->m_P) >= 0)
171 N.InitSubU(N, this->m_P);
180 HRESULT SetCopyECP(
const THIS_t& rSrc);
181 void SetEmptyECPGroup();
184 HRESULT SetECPGroupFromStr(
RADIX_t radix,
const char* p,
const char* b,
const char* gx,
const char* gy,
const char* n);
185 HRESULT ReadBigIntECDSA(OUT
cBigInteger& x,
const BYTE* buf,
size_t nSizeBuffer)
const;
#define GRAYLIB_LINK
Definition: GrayLibBase.h:35
INT32 HRESULT
_WIN32 style error codes. INT32
Definition: SysTypes.h:465
#define GETSIZEBYTES(nBits)
Definition: cASNReader.h:22
Definition: cBigInteger.h:18
void SetNullVal()
Definition: cBigInteger.h:224
bool IsEqual(const THIS_t &x) const
Definition: cBigInteger.h:112
Definition: cBigUnsigned.h:22
bool isZero() const
Definition: cBigUnsigned.h:82
bool isNullVal() const noexcept
Definition: cBitArray.h:218
size_t get_BinarySize() const
Definition: cBitArray.h:688
Definition: cECPGroupParams.h:105
cBigInteger m_N
Definition: cECPGroupParams.h:131
cBigInteger m_A
Definition: cECPGroupParams.h:126
void DoModPLo(OUT cBigInteger &N) const
Definition: cECPGroupParams.h:156
cBigInteger m_B
Definition: cECPGroupParams.h:127
cBigInteger m_P
prime modulus of the base field
Definition: cECPGroupParams.h:123
static const char * k_pszPEM
"EC PARAMETERS"
Definition: cECPGroupParams.h:115
BIT_ENUM_t m_nPBits
number of used bits in P. m_P.get_Highest1Bit();
Definition: cECPGroupParams.h:124
cECPGroupParams()
Definition: cECPGroupParams.h:135
ECP_CurveType_t get_ECP_CurveType() const
Definition: cECPGroupParams.h:141
cECPPoint m_G
generator of the (sub)group used
Definition: cECPGroupParams.h:129
void DoModPHi(OUT cBigInteger &N) const
Definition: cECPGroupParams.h:165
BIT_ENUM_t m_nNBits
number of used bits get_Highest1Bit() in 1. m_N, or 2. private keys
Definition: cECPGroupParams.h:132
size_t get_SizeP() const
Definition: cECPGroupParams.h:151
Definition: cECPGroupParams.h:41
bool isZeroPoint() const
Definition: cECPGroupParams.h:80
~cECPPoint()
Definition: cECPGroupParams.h:58
cECPPoint()
Definition: cECPGroupParams.h:55
void SetEmptyPoint()
Definition: cECPGroupParams.h:62
cBigInteger m_X
the point's X coordinate
Definition: cECPGroupParams.h:50
cBigInteger m_Y
the point's Y coordinate
Definition: cECPGroupParams.h:51
bool IsEqualPoint(const cECPPoint &ref) const
Definition: cECPGroupParams.h:69
cBigInteger m_Z
the point's Z coordinate. Z == 0 or Z == 1
Definition: cECPGroupParams.h:52
ECPGroup_TYPE
Definition: cECPGroupParams.h:28
ECP_CurveType_t
Definition: cECPGroupParams.h:19
@ ECP_CurveType_SHORT_WEIERSTRASS
Definition: cECPGroupParams.h:23
@ ECP_CurveType_MONTGOMERY
Definition: cECPGroupParams.h:24
@ ECP_CurveType_NONE
Definition: cECPGroupParams.h:22
WORD RADIX_t
Base for convert of numbers to strings. e.g. 10 base vs 16 base hex numbers.
Definition: StrChar.h:27
unsigned int BIT_ENUM_t
Enumerate number of bits or address a single bit in some array of bits.
Definition: cBits.h:20