1
2#include "testutil.h"
3#include <stdlib.h>
4#include <stdio.h>
5#include <CoreServices/../Frameworks/CarbonCore.framework/Headers/MacErrors.h>
6
7const char *sslGetCipherSuiteString(SSLCipherSuite cs)
8{
9	static char noSuite[40];
10
11	switch(cs) {
12		case SSL_NULL_WITH_NULL_NULL:
13			return "SSL_NULL_WITH_NULL_NULL";
14		case SSL_RSA_WITH_NULL_MD5:
15			return "SSL_RSA_WITH_NULL_MD5";
16		case SSL_RSA_WITH_NULL_SHA:
17			return "SSL_RSA_WITH_NULL_SHA";
18		case SSL_RSA_EXPORT_WITH_RC4_40_MD5:
19			return "SSL_RSA_EXPORT_WITH_RC4_40_MD5";
20		case SSL_RSA_WITH_RC4_128_MD5:
21			return "SSL_RSA_WITH_RC4_128_MD5";
22		case SSL_RSA_WITH_RC4_128_SHA:
23			return "SSL_RSA_WITH_RC4_128_SHA";
24		case SSL_RSA_EXPORT_WITH_RC2_CBC_40_MD5:
25			return "SSL_RSA_EXPORT_WITH_RC2_CBC_40_MD5";
26		case SSL_RSA_WITH_IDEA_CBC_SHA:
27			return "SSL_RSA_WITH_IDEA_CBC_SHA";
28		case SSL_RSA_EXPORT_WITH_DES40_CBC_SHA:
29			return "SSL_RSA_EXPORT_WITH_DES40_CBC_SHA";
30		case SSL_RSA_WITH_DES_CBC_SHA:
31			return "SSL_RSA_WITH_DES_CBC_SHA";
32		case SSL_RSA_WITH_3DES_EDE_CBC_SHA:
33			return "SSL_RSA_WITH_3DES_EDE_CBC_SHA";
34		case SSL_DH_DSS_EXPORT_WITH_DES40_CBC_SHA:
35			return "SSL_DH_DSS_EXPORT_WITH_DES40_CBC_SHA";
36		case SSL_DH_DSS_WITH_DES_CBC_SHA:
37			return "SSL_DH_DSS_WITH_DES_CBC_SHA";
38		case SSL_DH_DSS_WITH_3DES_EDE_CBC_SHA:
39			return "SSL_DH_DSS_WITH_3DES_EDE_CBC_SHA";
40		case SSL_DH_RSA_EXPORT_WITH_DES40_CBC_SHA:
41			return "SSL_DH_RSA_EXPORT_WITH_DES40_CBC_SHA";
42		case SSL_DH_RSA_WITH_DES_CBC_SHA:
43			return "SSL_DH_RSA_WITH_DES_CBC_SHA";
44		case SSL_DH_RSA_WITH_3DES_EDE_CBC_SHA:
45			return "SSL_DH_RSA_WITH_3DES_EDE_CBC_SHA";
46		case SSL_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA:
47			return "SSL_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA";
48		case SSL_DHE_DSS_WITH_DES_CBC_SHA:
49			return "SSL_DHE_DSS_WITH_DES_CBC_SHA";
50		case SSL_DHE_DSS_WITH_3DES_EDE_CBC_SHA:
51			return "SSL_DHE_DSS_WITH_3DES_EDE_CBC_SHA";
52		case SSL_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA:
53			return "SSL_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA";
54		case SSL_DHE_RSA_WITH_DES_CBC_SHA:
55			return "SSL_DHE_RSA_WITH_DES_CBC_SHA";
56		case SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA:
57			return "SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA";
58		case SSL_DH_anon_EXPORT_WITH_RC4_40_MD5:
59			return "SSL_DH_anon_EXPORT_WITH_RC4_40_MD5";
60		case SSL_DH_anon_WITH_RC4_128_MD5:
61			return "SSL_DH_anon_WITH_RC4_128_MD5";
62		case SSL_DH_anon_EXPORT_WITH_DES40_CBC_SHA:
63			return "SSL_DH_anon_EXPORT_WITH_DES40_CBC_SHA";
64		case SSL_DH_anon_WITH_DES_CBC_SHA:
65			return "SSL_DH_anon_WITH_DES_CBC_SHA";
66		case SSL_DH_anon_WITH_3DES_EDE_CBC_SHA:
67			return "SSL_DH_anon_WITH_3DES_EDE_CBC_SHA";
68		case SSL_FORTEZZA_DMS_WITH_NULL_SHA:
69			return "SSL_FORTEZZA_DMS_WITH_NULL_SHA";
70		case SSL_FORTEZZA_DMS_WITH_FORTEZZA_CBC_SHA:
71			return "SSL_FORTEZZA_DMS_WITH_FORTEZZA_CBC_SHA";
72		case SSL_RSA_WITH_RC2_CBC_MD5:
73			return "SSL_RSA_WITH_RC2_CBC_MD5";
74		case SSL_RSA_WITH_IDEA_CBC_MD5:
75			return "SSL_RSA_WITH_IDEA_CBC_MD5";
76		case SSL_RSA_WITH_DES_CBC_MD5:
77			return "SSL_RSA_WITH_DES_CBC_MD5";
78		case SSL_RSA_WITH_3DES_EDE_CBC_MD5:
79			return "SSL_RSA_WITH_3DES_EDE_CBC_MD5";
80		case SSL_NO_SUCH_CIPHERSUITE:
81			return "SSL_NO_SUCH_CIPHERSUITE";
82		default:
83			sprintf(noSuite, "Unknown (%d)", (unsigned)cs);
84			return noSuite;
85	}
86}
87
88/*
89 * Given a SSLProtocolVersion - typically from SSLGetProtocolVersion -
90 * return a string representation.
91 */
92const char *sslGetProtocolVersionString(SSLProtocol prot)
93{
94	static char noProt[20];
95
96	switch(prot) {
97		case kSSLProtocolUnknown:
98			return "kSSLProtocolUnknown";
99		case kSSLProtocol2:
100			return "kSSLProtocol2";
101		case kSSLProtocol3:
102			return "kSSLProtocol3";
103		case kSSLProtocol3Only:
104			return "kSSLProtocol3Only";
105		default:
106			sprintf(noProt, "Unknown (%d)", (unsigned)prot);
107			return noProt;
108	}
109}
110
111/*
112 * Return string representation of SecureTransport-related OSStatus.
113 */
114const char *sslGetSSLErrString(OSStatus err)
115{
116	static char noErrStr[20];
117
118	switch(err) {
119		case noErr:
120			return "noErr";
121		case memFullErr:
122			return "memFullErr";
123		case unimpErr:
124			return "unimpErr";
125		case errSSLProtocol:
126			return "errSSLProtocol";
127		case errSSLNegotiation:
128			return "errSSLNegotiation";
129		case errSSLFatalAlert:
130			return "errSSLFatalAlert";
131		case errSSLWouldBlock:
132			return "errSSLWouldBlock";
133		case ioErr:
134			return "ioErr";
135		case errSSLSessionNotFound:
136			return "errSSLSessionNotFound";
137		case errSSLClosedGraceful:
138			return "errSSLClosedGraceful";
139		case errSSLClosedAbort:
140			return "errSSLClosedAbort";
141   		case errSSLXCertChainInvalid:
142			return "errSSLXCertChainInvalid";
143		case errSSLBadCert:
144			return "errSSLBadCert";
145		case errSSLCrypto:
146			return "errSSLCrypto";
147		case errSSLInternal:
148			return "errSSLInternal";
149		case errSSLModuleAttach:
150			return "errSSLModuleAttach";
151		case errSSLUnknownRootCert:
152			return "errSSLUnknownRootCert";
153		case errSSLNoRootCert:
154			return "errSSLNoRootCert";
155		case errSSLCertExpired:
156			return "errSSLCertExpired";
157		case errSSLCertNotYetValid:
158			return "errSSLCertNotYetValid";
159		case badReqErr:
160			return "badReqErr";
161		case errSSLClosedNoNotify:
162			return "errSSLClosedNoNotify";
163		default:
164			sprintf(noErrStr, "Unknown (%d)", (unsigned)err);
165			return noErrStr;
166	}
167}
168
169void printSslErrStr(
170	const char 	*op,
171	OSStatus 	err)
172{
173	printf("*** %s: %s\n", op, sslGetSSLErrString(err));
174}
175
176