1/*
2 * Copyright (c) 2003-2006,2008,2010 Apple Inc. All Rights Reserved.
3 *
4 * @APPLE_LICENSE_HEADER_START@
5 *
6 * This file contains Original Code and/or Modifications of Original Code
7 * as defined in and that are subject to the Apple Public Source License
8 * Version 2.0 (the 'License'). You may not use this file except in
9 * compliance with the License. Please obtain a copy of the License at
10 * http://www.opensource.apple.com/apsl/ and read it before using this
11 * file.
12 *
13 * The Original Code and all software distributed under the License are
14 * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
15 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
16 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
17 * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
18 * Please see the License for the specific language governing rights and
19 * limitations under the License.
20 *
21 * @APPLE_LICENSE_HEADER_END@
22 *
23 * secErrorStr.c - ASCII string version of NSS Sec layer error codes
24 */
25#include "secerr.h"
26#include <stdio.h>
27
28typedef struct {
29	PRErrorCode		value;
30	const char 		*name;
31} SecErrorNameValuePair;
32
33/* one entry in an array of SecErrorNameValuePairs */
34#define SNVP(err)		{err, #err}
35
36/* the NULL entry which terminates the SecErrorNameValuePair list */
37#define SNVP_END		{0, NULL}
38
39static const SecErrorNameValuePair errValues[] =
40{
41	/* FIXME: we really don't need all of these, but they're not
42	 * compiled for NDEBUG builds. */
43	#ifndef	NDEBUG
44	SNVP(SEC_ERROR_IO),
45	SNVP(SEC_ERROR_LIBRARY_FAILURE),
46	SNVP(SEC_ERROR_BAD_DATA 	),
47	SNVP(SEC_ERROR_OUTPUT_LEN),
48	SNVP(SEC_ERROR_INPUT_LEN),
49	SNVP(SEC_ERROR_INVALID_ARGS),
50	SNVP(SEC_ERROR_INVALID_ALGORITHM),
51	SNVP(SEC_ERROR_INVALID_AVA),
52	SNVP(SEC_ERROR_INVALID_TIME),
53	SNVP(SEC_ERROR_BAD_DER),
54	SNVP(SEC_ERROR_BAD_SIGNATURE ),
55	SNVP(SEC_ERROR_EXPIRED_CERTIFICATE),
56	SNVP(SEC_ERROR_REVOKED_CERTIFICATE),
57	SNVP(SEC_ERROR_UNKNOWN_ISSUER ),
58	SNVP(SEC_ERROR_BAD_KEY),
59	SNVP(SEC_ERROR_BAD_PASSWORD),
60	SNVP(SEC_ERROR_RETRY_PASSWORD),
61	SNVP(SEC_ERROR_NO_NODELOCK ),
62	SNVP(SEC_ERROR_BAD_DATABASE),
63	SNVP(SEC_ERROR_NO_MEMORY),
64	SNVP(SEC_ERROR_UNTRUSTED_ISSUER),
65	SNVP(SEC_ERROR_UNTRUSTED_CERT),
66	SNVP(SEC_ERROR_DUPLICATE_CERT),
67	SNVP(SEC_ERROR_DUPLICATE_CERT_NAME),
68	SNVP(SEC_ERROR_ADDING_CERT),
69	SNVP(SEC_ERROR_FILING_KEY),
70	SNVP(SEC_ERROR_NO_KEY),
71	SNVP(SEC_ERROR_CERT_VALID),
72	SNVP(SEC_ERROR_CERT_NOT_VALID),
73	SNVP(SEC_ERROR_CERT_NO_RESPONSE),
74	SNVP(SEC_ERROR_EXPIRED_ISSUER_CERTIFICATE),
75	SNVP(SEC_ERROR_CRL_EXPIRED),
76	SNVP(SEC_ERROR_CRL_BAD_SIGNATURE),
77	SNVP(SEC_ERROR_CRL_INVALID),
78	SNVP(SEC_ERROR_EXTENSION_VALUE_INVALID),
79	SNVP(SEC_ERROR_EXTENSION_NOT_FOUND),
80	SNVP(SEC_ERROR_CA_CERT_INVALID),
81	SNVP(SEC_ERROR_PATH_LEN_CONSTRAINT_INVALID),
82	SNVP(SEC_ERROR_CERT_USAGES_INVALID),
83	SNVP(SEC_INTERNAL_ONLY),
84	SNVP(SEC_ERROR_INVALID_KEY),
85	SNVP(SEC_ERROR_UNKNOWN_CRITICAL_EXTENSION),
86	SNVP(SEC_ERROR_OLD_CRL),
87	SNVP(SEC_ERROR_NO_EMAIL_CERT),
88	SNVP(SEC_ERROR_NO_RECIPIENT_CERTS_QUERY),
89	SNVP(SEC_ERROR_NOT_A_RECIPIENT),
90	SNVP(SEC_ERROR_PKCS7_KEYALG_MISMATCH),
91	SNVP(SEC_ERROR_PKCS7_BAD_SIGNATURE),
92	SNVP(SEC_ERROR_UNSUPPORTED_KEYALG),
93	SNVP(SEC_ERROR_DECRYPTION_DISALLOWED),
94	SNVP(XP_SEC_FORTEZZA_BAD_CARD),
95	SNVP(XP_SEC_FORTEZZA_NO_CARD),
96	SNVP(XP_SEC_FORTEZZA_NONE_SELECTED ),
97	SNVP(XP_SEC_FORTEZZA_MORE_INFO ),
98	SNVP(XP_SEC_FORTEZZA_PERSON_NOT_FOUND ),
99	SNVP(XP_SEC_FORTEZZA_NO_MORE_INFO),
100	SNVP(XP_SEC_FORTEZZA_BAD_PIN),
101	SNVP(XP_SEC_FORTEZZA_PERSON_ERROR),
102	SNVP(SEC_ERROR_NO_KRL),
103	SNVP(SEC_ERROR_KRL_EXPIRED),
104	SNVP(SEC_ERROR_KRL_BAD_SIGNATURE),
105	SNVP(SEC_ERROR_REVOKED_KEY ),
106	SNVP(SEC_ERROR_KRL_INVALID),
107	SNVP(SEC_ERROR_NEED_RANDOM),
108	SNVP(SEC_ERROR_NO_MODULE),
109	SNVP(SEC_ERROR_NO_TOKEN),
110	SNVP(SEC_ERROR_READ_ONLY),
111	SNVP(SEC_ERROR_NO_SLOT_SELECTED),
112	SNVP(SEC_ERROR_CERT_NICKNAME_COLLISION),
113	SNVP(SEC_ERROR_KEY_NICKNAME_COLLISION),
114	SNVP(SEC_ERROR_SAFE_NOT_CREATED),
115	SNVP(SEC_ERROR_BAGGAGE_NOT_CREATED),
116	SNVP(XP_JAVA_REMOVE_PRINCIPAL_ERROR),
117	SNVP(XP_JAVA_DELETE_PRIVILEGE_ERROR),
118	SNVP(XP_JAVA_CERT_NOT_EXISTS_ERROR ),
119	SNVP(SEC_ERROR_BAD_EXPORT_ALGORITHM),
120	SNVP(SEC_ERROR_EXPORTING_CERTIFICATES),
121	SNVP(SEC_ERROR_IMPORTING_CERTIFICATES),
122	SNVP(SEC_ERROR_PKCS12_DECODING_PFX),
123	SNVP(SEC_ERROR_PKCS12_INVALID_MAC),
124	SNVP(SEC_ERROR_PKCS12_UNSUPPORTED_MAC_ALGORITHM),
125	SNVP(SEC_ERROR_PKCS12_UNSUPPORTED_TRANSPORT_MODE),
126	SNVP(SEC_ERROR_PKCS12_CORRUPT_PFX_STRUCTURE),
127	SNVP(SEC_ERROR_PKCS12_UNSUPPORTED_PBE_ALGORITHM),
128	SNVP(SEC_ERROR_PKCS12_UNSUPPORTED_VERSION ),
129	SNVP(SEC_ERROR_PKCS12_PRIVACY_PASSWORD_INCORRECT),
130	SNVP(SEC_ERROR_PKCS12_CERT_COLLISION),
131	SNVP(SEC_ERROR_USER_CANCELLED),
132	SNVP(SEC_ERROR_PKCS12_DUPLICATE_DATA),
133	SNVP(SEC_ERROR_MESSAGE_SEND_ABORTED),
134	SNVP(SEC_ERROR_INADEQUATE_KEY_USAGE),
135	SNVP(SEC_ERROR_INADEQUATE_CERT_TYPE),
136	SNVP(SEC_ERROR_CERT_ADDR_MISMATCH),
137	SNVP(SEC_ERROR_PKCS12_UNABLE_TO_IMPORT_KEY),
138	SNVP(SEC_ERROR_PKCS12_IMPORTING_CERT_CHAIN),
139	SNVP(SEC_ERROR_PKCS12_UNABLE_TO_LOCATE_OBJECT_BY_NAME),
140	SNVP(SEC_ERROR_PKCS12_UNABLE_TO_EXPORT_KEY),
141	SNVP(SEC_ERROR_PKCS12_UNABLE_TO_WRITE),
142	SNVP(SEC_ERROR_PKCS12_UNABLE_TO_READ),
143	SNVP(SEC_ERROR_PKCS12_KEY_DATABASE_NOT_INITIALIZED),
144	SNVP(SEC_ERROR_KEYGEN_FAIL),
145	SNVP(SEC_ERROR_INVALID_PASSWORD),
146	SNVP(SEC_ERROR_RETRY_OLD_PASSWORD),
147	SNVP(SEC_ERROR_BAD_NICKNAME),
148	SNVP(SEC_ERROR_NOT_FORTEZZA_ISSUER),
149	SNVP(SEC_ERROR_CANNOT_MOVE_SENSITIVE_KEY),
150	SNVP(SEC_ERROR_JS_INVALID_MODULE_NAME),
151	SNVP(SEC_ERROR_JS_INVALID_DLL),
152	SNVP(SEC_ERROR_JS_ADD_MOD_FAILURE),
153	SNVP(SEC_ERROR_JS_DEL_MOD_FAILURE),
154	SNVP(SEC_ERROR_OLD_KRL),
155	SNVP(SEC_ERROR_CKL_CONFLICT),
156	SNVP(SEC_ERROR_CERT_NOT_IN_NAME_SPACE),
157	SNVP(SEC_ERROR_KRL_NOT_YET_VALID),
158	SNVP(SEC_ERROR_CRL_NOT_YET_VALID),
159	SNVP(SEC_ERROR_UNKNOWN_CERT),
160	SNVP(SEC_ERROR_UNKNOWN_SIGNER),
161	SNVP(SEC_ERROR_CERT_BAD_ACCESS_LOCATION ),
162	SNVP(SEC_ERROR_OCSP_UNKNOWN_RESPONSE_TYPE),
163	SNVP(SEC_ERROR_OCSP_BAD_HTTP_RESPONSE),
164	SNVP(SEC_ERROR_OCSP_MALFORMED_REQUEST),
165	SNVP(SEC_ERROR_OCSP_SERVER_ERROR),
166	SNVP(SEC_ERROR_OCSP_TRY_SERVER_LATER),
167	SNVP(SEC_ERROR_OCSP_REQUEST_NEEDS_SIG),
168	SNVP(SEC_ERROR_OCSP_UNAUTHORIZED_REQUEST),
169	SNVP(SEC_ERROR_OCSP_UNKNOWN_RESPONSE_STATUS),
170	SNVP(SEC_ERROR_OCSP_UNKNOWN_CERT),
171	SNVP(SEC_ERROR_OCSP_NOT_ENABLED),
172	SNVP(SEC_ERROR_OCSP_NO_DEFAULT_RESPONDER),
173	SNVP(SEC_ERROR_OCSP_MALFORMED_RESPONSE ),
174	SNVP(SEC_ERROR_OCSP_UNAUTHORIZED_RESPONSE),
175	SNVP(SEC_ERROR_OCSP_FUTURE_RESPONSE ),
176	SNVP(SEC_ERROR_OCSP_OLD_RESPONSE),
177	SNVP(SEC_ERROR_DIGEST_NOT_FOUND),
178	SNVP(SEC_ERROR_UNSUPPORTED_MESSAGE_TYPE),
179	SNVP(SEC_ERROR_MODULE_STUCK),
180	SNVP(SEC_ERROR_BAD_TEMPLATE),
181	SNVP(SEC_ERROR_CRL_NOT_FOUND),
182	SNVP(SEC_ERROR_REUSED_ISSUER_AND_SERIAL ),
183	SNVP(SEC_ERROR_BUSY),
184	#endif	/* NDEBUG */
185	SNVP_END
186};
187
188/*
189 * Given a PRErrorCode, obtain a const C string. Not copied, not
190 * to be freed by caller.
191 */
192const char *SECErrorString(PRErrorCode err)
193{
194 	static char badStr[100];
195	const SecErrorNameValuePair *nvp = errValues;
196
197	while(nvp->name != NULL) {
198		if(nvp->value == err) {
199			return nvp->name;
200		}
201		nvp++;
202	}
203
204	/* Not found, not thread safe */
205	sprintf(badStr, "UNKNOWN (%d(d)", err);
206	return badStr;
207
208}
209