AusweisApp2
SecurityProtocol.h
gehe zur Dokumentation dieser Datei
1 
5 #pragma once
6 
7 #include "EnumHelper.h"
8 #include "asn1/Oid.h"
9 
10 #include <QByteArray>
11 #include <QCryptographicHash>
12 #include <QMap>
13 #include <openssl/evp.h>
14 
15 #include <optional>
16 
17 
18 namespace governikus
19 {
20 
21 defineEnumType(ProtocolType, UNDEFINED, TA, CA, PACE, RI)
22 defineEnumType(KeyAgreementType, UNDEFINED, DH, ECDH)
23 defineEnumType(MappingType, UNDEFINED, GM, IM, CAM)
25 defineEnumType(SignatureType, UNDEFINED, RSA, ECDSA)
26 
27 class SecurityProtocol
28 {
29  private:
30  static const QMap<char, ProtocolType> cProtocol;
31  static const QMap<char, KeyAgreementType> cKeyAgreement;
32  static const QMap<char, MappingType> cMapping;
33  static const QMap<char, CipherType> cCipher;
34  static const QMap<char, SignatureType> cSignature;
35  static const QMap<char, std::optional<QCryptographicHash::Algorithm>> cHashAlgorithm;
36  static const QMap<char, std::optional<QCryptographicHash::Algorithm>> cRsaHashAlgorithm;
37 
38  const Oid mOid;
39 
40  ProtocolType mProtocol;
41  KeyAgreementType mKeyAgreement;
42  MappingType mMapping;
43  CipherType mCipher;
44  SignatureType mSignature;
45  std::optional<QCryptographicHash::Algorithm> mHashAlgorithm;
46 
47  public:
48  explicit SecurityProtocol(const Oid& pOid);
49 
50  [[nodiscard]] const Oid& getOid() const;
51  [[nodiscard]] ProtocolType getProtocol() const;
52  [[nodiscard]] KeyAgreementType getKeyAgreement() const;
53  [[nodiscard]] MappingType getMapping() const;
54  [[nodiscard]] const EVP_CIPHER* getCipher() const;
55  [[nodiscard]] const char* getCipherString() const;
56  [[nodiscard]] int getKeySize() const;
57  [[nodiscard]] SignatureType getSignature() const;
58  [[nodiscard]] QCryptographicHash::Algorithm getHashAlgorithm() const;
59 
60  bool operator==(const SecurityProtocol& pOther) const;
61 };
62 
63 
64 inline QDebug operator<<(QDebug pDbg, const SecurityProtocol& pProtocol)
65 {
66  QDebugStateSaver saver(pDbg);
67  pDbg.nospace() << QByteArray(pProtocol.getOid());
68  return pDbg.space();
69 }
70 
71 
72 } // namespace governikus
Implementation of GeneralAuthenticate response APDUs.
Definition: CommandApdu.h:16
UNDEFINED
Definition: SecurityProtocol.h:22
ECDH AES_128_CBC
Definition: SecurityProtocol.h:24
Oid getOid() const
defineEnumType(KnownOid, ID_SIGNED_DATA, EC_PS_PUBLICKEY, STANDARDIZED_DOMAINPARAMETERS, BSI_DE_PROTOCOLS_SMARTCARD, ID_PK, ID_PK_DH, ID_PK_ECDH, ID_PS_PK, ID_PS_PK_ECDH_ESCHNORR, ID_TA, ID_TA_RSA, ID_TA_RSA_V1_5_SHA_1, ID_TA_RSA_V1_5_SHA_256, ID_TA_RSA_PSS_SHA_1, ID_TA_RSA_PSS_SHA_256, ID_TA_RSA_V1_5_SHA_512, ID_TA_RSA_PSS_SHA_512, ID_TA_ECDSA, ID_TA_ECDSA_SHA_1, ID_TA_ECDSA_SHA_224, ID_TA_ECDSA_SHA_256, ID_TA_ECDSA_SHA_384, ID_TA_ECDSA_SHA_512, ID_CA, ID_CA_DH, ID_CA_DH_3DES_CBC_CBC, ID_CA_DH_AES_CBC_CMAC_128, ID_CA_DH_AES_CBC_CMAC_192, ID_CA_DH_AES_CBC_CMAC_256, ID_CA_ECDH, ID_CA_ECDH_3DES_CBC_CBC, ID_CA_ECDH_AES_CBC_CMAC_128, ID_CA_ECDH_AES_CBC_CMAC_192, ID_CA_ECDH_AES_CBC_CMAC_256, ID_PACE, ID_PACE_DH_GM, ID_PACE_DH_GM_3DES_CBC_CBC, ID_PACE_DH_GM_AES_CBC_CMAC_128, ID_PACE_DH_GM_AES_CBC_CMAC_192, ID_PACE_DH_GM_AES_CBC_CMAC_256, ID_PACE_ECDH_GM, ID_PACE_ECDH_GM_3DES_CBC_CBC, ID_PACE_ECDH_GM_AES_CBC_CMAC_128, ID_PACE_ECDH_GM_AES_CBC_CMAC_192, ID_PACE_ECDH_GM_AES_CBC_CMAC_256, ID_PACE_DH_IM, ID_PACE_DH_IM_3DES_CBC_CBC, ID_PACE_DH_IM_AES_CBC_CMAC_128, ID_PACE_DH_IM_AES_CBC_CMAC_192, ID_PACE_DH_IM_AES_CBC_CMAC_256, ID_PACE_ECDH_IM, ID_PACE_ECDH_IM_3DES_CBC_CBC, ID_PACE_ECDH_IM_AES_CBC_CMAC_128, ID_PACE_ECDH_IM_AES_CBC_CMAC_192, ID_PACE_ECDH_IM_AES_CBC_CMAC_256, ID_PACE_ECDH_CAM, ID_PACE_ECDH_CAM_AES_CBC_CMAC_128, ID_PACE_ECDH_CAM_AES_CBC_CMAC_192, ID_PACE_ECDH_CAM_AES_CBC_CMAC_256, ID_RI, ID_RI_DH, ID_RI_DH_SHA_1, ID_RI_DH_SHA_224, ID_RI_DH_SHA_256, ID_RI_DH_SHA_384, ID_RI_DH_SHA_512, ID_RI_ECDH, ID_RI_ECDH_SHA_1, ID_RI_ECDH_SHA_224, ID_RI_ECDH_SHA_256, ID_RI_ECDH_SHA_384, ID_RI_ECDH_SHA_512, ID_CI, ID_EID_SECURITY, ID_PT, ID_PS, ID_PSA, ID_PSA_ECDH_ECSCHNORR, ID_PSA_ECDH_ECSCHNORR_SHA_256, ID_PSA_ECDH_ECSCHNORR_SHA_384, ID_PSA_ECDH_ECSCHNORR_SHA_512, ID_PASSWORDTYPE, ID_PASSWORDTYPE_MRZ, ID_PASSWORDTYPE_CAN, ID_PASSWORDTYPE_PIN, ID_PASSWORDTYPE_PUK, ID_AUXILIARY_DATA, ID_DATE_OF_BIRTH, ID_DATE_OF_EXPIRY, ID_MUNICIPALITY_ID, ID_PSM_MESSAGE, ID_SECURITY_OBJECT, ID_ROLES, ID_IS, ID_AT, ID_ST, ID_EXTENSIONS, ID_DESCRIPTION, ID_PLAIN_FORMAT, ID_HTML_FORMAT, ID_PFD_FORMAT, ID_SECTOR, ID_EID_TYPE, ID_CARD_EID_TYPE, ID_MOBILE_EID_TYPE, ID_MOBILE_EID_TYPE_SE_CERTIFIED, ID_MOBILE_EID_TYPE_SE_ENDORSED, ID_MOBILE_EID_TYPE_HW_KEYSTORE) class Oid
Definition: Oid.h:21
ECDH DES3_CBC
Definition: SecurityProtocol.h:24
DH
Definition: SecurityProtocol.h:22
ECDH AES_192_CBC
Definition: SecurityProtocol.h:24
QCryptographicHash::Algorithm getHashAlgorithm() const
Definition: CVCertificateBody.cpp:177
SIGNATURE * mSignature
Definition: CVCertificate.h:48
QDebug operator<<(QDebug pDbg, const CommandApdu &pCommandApdu)
Definition: CommandApdu.h:94
bool operator==(const CommandApdu &pLeft, const CommandApdu &pRight)
Definition: CommandApdu.h:105