44 ASN1_OBJECT* mObjectIdentifier;
45 ASN1_OCTET_STRING* mPrimeModulus;
46 ASN1_OCTET_STRING* mFirstCoefficient;
47 ASN1_OCTET_STRING* mSecondCoefficient;
48 ASN1_OCTET_STRING* mBasePoint;
49 ASN1_OCTET_STRING* mOrderOfTheBasePoint;
50 ASN1_OCTET_STRING* mPublicPoint;
51 ASN1_OCTET_STRING* mCofactor;
53 static QSharedPointer<ecdsapublickey_st>
fromHex(
const QByteArray& pHexValue);
54 static QSharedPointer<ecdsapublickey_st> decode(
const QByteArray& pBytes);
57 [[nodiscard]]
bool isComplete()
const;
58 [[nodiscard]] SecurityProtocol getSecurityProtocol()
const;
63 [[nodiscard]] Oid getOid()
const;
64 [[nodiscard]] QByteArray getUncompressedPublicPoint()
const;
72 [[nodiscard]] QSharedPointer<EVP_PKEY> createKey(
const QByteArray& pPublicPoint)
const;
81 [[nodiscard]] QSharedPointer<EVP_PKEY> createKey()
const;
87 QSharedPointer<BIGNUM> p;
88 QSharedPointer<BIGNUM> a;
89 QSharedPointer<BIGNUM> b;
90 QSharedPointer<BIGNUM> order;
91 QSharedPointer<BIGNUM> cofactor;
93 [[nodiscard]]
bool isValid()
const
95 return !p.isNull() && !a.isNull() && !b.isNull() && !order.isNull();
101 [[nodiscard]]
static bool isAllValid(
const ecdsapublickey_st* pKey);
102 [[nodiscard]]
static bool isAllInvalid(
const ecdsapublickey_st* pKey);
104 [[nodiscard]] CurveData createCurveData()
const;
105 [[nodiscard]] QSharedPointer<EVP_PKEY> createKey(
const uchar* pPublicPoint,
int pPublicPointLength)
const;
106 [[nodiscard]] QSharedPointer<EC_GROUP> createGroup(
const CurveData& pData)
const;
109 static int decodeCallback(
int pOperation, ASN1_VALUE** pVal,
const ASN1_ITEM* pIt,
void* pExarg);
struct ecdsapublickey_st { ASN1_OBJECT *mObjectIdentifier; ASN1_OCTET_STRING *mPrimeModulus; ASN1_OCTET_STRING *mFirstCoefficient; ASN1_OCTET_STRING *mSecondCoefficient; ASN1_OCTET_STRING *mBasePoint; ASN1_OCTET_STRING *mOrderOfTheBasePoint; ASN1_OCTET_STRING *mPublicPoint; ASN1_OCTET_STRING *mCofactor; static QSharedPointer< ecdsapublickey_st > fromHex(const QByteArray &pHexValue); static QSharedPointer< ecdsapublickey_st > decode(const QByteArray &pBytes); QByteArray encode();[[nodiscard]] bool isComplete() const ;[[nodiscard]] SecurityProtocol getSecurityProtocol() const ;[[nodiscard]] Oid getOid() const ;[[nodiscard]] QByteArray getUncompressedPublicPoint() const ;[[nodiscard]] QSharedPointer< EVP_PKEY > createKey(const QByteArray &pPublicPoint) const ;[[nodiscard]] QSharedPointer< EVP_PKEY > createKey() const ; private: struct CurveData { QSharedPointer< BIGNUM > p; QSharedPointer< BIGNUM > a; QSharedPointer< BIGNUM > b; QSharedPointer< BIGNUM > order; QSharedPointer< BIGNUM > cofactor;[[nodiscard]] bool isValid() const { return !p.isNull() &&!a.isNull() &&!b.isNull() &&!order.isNull(); } };[[nodiscard]] static bool isAllValid(const ecdsapublickey_st *pKey);[[nodiscard]] static bool isAllInvalid(const ecdsapublickey_st *pKey);[[nodiscard]] CurveData createCurveData() const ;[[nodiscard]] QSharedPointer< EVP_PKEY > createKey(const uchar *pPublicPoint, int pPublicPointLength) const ;[[nodiscard]] QSharedPointer< EC_GROUP > createGroup(const CurveData &pData) const ; public: static int decodeCallback(int pOperation, ASN1_VALUE **pVal, const ASN1_ITEM *pIt, void *pExarg);} EcdsaPublicKey
According to TR-03110-3 chapter D elliptic curve public keys are defined as follows:
Definition EcdsaPublicKey.h:42