-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathfitsec_error.h
171 lines (157 loc) · 7.01 KB
/
fitsec_error.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
/*********************************************************************
* This file is a part of FItsSec2 project: Implementation of
* IEEE Std. 1609.2,
* ETSI TS 103 097 v1.3.1,
* ETSI TS 102 941 v1.3.1
* Copyright (C) 2020 Denis Filatov (denis.filatov()fillabs.com)
* This file is NOT a free or open source software and shall not me used
* in any way not explicitly authorized by the author.
*********************************************************************/
#ifndef fitsec_error_h
#define fitsec_error_h
#include <errno.h>
#define FSISERR(X) ((0x1F&(X))?1:0)
#define FSISOK(X) ((0x1F&(X))?0:1)
// events (0..16)
#define FSERR_OK 0
#define FSERR_NOT_IMPLEMENTED 1
#define FSERR_PARSEERROR 2
#define FSERR_NOSPACE 3
#define FSERR_INVALID 4
#define FSERR_UNKNOWN 5
#define FSERR_UNTRUSTED 6
#define FSERR_GEN_ERROR 7
#define FSERR_NOT_YET_VALID 8
#define FSERR_UNSUPPORTED 9
#define FSERR_EVAL_EXPIRED 10
#define FSERR_NOT_FOUND 11
#define FSERR_OTHER 12
// ERROR CODE:
// 0000 0000 0000 0000 0000 0000 0000 0000
// ---- ---- ---- ---- ---- --- container(23 bits)
// - ---- element(5 bits)
// ---- event(4 bits)
#define _FSERR_SIZEOF 32
// elementes
#define FSERR_ELEMENTS_SHIFT 4
enum {
_FSERR_NOT_IMPLEMENTED = 0,
_FSERR_EL_VERSION,
_FSERR_EL_SIZE,
_FSERR_EL_TYPE,
_FSERR_EL_DIGEST,
_FSERR_EL_AID,
_FSERR_EL_SSP,
_FSERR_EL_PK_ALGORITHM,
_FSERR_EL_SYM_ALGORITHM,
_FSERR_EL_NAME,
_FSERR_EL_ASSURANCE_LEVEL,
_FSERR_EL_TIME,
_FSERR_EL_DURATION,
_FSERR_EL_RECONSTRUCTION_VALUE,
_FSERR_EL_P2P_CERTIFICATE_REQUEST,
_FSERR_EL_LOCATION,
_FSERR_EL_LATITUDE,
_FSERR_EL_LONGITUDE,
_FSERR_EL_ECC_POINT,
_FSERR_EL_ROOT,
_FSERR_EL_HASH,
_FSERR_EL_MAC,
_FSERR_EL_CONTRIBUTOR,
_FSERR_EL_ID,
_FSERR_EL_CRL_REQUEST,
_FSERR_EL_CTL_REQUEST,
_FSERR_EL_FITSEC_EXT,
_FSERR_EL_AA,
_FSERR_EL_EA,
_FSERR_EL_EC,
_FSERR_EL_DC,
};
#define FSERR_VERSION (_FSERR_EL_VERSION<<FSERR_ELEMENTS_SHIFT)
#define FSERR_SIZE (_FSERR_EL_SIZE<<FSERR_ELEMENTS_SHIFT)
#define FSERR_TYPE (_FSERR_EL_TYPE<<FSERR_ELEMENTS_SHIFT)
#define FSERR_DIGEST (_FSERR_EL_DIGEST<<FSERR_ELEMENTS_SHIFT)
#define FSERR_AID (_FSERR_EL_AID<<FSERR_ELEMENTS_SHIFT)
#define FSERR_SSP (_FSERR_EL_SSP<<FSERR_ELEMENTS_SHIFT)
#define FSERR_PK_ALGORITHM (_FSERR_EL_PK_ALGORITHM<<FSERR_ELEMENTS_SHIFT)
#define FSERR_SYM_ALGORITHM (_FSERR_EL_SYM_ALGORITHM<<FSERR_ELEMENTS_SHIFT)
#define FSERR_NAME (_FSERR_EL_NAME<<FSERR_ELEMENTS_SHIFT)
#define FSERR_ASSURANCE_LEVEL (_FSERR_EL_ASSURANCE_LEVEL<<FSERR_ELEMENTS_SHIFT)
#define FSERR_TIME (_FSERR_EL_TIME<<FSERR_ELEMENTS_SHIFT)
#define FSERR_DURATION (_FSERR_EL_DURATION<<FSERR_ELEMENTS_SHIFT)
#define FSERR_RECONSTRUCTION_VALUE (_FSERR_EL_RECONSTRUCTION_VALUE<<FSERR_ELEMENTS_SHIFT)
#define FSERR_P2P_CERTIFICATE_REQUEST (_FSERR_EL_P2P_CERTIFICATE_REQUEST<<FSERR_ELEMENTS_SHIFT)
#define FSERR_LOCATION (_FSERR_EL_LOCATION<<FSERR_ELEMENTS_SHIFT)
#define FSERR_LATITUDE (_FSERR_EL_LATITUDE<<FSERR_ELEMENTS_SHIFT)
#define FSERR_LONGITUDE (_FSERR_EL_LONGITUDE<<FSERR_ELEMENTS_SHIFT)
#define FSERR_ECC_POINT (_FSERR_EL_ECC_POINT<<FSERR_ELEMENTS_SHIFT)
#define FSERR_ROOT (_FSERR_EL_ROOT<<FSERR_ELEMENTS_SHIFT)
#define FSERR_HASH (_FSERR_EL_HASH<<FSERR_ELEMENTS_SHIFT)
#define FSERR_MAC (_FSERR_EL_MAC<<FSERR_ELEMENTS_SHIFT)
#define FSERR_CONTRIBUTOR (_FSERR_EL_CONTRIBUTOR<<FSERR_ELEMENTS_SHIFT)
#define FSERR_ID (_FSERR_EL_ID<<FSERR_ELEMENTS_SHIFT)
#define FSERR_CRL_REQUEST (_FSERR_EL_CRL_REQUEST<<FSERR_ELEMENTS_SHIFT)
#define FSERR_CTL_REQUEST (_FSERR_EL_CTL_REQUEST<<FSERR_ELEMENTS_SHIFT)
#define FSERR_FITSEC_EXT (_FSERR_EL_FITSEC_EXT<<FSERR_ELEMENTS_SHIFT)
#define FSERR_DC (_FSERR_EL_DC<<FSERR_ELEMENTS_SHIFT)
#define FSERR_AA (_FSERR_EL_AA<<FSERR_ELEMENTS_SHIFT)
#define FSERR_EA (_FSERR_EL_EA<<FSERR_ELEMENTS_SHIFT)
#define FSERR_EC (_FSERR_EL_EC<<FSERR_ELEMENTS_SHIFT)
// containers
// starts from the last bit of the error
enum {
_FSERR_CNT_NONE = 0,
_FSERR_CNT_MESSAGE,
_FSERR_CNT_CA_REQUEST,
_FSERR_CNT_P2P,
_FSERR_CNT_CRL,
_FSERR_CNT_CTL,
_FSERR_CNT_CERTIFICATE,
_FSERR_CNT_SIGNER,
_FSERR_CNT_PAYLOAD,
_FSERR_CNT_SIGNATURE,
_FSERR_CNT_VALIDITY_RESTRICTION,
_FSERR_CNT_APP_PERMISSIONS,
_FSERR_CNT_ISSUE_PERMISSIONS,
_FSERR_CNT_RECIPIENT_INFO,
_FSERR_CNT_REGION,
_FSERR_CNT_IDENTIFIED,
_FSERR_CNT_CIRCLE,
_FSERR_CNT_POLYGON,
_FSERR_CNT_RECTANGLE,
_FSERR_CNT_VERIFICATION_KEY,
_FSERR_CNT_ENCRYPTION_KEY,
_FSERR_CNT_ENC_PARAMETERS,
_FSERR_CNT_EXTENSION,
_FSERR_CNT_MAX_VALUE,
};
#define FSERR_CONTAINER(N) _FSERR_CNT_##N
#define FSERR_CONTAINER_BIT(N) (1<<( _FSERR_SIZEOF - FSERR_CONTAINER(N)))
#define FSERR_RECIPIENT_INFO FSERR_CONTAINER_BIT(RECIPIENT_INFO)
#define FSERR_ENC_PARAMETERS FSERR_CONTAINER_BIT(ENC_PARAMETERS)
#define FSERR_IDENTIFIED FSERR_CONTAINER_BIT(IDENTIFIED)
#define FSERR_CIRCLE FSERR_CONTAINER_BIT(CIRCLE)
#define FSERR_POLYGON FSERR_CONTAINER_BIT(POLYGON)
#define FSERR_RECTANGLE FSERR_CONTAINER_BIT(RECTANGLE)
#define FSERR_REGION FSERR_CONTAINER_BIT(REGION)
#define FSERR_SIGNER FSERR_CONTAINER_BIT(SIGNER)
#define FSERR_MESSAGE FSERR_CONTAINER_BIT(MESSAGE)
#define FSERR_P2P FSERR_CONTAINER_BIT(P2P)
#define FSERR_APP_PERMISSIONS FSERR_CONTAINER_BIT(APP_PERMISSIONS)
#define FSERR_ISSUE_PERMISSIONS FSERR_CONTAINER_BIT(ISSUE_PERMISSIONS)
#define FSERR_SIGNATURE FSERR_CONTAINER_BIT(SIGNATURE)
#define FSERR_PAYLOAD FSERR_CONTAINER_BIT(PAYLOAD)
#define FSERR_CERTIFICATE FSERR_CONTAINER_BIT(CERTIFICATE)
#define FSERR_VERIFICATION_KEY FSERR_CONTAINER_BIT(VERIFICATION_KEY)
#define FSERR_ENCRYPTION_KEY FSERR_CONTAINER_BIT(ENCRYPTION_KEY)
#define FSERR_EXTENSION FSERR_CONTAINER_BIT(EXTENSION)
#define FSERR_CRL FSERR_CONTAINER_BIT(CRL)
#define FSERR_CTL FSERR_CONTAINER_BIT(CTL)
#define FSERR_AT_REQUEST FSERR_CONTAINER_BIT(CA_REQUEST)
#define FSERR_EC_REQUEST FSERR_CONTAINER_BIT(CA_REQUEST)
#define FSERR_CONTAINERS_SHIFT (_FSERR_SIZEOF-_FSERR_CNT_MAX_VALUE)
#define FSERR_ELEMENT(err) ((err & ((1<<FSERR_CONTAINERS_SHIFT)-1))>>FSERR_ELEMENTS_SHIFT)
//#define FSERR_SET_ELEMENT(E,e) (((E) & (((-1)<<FSERR_CONTAINERS_SHIFT) | ((1<<FSERR_ELEMENTS_SHIFT)-1))) | (e))
#define FSERR_ERROR(err) ((err) & ((1<<(FSERR_ELEMENTS_SHIFT))-1))
#define FSERR_IS_ELEMENT(err, elem) ((elem) == ((err) & (elem)))
#endif