AusweisApp2/src/card/base/pace/ec/EcdhKeyAgreement.h

52 lines
1.7 KiB
C
Raw Normal View History

2017-07-03 09:30:10 +02:00
/*!
* \copyright Copyright (c) 2014 Governikus GmbH & Co. KG
*/
#pragma once
#include "asn1/SecurityInfo.h"
2017-09-15 10:23:30 +02:00
#include "CardConnectionWorker.h"
2017-07-03 09:30:10 +02:00
#include "pace/DomainParameterMapping.h"
#include "pace/KeyAgreement.h"
#include <openssl/ec.h>
2017-09-15 10:23:30 +02:00
#include <QSharedPointer>
2017-07-03 09:30:10 +02:00
class test_EcdhKeyAgreement;
namespace governikus
{
class EcdhKeyAgreement
: public KeyAgreement
{
private:
2017-09-15 10:23:30 +02:00
friend class ::test_EcdhKeyAgreement;
2017-07-03 09:30:10 +02:00
QSharedPointer<DomainParameterMapping<EC_GROUP> > mMapping;
QSharedPointer<EC_GROUP> mEphemeralCurve;
QSharedPointer<EC_POINT> mTerminalPublicKey;
QSharedPointer<EC_POINT> mCardPublicKey;
QSharedPointer<EC_GROUP> determineEphemeralDomainParameters(const QByteArray& pNonce);
2017-07-03 09:33:28 +02:00
QSharedPointer<EC_POINT> performKeyExchange(const QSharedPointer<const EC_GROUP>& pCurve);
2017-07-03 09:30:10 +02:00
2017-07-03 09:33:28 +02:00
static QByteArray encodeUncompressedPublicKey(const QSharedPointer<const PACEInfo>& pPaceInfo, const QSharedPointer<const EC_GROUP>& pCurve, const QSharedPointer<const EC_POINT>& pPoint);
static QByteArray encodeCompressedPublicKey(const QSharedPointer<const EC_GROUP>& pCurve, const QSharedPointer<const EC_POINT>& pPoint);
2017-07-03 09:30:10 +02:00
QByteArray determineSharedSecret(const QByteArray& pNonce) override;
QByteArray getUncompressedTerminalPublicKey() override;
QByteArray getUncompressedCardPublicKey() override;
QByteArray getCompressedCardPublicKey() override;
2017-07-03 09:33:28 +02:00
EcdhKeyAgreement(const QSharedPointer<const PACEInfo>& pPaceInfo, const QSharedPointer<CardConnectionWorker>& pCardConnectionWorker);
2017-07-03 09:30:10 +02:00
public:
2017-07-03 09:33:28 +02:00
static QSharedPointer<KeyAgreement> create(const QSharedPointer<const PACEInfo>& pPaceInfo,
const QSharedPointer<CardConnectionWorker>& pCardConnectionWorker);
2017-07-03 09:30:10 +02:00
virtual ~EcdhKeyAgreement();
};
} /* namespace governikus */