52 lines
1.7 KiB
C++
52 lines
1.7 KiB
C++
/*!
|
|
* \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 <openssl/ec.h>
|
|
#include <QSharedPointer>
|
|
|
|
class test_EcdhKeyAgreement;
|
|
|
|
namespace governikus
|
|
{
|
|
|
|
class EcdhKeyAgreement
|
|
: public KeyAgreement
|
|
{
|
|
private:
|
|
friend class ::test_EcdhKeyAgreement;
|
|
|
|
QSharedPointer<DomainParameterMapping<EC_GROUP> > mMapping;
|
|
QSharedPointer<EC_GROUP> mEphemeralCurve;
|
|
QSharedPointer<EC_POINT> mTerminalPublicKey;
|
|
QSharedPointer<EC_POINT> mCardPublicKey;
|
|
|
|
QSharedPointer<EC_GROUP> determineEphemeralDomainParameters(const QByteArray& pNonce);
|
|
QSharedPointer<EC_POINT> performKeyExchange(const QSharedPointer<const EC_GROUP>& pCurve);
|
|
|
|
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);
|
|
|
|
QByteArray determineSharedSecret(const QByteArray& pNonce) override;
|
|
QByteArray getUncompressedTerminalPublicKey() override;
|
|
QByteArray getUncompressedCardPublicKey() override;
|
|
QByteArray getCompressedCardPublicKey() override;
|
|
|
|
EcdhKeyAgreement(const QSharedPointer<const PACEInfo>& pPaceInfo, const QSharedPointer<CardConnectionWorker>& pCardConnectionWorker);
|
|
|
|
public:
|
|
static QSharedPointer<KeyAgreement> create(const QSharedPointer<const PACEInfo>& pPaceInfo,
|
|
const QSharedPointer<CardConnectionWorker>& pCardConnectionWorker);
|
|
|
|
virtual ~EcdhKeyAgreement();
|
|
};
|
|
|
|
} /* namespace governikus */
|