AusweisApp
Lade ...
Suche ...
Keine Treffer
EcdsaPublicKey.h
gehe zur Dokumentation dieser Datei
1
5#pragma once
6
7#include "ASN1TemplateUtil.h"
8#include "SecurityProtocol.h"
9
10#include <QByteArray>
11#include <QSharedPointer>
12
13#include <openssl/asn1t.h>
14#include <openssl/evp.h>
15
16#include <openssl/ec.h>
17
18
19namespace governikus
20{
21
42using EcdsaPublicKey = struct ecdsapublickey_st
43{
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;
52
53 static QSharedPointer<ecdsapublickey_st> fromHex(const QByteArray& pHexValue);
54 static QSharedPointer<ecdsapublickey_st> decode(const QByteArray& pBytes);
55 QByteArray encode();
56
57 [[nodiscard]] bool isComplete() const;
58 [[nodiscard]] SecurityProtocol getSecurityProtocol() const;
59
63 [[nodiscard]] Oid getOid() const;
64 [[nodiscard]] QByteArray getUncompressedPublicPoint() const;
65
72 [[nodiscard]] QSharedPointer<EVP_PKEY> createKey(const QByteArray& pPublicPoint) const;
73
74#ifndef QT_NO_DEBUG
75
81 [[nodiscard]] QSharedPointer<EVP_PKEY> createKey() const;
82#endif
83
84 private:
85 struct CurveData
86 {
87 QSharedPointer<BIGNUM> p;
88 QSharedPointer<BIGNUM> a;
89 QSharedPointer<BIGNUM> b;
90 QSharedPointer<BIGNUM> order;
91 QSharedPointer<BIGNUM> cofactor;
92
93 [[nodiscard]] bool isValid() const
94 {
95 return !p.isNull() && !a.isNull() && !b.isNull() && !order.isNull();
96 }
97
98
99 };
100
101 [[nodiscard]] static bool isAllValid(const ecdsapublickey_st* pKey);
102 [[nodiscard]] static bool isAllInvalid(const ecdsapublickey_st* pKey);
103
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;
107
108 public:
109 static int decodeCallback(int pOperation, ASN1_VALUE** pVal, const ASN1_ITEM* pIt, void* pExarg);
110};
111
112
113DECLARE_ASN1_FUNCTIONS(EcdsaPublicKey)
115
116} // namespace governikus
#define DECLARE_ASN1_OBJECT(name)
Definition: ASN1TemplateUtil.h:178
QByteArray fromHex(const std::string &pString)
Definition: SmartManager.cpp:41
Implementation of GeneralAuthenticate response APDUs.
Definition: CommandApdu.h:16
ASN1_OCTET_STRING * mPrimeModulus
Definition: EcdsaPublicKey.h:45
ASN1_OCTET_STRING * mSecondCoefficient
Definition: EcdsaPublicKey.h:47
ASN1_OCTET_STRING * mBasePoint
Definition: EcdsaPublicKey.h:48
Oid getOid() const
ASN1_OCTET_STRING * mCofactor
Definition: EcdsaPublicKey.h:51
bool isComplete() const
Definition: EcdsaPublicKey.cpp:97
SecurityProtocol getSecurityProtocol() const
Definition: EcdsaPublicKey.cpp:121
ASN1_OCTET_STRING * mOrderOfTheBasePoint
Definition: EcdsaPublicKey.h:49
ASN1_OCTET_STRING * mFirstCoefficient
Definition: EcdsaPublicKey.h:46
QByteArray encode() const
ASN1_OCTET_STRING * mPublicPoint
Definition: EcdsaPublicKey.h:50
QSharedPointer< EVP_PKEY > createKey(const QByteArray &pPublicPoint) const
ecdsapublickey_st { ASN1_OBJECT *mObjectIdentifier EcdsaPublicKey
According to TR-03110-3 chapter D elliptic curve public keys are defined as follows:
Definition: EcdsaPublicKey.h:44
QByteArray getUncompressedPublicPoint() const
Definition: EcdsaPublicKey.cpp:133