1 /*
2 Copyright (c) 2005, 2013, Oracle and/or its affiliates. All rights reserved.
3
4 This program is free software; you can redistribute it and/or modify
5 it under the terms of the GNU General Public License as published by
6 the Free Software Foundation; version 2 of the License.
7
8 This program is distributed in the hope that it will be useful,
9 but WITHOUT ANY WARRANTY; without even the implied warranty of
10 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 GNU General Public License for more details.
12
13 You should have received a copy of the GNU General Public License
14 along with this program; see the file COPYING. If not, write to the
15 Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
16 MA 02110-1301 USA.
17 */
18
19
20 /* yaSSL error implements and an exception class
21 */
22
23 #include "runtime.hpp"
24 #include "yassl_error.hpp"
25 #include "error.hpp" // TaoCrypt error numbers
26 #include "openssl/ssl.h" // SSL_ERROR_WANT_READ
27 #include <string.h> // strncpy
28
29 #ifdef _MSC_VER
30 // 4996 warning to use MS extensions e.g., strcpy_s instead of strncpy
31 #pragma warning(disable: 4996)
32 #endif
33
34 namespace yaSSL {
35
36
37 /* may bring back in future
38 Error::Error(const char* s, YasslError e, Library l)
39 : mySTL::runtime_error(s), error_(e), lib_(l)
40 {
41 }
42
43
44 YasslError Error::get_number() const
45 {
46 return error_;
47 }
48
49
50 Library Error::get_lib() const
51 {
52
53 return lib_;
54 }
55 */
56
57
SetErrorString(YasslError error,char * buffer)58 void SetErrorString(YasslError error, char* buffer)
59 {
60 using namespace TaoCrypt;
61 const int max = MAX_ERROR_SZ; // shorthand
62 int localError = error; // errors from a few enums
63
64 switch (localError) {
65
66 // yaSSL proper errors
67 case range_error :
68 strncpy(buffer, "buffer index error, out of range", max);
69 break;
70
71 case realloc_error :
72 strncpy(buffer, "trying to realloc a fixed buffer", max);
73 break;
74
75 case factory_error :
76 strncpy(buffer, "unknown factory create request", max);
77 break;
78
79 case unknown_cipher :
80 strncpy(buffer, "trying to use an unknown cipher", max);
81 break;
82
83 case prefix_error :
84 strncpy(buffer, "bad master secret derivation, prefix too big", max);
85 break;
86
87 case record_layer :
88 strncpy(buffer, "record layer not ready yet", max);
89 break;
90
91 case handshake_layer :
92 strncpy(buffer, "handshake layer not ready yet", max);
93 break;
94
95 case out_of_order :
96 strncpy(buffer, "handshake message received in wrong order", max);
97 break;
98
99 case bad_input :
100 strncpy(buffer, "bad cipher suite input", max);
101 break;
102
103 case match_error :
104 strncpy(buffer, "unable to match a supported cipher suite", max);
105 break;
106
107 case no_key_file :
108 strncpy(buffer, "the server needs a private key file", max);
109 break;
110
111 case verify_error :
112 strncpy(buffer, "unable to verify peer checksum", max);
113 break;
114
115 case send_error :
116 strncpy(buffer, "socket layer send error", max);
117 break;
118
119 case receive_error :
120 strncpy(buffer, "socket layer receive error", max);
121 break;
122
123 case certificate_error :
124 strncpy(buffer, "unable to proccess cerificate", max);
125 break;
126
127 case privateKey_error :
128 strncpy(buffer, "unable to proccess private key, bad format", max);
129 break;
130
131 case badVersion_error :
132 strncpy(buffer, "protocol version mismatch", max);
133 break;
134
135 case compress_error :
136 strncpy(buffer, "compression error", max);
137 break;
138
139 case decompress_error :
140 strncpy(buffer, "decompression error", max);
141 break;
142
143 case pms_version_error :
144 strncpy(buffer, "bad PreMasterSecret version error", max);
145 break;
146
147 case sanityCipher_error :
148 strncpy(buffer, "sanity check on cipher text size error", max);
149 break;
150
151 case rsaSignFault_error:
152 strncpy(buffer, "rsa signature fault error", max);
153 break;
154
155 // openssl errors
156 case SSL_ERROR_WANT_READ :
157 strncpy(buffer, "the read operation would block", max);
158 break;
159
160 case SSL_ERROR_WANT_WRITE :
161 strncpy(buffer, "the write operation would block", max);
162 break;
163
164 case CERTFICATE_ERROR :
165 strncpy(buffer, "Unable to verify certificate", max);
166 break;
167
168 // TaoCrypt errors
169 case NO_ERROR_E :
170 strncpy(buffer, "not in error state", max);
171 break;
172
173 case WINCRYPT_E :
174 strncpy(buffer, "bad wincrypt acquire", max);
175 break;
176
177 case CRYPTGEN_E :
178 strncpy(buffer, "CryptGenRandom error", max);
179 break;
180
181 case OPEN_RAN_E :
182 strncpy(buffer, "unable to use random device", max);
183 break;
184
185 case READ_RAN_E :
186 strncpy(buffer, "unable to use random device", max);
187 break;
188
189 case INTEGER_E :
190 strncpy(buffer, "ASN: bad DER Integer Header", max);
191 break;
192
193 case SEQUENCE_E :
194 strncpy(buffer, "ASN: bad Sequence Header", max);
195 break;
196
197 case SET_E :
198 strncpy(buffer, "ASN: bad Set Header", max);
199 break;
200
201 case VERSION_E :
202 strncpy(buffer, "ASN: version length not 1", max);
203 break;
204
205 case SIG_OID_E :
206 strncpy(buffer, "ASN: signature OID mismatch", max);
207 break;
208
209 case BIT_STR_E :
210 strncpy(buffer, "ASN: bad BitString Header", max);
211 break;
212
213 case UNKNOWN_OID_E :
214 strncpy(buffer, "ASN: unknown key OID type", max);
215 break;
216
217 case OBJECT_ID_E :
218 strncpy(buffer, "ASN: bad Ojbect ID Header", max);
219 break;
220
221 case TAG_NULL_E :
222 strncpy(buffer, "ASN: expected TAG NULL", max);
223 break;
224
225 case EXPECT_0_E :
226 strncpy(buffer, "ASN: expected 0", max);
227 break;
228
229 case OCTET_STR_E :
230 strncpy(buffer, "ASN: bad Octet String Header", max);
231 break;
232
233 case TIME_E :
234 strncpy(buffer, "ASN: bad TIME", max);
235 break;
236
237 case DATE_SZ_E :
238 strncpy(buffer, "ASN: bad Date Size", max);
239 break;
240
241 case SIG_LEN_E :
242 strncpy(buffer, "ASN: bad Signature Length", max);
243 break;
244
245 case UNKOWN_SIG_E :
246 strncpy(buffer, "ASN: unknown signature OID", max);
247 break;
248
249 case UNKOWN_HASH_E :
250 strncpy(buffer, "ASN: unknown hash OID", max);
251 break;
252
253 case DSA_SZ_E :
254 strncpy(buffer, "ASN: bad DSA r or s size", max);
255 break;
256
257 case BEFORE_DATE_E :
258 strncpy(buffer, "ASN: before date in the future", max);
259 break;
260
261 case AFTER_DATE_E :
262 strncpy(buffer, "ASN: after date in the past", max);
263 break;
264
265 case SIG_CONFIRM_E :
266 strncpy(buffer, "ASN: bad self signature confirmation", max);
267 break;
268
269 case SIG_OTHER_E :
270 strncpy(buffer, "ASN: bad other signature confirmation", max);
271 break;
272
273 case CONTENT_E :
274 strncpy(buffer, "bad content processing", max);
275 break;
276
277 case PEM_E :
278 strncpy(buffer, "bad PEM format processing", max);
279 break;
280
281 default :
282 strncpy(buffer, "unknown error number", max);
283 }
284 }
285
286
287
288 } // namespace yaSSL
289