/*! * \copyright Copyright (c) 2014 Governikus GmbH & Co. KG */ #pragma once #include "asn1/SecurityInfo.h" #include "CardConnectionWorker.h" #include "pace/DomainParameterMapping.h" #include "pace/KeyAgreement.h" #include #include class test_EcdhKeyAgreement; namespace governikus { class EcdhKeyAgreement : public KeyAgreement { private: friend class ::test_EcdhKeyAgreement; QSharedPointer > mMapping; QSharedPointer mEphemeralCurve; QSharedPointer mTerminalPublicKey; QSharedPointer mCardPublicKey; QSharedPointer determineEphemeralDomainParameters(const QByteArray& pNonce); QSharedPointer performKeyExchange(const QSharedPointer& pCurve); static QByteArray encodeUncompressedPublicKey(const QSharedPointer& pPaceInfo, const QSharedPointer& pCurve, const QSharedPointer& pPoint); static QByteArray encodeCompressedPublicKey(const QSharedPointer& pCurve, const QSharedPointer& pPoint); QByteArray determineSharedSecret(const QByteArray& pNonce) override; QByteArray getUncompressedTerminalPublicKey() override; QByteArray getUncompressedCardPublicKey() override; QByteArray getCompressedCardPublicKey() override; EcdhKeyAgreement(const QSharedPointer& pPaceInfo, const QSharedPointer& pCardConnectionWorker); public: static QSharedPointer create(const QSharedPointer& pPaceInfo, const QSharedPointer& pCardConnectionWorker); virtual ~EcdhKeyAgreement(); }; } /* namespace governikus */