AusweisApp2/src/card/base/GeneralAuthenticateResponse.h

183 lines
4.2 KiB
C++

/*!
* GeneralAuthenticateResponse.h
*
* \brief Implementation of GeneralAuthenticate response APDUs.
*
* \copyright Copyright (c) 2015 Governikus GmbH & Co. KG
*/
#pragma once
#include "asn1/ASN1TemplateUtil.h"
#include "Apdu.h"
namespace governikus
{
class GAResponseApdu
: public ResponseApdu
{
private:
virtual void parseDynamicAuthenticationData(const QByteArray& pDynamicAuthenticationData) = 0;
public:
GAResponseApdu();
virtual ~GAResponseApdu();
virtual void setBuffer(const QByteArray& pBuffer) override;
};
/*!
* According to TR-03110-3 the ASN.1 the response APDU has
* one protocol specific data:
*
* EncryptedNonce ::= APPLICATION [0x00] IMPLICIT OCTET_STRING
*/
typedef struct ga_encryptednoncedata_st
{
ASN1_OCTET_STRING* mEncryptedNonce;
} GA_ENCRYPTEDNONCEDATA;
DECLARE_ASN1_OBJECT(GA_ENCRYPTEDNONCEDATA)
class GAEncryptedNonceResponse
: public GAResponseApdu
{
private:
virtual void parseDynamicAuthenticationData(const QByteArray& pDynamicAuthenticationData) override;
QByteArray mEncryptedNonce;
public:
GAEncryptedNonceResponse();
virtual ~GAEncryptedNonceResponse();
const QByteArray& getEncryptedNonce();
};
/*!
* According to TR-03110-3 the ASN.1 the response APDU has
* one protocol specific data:
*
* MappingData ::= APPLICATION [0x02] IMPLICIT OCTET_STRING
*/
typedef struct ga_mapnoncedata_st
{
ASN1_OCTET_STRING* mMappingData;
} GA_MAPNONCEDATA;
DECLARE_ASN1_OBJECT(GA_MAPNONCEDATA)
class GAMapNonceResponse
: public GAResponseApdu
{
private:
virtual void parseDynamicAuthenticationData(const QByteArray& pDynamicAuthenticationData) override;
QByteArray mMappingData;
public:
GAMapNonceResponse();
virtual ~GAMapNonceResponse();
const QByteArray& getMappingData();
};
/*!
* According to TR-03110-3 the ASN.1 the response APDU has
* one protocol specific data:
*
* EphemeralPublicKey ::= APPLICATION [0x04] IMPLICIT OCTET_STRING
*/
typedef struct ga_performkeyagreementdata_st
{
ASN1_OCTET_STRING* mEphemeralPublicKey;
} GA_PERFORMKEYAGREEMENTDATA;
DECLARE_ASN1_OBJECT(GA_PERFORMKEYAGREEMENTDATA)
class GAPerformKeyAgreementResponse
: public GAResponseApdu
{
private:
virtual void parseDynamicAuthenticationData(const QByteArray& pDynamicAuthenticationData) override;
QByteArray mEphemeralPublicKey;
public:
GAPerformKeyAgreementResponse();
virtual ~GAPerformKeyAgreementResponse();
const QByteArray& getEphemeralPublicKey();
};
/*!
* According to TR-03110-3 the ASN.1 the response APDU has
* three protocol specific data:
*
* AuthenticationToken ::= APPLICATION [0x00] IMPLICIT OCTET_STRING
* CarCurr ::= APPLICATION [0x00] IMPLICIT OCTET_STRING OPTIONAL
* CarPrev ::= APPLICATION [0x00] IMPLICIT OCTET_STRING OPTIONAL
*/
typedef struct ga_mutualauthenticationdata_st
{
ASN1_OCTET_STRING* mAuthenticationToken;
ASN1_OCTET_STRING* mCarCurr;
ASN1_OCTET_STRING* mCarPrev;
} GA_MUTUALAUTHENTICATIONDATA;
DECLARE_ASN1_OBJECT(GA_MUTUALAUTHENTICATIONDATA)
class GAMutualAuthenticationResponse
: public GAResponseApdu
{
private:
virtual void parseDynamicAuthenticationData(const QByteArray& pDynamicAuthenticationData) override;
QByteArray mAuthenticationToken, mCarCurr, mCarPrev;
public:
GAMutualAuthenticationResponse();
virtual ~GAMutualAuthenticationResponse();
const QByteArray& getAuthenticationToken();
const QByteArray& getCarCurr();
const QByteArray& getCarPrev();
};
/*!
* According to TR-03110-3 the ASN.1 the response APDU has
* three protocol specific data:
*
* Nonce ::= APPLICATION [0x01] IMPLICIT OCTET_STRING
* AuthenticationToken ::= APPLICATION [0x02] IMPLICIT OCTET_STRING
*/
typedef struct ga_chipauthenticationdata_st
{
ASN1_OCTET_STRING* mNonce;
ASN1_OCTET_STRING* mAuthenticationToken;
} GA_CHIPAUTHENTICATIONDATA;
DECLARE_ASN1_OBJECT(GA_CHIPAUTHENTICATIONDATA)
class GAChipAuthenticationResponse
: public GAResponseApdu
{
private:
virtual void parseDynamicAuthenticationData(const QByteArray& pDynamicAuthenticationData) override;
QByteArray mNonce, mAuthenticationToken;
public:
GAChipAuthenticationResponse();
virtual ~GAChipAuthenticationResponse();
const QByteArray& getNonce();
const QByteArray& getAuthenticationToken();
};
} // namespace governikus