1 /*!
2  * \copyright Copyright (c) 2014-2021 Governikus GmbH & Co. KG, Germany
3  */
4 
5 #pragma once
6 
7 #include <QByteArray>
8 
9 namespace governikus
10 {
11 
12 namespace KnownOIDs
13 {
14 enum class Base
15 {
16 	BSI_DE,
17 	SIGNED_DATA,
18 	ID_SECURITY_OBJECT,
19 	ID_EXTENSIONS
20 };
21 
22 enum class CertificateExtensions
23 {
24 	ID_DESCRIPTION,
25 	ID_SECTOR
26 };
27 
28 enum class TermsOfUsageType
29 {
30 	ID_PLAIN_FORMAT,
31 	ID_HTML_FORMAT,
32 	ID_PDF_FORMAT
33 };
34 
35 enum class CHATType
36 {
37 	ID_IS,
38 	ID_AT,
39 	ID_ST
40 };
41 
42 enum class AuxilaryData
43 {
44 	ID_DATE_OF_BIRTH,
45 	ID_DATE_OF_EXPIRY,
46 	ID_COMMUNITY_ID
47 };
48 
49 enum class SecurityProtocol
50 {
51 	ID_PK,
52 	ID_TA,
53 	ID_CA,
54 	ID_PACE
55 };
56 
57 enum class id_ca
58 {
59 	DH,
60 	DH_3DES_CBC_CBC,
61 	DH_AES_CBC_CMAC_128,
62 	DH_AES_CBC_CMAC_192,
63 	DH_AES_CBC_CMAC_256,
64 	ECDH,
65 	ECDH_3DES_CBC_CBC,
66 	ECDH_AES_CBC_CMAC_128,
67 	ECDH_AES_CBC_CMAC_192,
68 	ECDH_AES_CBC_CMAC_256
69 };
70 
71 enum class id_ta
72 {
73 	ECDSA_SHA_1,
74 	ECDSA_SHA_224,
75 	ECDSA_SHA_256,
76 	ECDSA_SHA_384,
77 	ECDSA_SHA_512
78 };
79 
80 enum class id_pk
81 {
82 	DH,
83 	ECDH
84 };
85 
86 namespace id_PACE
87 {
88 enum class DH
89 {
90 	GM,
91 	GM_3DES_CBC_CBC,
92 	GM_AES_CBC_CMAC_128,
93 	GM_AES_CBC_CMAC_192,
94 	GM_AES_CBC_CMAC_256,
95 	IM,
96 	IM_3DES_CBC_CBC,
97 	IM_AES_CBC_CMAC_128,
98 	IM_AES_CBC_CMAC_192,
99 	IM_AES_CBC_CMAC_256,
100 
101 };
102 
103 enum class ECDH
104 {
105 	GM,
106 	GM_3DES_CBC_CBC,
107 	GM_AES_CBC_CMAC_128,
108 	GM_AES_CBC_CMAC_192,
109 	GM_AES_CBC_CMAC_256,
110 	IM,
111 	IM_3DES_CBC_CBC,
112 	IM_AES_CBC_CMAC_128,
113 	IM_AES_CBC_CMAC_192,
114 	IM_AES_CBC_CMAC_256
115 };
116 
117 }  // namespace KnownOIDs::id_PACE
118 
119 }  // namespace KnownOIDs
120 
121 #define DEFINE_TO_BYTE_ARRAY(type)\
122 	QByteArray toByteArray(type pValue);\
123 \
124 	inline QByteArray operator+(type pEnum, const QByteArray& pValue)\
125 	{\
126 		return toByteArray(pEnum) + pValue;\
127 	}\
128 \
129 	inline bool operator==(const QByteArray& pValue, type pEnum)\
130 	{\
131 		return toByteArray(pEnum) == pValue;\
132 	}\
133 \
134 	inline bool operator!=(const QByteArray& pValue, type pEnum)\
135 	{\
136 		return !(pValue == pEnum);\
137 	}
138 
139 
140 DEFINE_TO_BYTE_ARRAY(KnownOIDs::Base)
141 DEFINE_TO_BYTE_ARRAY(KnownOIDs::CertificateExtensions)
142 DEFINE_TO_BYTE_ARRAY(KnownOIDs::TermsOfUsageType)
143 DEFINE_TO_BYTE_ARRAY(KnownOIDs::CHATType)
144 DEFINE_TO_BYTE_ARRAY(KnownOIDs::AuxilaryData)
145 DEFINE_TO_BYTE_ARRAY(KnownOIDs::SecurityProtocol)
146 DEFINE_TO_BYTE_ARRAY(KnownOIDs::id_ca)
147 DEFINE_TO_BYTE_ARRAY(KnownOIDs::id_ta)
148 DEFINE_TO_BYTE_ARRAY(KnownOIDs::id_pk)
149 DEFINE_TO_BYTE_ARRAY(KnownOIDs::id_PACE::DH)
150 DEFINE_TO_BYTE_ARRAY(KnownOIDs::id_PACE::ECDH)
151 
152 #undef DEFINE_TO_BYTE_ARRAY
153 
154 }  // namespace governikus
155