1*5e7646d2SAndroid Build Coastguard Worker /*
2*5e7646d2SAndroid Build Coastguard Worker * TLS check program for CUPS.
3*5e7646d2SAndroid Build Coastguard Worker *
4*5e7646d2SAndroid Build Coastguard Worker * Copyright 2007-2017 by Apple Inc.
5*5e7646d2SAndroid Build Coastguard Worker * Copyright 1997-2006 by Easy Software Products.
6*5e7646d2SAndroid Build Coastguard Worker *
7*5e7646d2SAndroid Build Coastguard Worker * Licensed under Apache License v2.0. See the file "LICENSE" for more information.
8*5e7646d2SAndroid Build Coastguard Worker */
9*5e7646d2SAndroid Build Coastguard Worker
10*5e7646d2SAndroid Build Coastguard Worker /*
11*5e7646d2SAndroid Build Coastguard Worker * Include necessary headers...
12*5e7646d2SAndroid Build Coastguard Worker */
13*5e7646d2SAndroid Build Coastguard Worker
14*5e7646d2SAndroid Build Coastguard Worker #include "cups-private.h"
15*5e7646d2SAndroid Build Coastguard Worker
16*5e7646d2SAndroid Build Coastguard Worker
17*5e7646d2SAndroid Build Coastguard Worker #ifndef HAVE_SSL
main(void)18*5e7646d2SAndroid Build Coastguard Worker int main(void) { puts("Sorry, no TLS support compiled in."); return (1); }
19*5e7646d2SAndroid Build Coastguard Worker #else
20*5e7646d2SAndroid Build Coastguard Worker
21*5e7646d2SAndroid Build Coastguard Worker /*
22*5e7646d2SAndroid Build Coastguard Worker * Local functions...
23*5e7646d2SAndroid Build Coastguard Worker */
24*5e7646d2SAndroid Build Coastguard Worker
25*5e7646d2SAndroid Build Coastguard Worker static void usage(void) _CUPS_NORETURN;
26*5e7646d2SAndroid Build Coastguard Worker
27*5e7646d2SAndroid Build Coastguard Worker
28*5e7646d2SAndroid Build Coastguard Worker /*
29*5e7646d2SAndroid Build Coastguard Worker * 'main()' - Main entry.
30*5e7646d2SAndroid Build Coastguard Worker */
31*5e7646d2SAndroid Build Coastguard Worker
32*5e7646d2SAndroid Build Coastguard Worker int /* O - Exit status */
main(int argc,char * argv[])33*5e7646d2SAndroid Build Coastguard Worker main(int argc, /* I - Number of command-line arguments */
34*5e7646d2SAndroid Build Coastguard Worker char *argv[]) /* I - Command-line arguments */
35*5e7646d2SAndroid Build Coastguard Worker {
36*5e7646d2SAndroid Build Coastguard Worker int i; /* Looping var */
37*5e7646d2SAndroid Build Coastguard Worker http_t *http; /* HTTP connection */
38*5e7646d2SAndroid Build Coastguard Worker const char *server = NULL; /* Hostname from command-line */
39*5e7646d2SAndroid Build Coastguard Worker int port = 0; /* Port number */
40*5e7646d2SAndroid Build Coastguard Worker cups_array_t *creds; /* Server credentials */
41*5e7646d2SAndroid Build Coastguard Worker char creds_str[2048]; /* Credentials string */
42*5e7646d2SAndroid Build Coastguard Worker const char *cipherName = "UNKNOWN";/* Cipher suite name */
43*5e7646d2SAndroid Build Coastguard Worker int dhBits = 0; /* Diffie-Hellman bits */
44*5e7646d2SAndroid Build Coastguard Worker int tlsVersion = 0; /* TLS version number */
45*5e7646d2SAndroid Build Coastguard Worker char uri[1024], /* Printer URI */
46*5e7646d2SAndroid Build Coastguard Worker scheme[32], /* URI scheme */
47*5e7646d2SAndroid Build Coastguard Worker host[256], /* Hostname */
48*5e7646d2SAndroid Build Coastguard Worker userpass[256], /* Username/password */
49*5e7646d2SAndroid Build Coastguard Worker resource[256]; /* Resource path */
50*5e7646d2SAndroid Build Coastguard Worker int af = AF_UNSPEC, /* Address family */
51*5e7646d2SAndroid Build Coastguard Worker tls_options = _HTTP_TLS_NONE,
52*5e7646d2SAndroid Build Coastguard Worker /* TLS options */
53*5e7646d2SAndroid Build Coastguard Worker tls_min_version = _HTTP_TLS_1_0,
54*5e7646d2SAndroid Build Coastguard Worker tls_max_version = _HTTP_TLS_MAX,
55*5e7646d2SAndroid Build Coastguard Worker verbose = 0; /* Verbosity */
56*5e7646d2SAndroid Build Coastguard Worker ipp_t *request, /* IPP Get-Printer-Attributes request */
57*5e7646d2SAndroid Build Coastguard Worker *response; /* IPP Get-Printer-Attributes response */
58*5e7646d2SAndroid Build Coastguard Worker ipp_attribute_t *attr; /* Current attribute */
59*5e7646d2SAndroid Build Coastguard Worker const char *name; /* Attribute name */
60*5e7646d2SAndroid Build Coastguard Worker char value[1024]; /* Attribute (string) value */
61*5e7646d2SAndroid Build Coastguard Worker static const char * const pattrs[] = /* Requested attributes */
62*5e7646d2SAndroid Build Coastguard Worker {
63*5e7646d2SAndroid Build Coastguard Worker "color-supported",
64*5e7646d2SAndroid Build Coastguard Worker "compression-supported",
65*5e7646d2SAndroid Build Coastguard Worker "document-format-supported",
66*5e7646d2SAndroid Build Coastguard Worker "pages-per-minute",
67*5e7646d2SAndroid Build Coastguard Worker "printer-location",
68*5e7646d2SAndroid Build Coastguard Worker "printer-make-and-model",
69*5e7646d2SAndroid Build Coastguard Worker "printer-state",
70*5e7646d2SAndroid Build Coastguard Worker "printer-state-reasons",
71*5e7646d2SAndroid Build Coastguard Worker "sides-supported",
72*5e7646d2SAndroid Build Coastguard Worker "uri-authentication-supported",
73*5e7646d2SAndroid Build Coastguard Worker "uri-security-supported"
74*5e7646d2SAndroid Build Coastguard Worker };
75*5e7646d2SAndroid Build Coastguard Worker
76*5e7646d2SAndroid Build Coastguard Worker
77*5e7646d2SAndroid Build Coastguard Worker for (i = 1; i < argc; i ++)
78*5e7646d2SAndroid Build Coastguard Worker {
79*5e7646d2SAndroid Build Coastguard Worker if (!strcmp(argv[i], "--dh"))
80*5e7646d2SAndroid Build Coastguard Worker {
81*5e7646d2SAndroid Build Coastguard Worker tls_options |= _HTTP_TLS_ALLOW_DH;
82*5e7646d2SAndroid Build Coastguard Worker }
83*5e7646d2SAndroid Build Coastguard Worker else if (!strcmp(argv[i], "--no-cbc"))
84*5e7646d2SAndroid Build Coastguard Worker {
85*5e7646d2SAndroid Build Coastguard Worker tls_options |= _HTTP_TLS_DENY_CBC;
86*5e7646d2SAndroid Build Coastguard Worker }
87*5e7646d2SAndroid Build Coastguard Worker else if (!strcmp(argv[i], "--no-tls10"))
88*5e7646d2SAndroid Build Coastguard Worker {
89*5e7646d2SAndroid Build Coastguard Worker tls_min_version = _HTTP_TLS_1_1;
90*5e7646d2SAndroid Build Coastguard Worker }
91*5e7646d2SAndroid Build Coastguard Worker else if (!strcmp(argv[i], "--tls10"))
92*5e7646d2SAndroid Build Coastguard Worker {
93*5e7646d2SAndroid Build Coastguard Worker tls_min_version = _HTTP_TLS_1_0;
94*5e7646d2SAndroid Build Coastguard Worker tls_max_version = _HTTP_TLS_1_0;
95*5e7646d2SAndroid Build Coastguard Worker }
96*5e7646d2SAndroid Build Coastguard Worker else if (!strcmp(argv[i], "--tls11"))
97*5e7646d2SAndroid Build Coastguard Worker {
98*5e7646d2SAndroid Build Coastguard Worker tls_min_version = _HTTP_TLS_1_1;
99*5e7646d2SAndroid Build Coastguard Worker tls_max_version = _HTTP_TLS_1_1;
100*5e7646d2SAndroid Build Coastguard Worker }
101*5e7646d2SAndroid Build Coastguard Worker else if (!strcmp(argv[i], "--tls12"))
102*5e7646d2SAndroid Build Coastguard Worker {
103*5e7646d2SAndroid Build Coastguard Worker tls_min_version = _HTTP_TLS_1_2;
104*5e7646d2SAndroid Build Coastguard Worker tls_max_version = _HTTP_TLS_1_2;
105*5e7646d2SAndroid Build Coastguard Worker }
106*5e7646d2SAndroid Build Coastguard Worker else if (!strcmp(argv[i], "--tls13"))
107*5e7646d2SAndroid Build Coastguard Worker {
108*5e7646d2SAndroid Build Coastguard Worker tls_min_version = _HTTP_TLS_1_3;
109*5e7646d2SAndroid Build Coastguard Worker tls_max_version = _HTTP_TLS_1_3;
110*5e7646d2SAndroid Build Coastguard Worker }
111*5e7646d2SAndroid Build Coastguard Worker else if (!strcmp(argv[i], "--rc4"))
112*5e7646d2SAndroid Build Coastguard Worker {
113*5e7646d2SAndroid Build Coastguard Worker tls_options |= _HTTP_TLS_ALLOW_RC4;
114*5e7646d2SAndroid Build Coastguard Worker }
115*5e7646d2SAndroid Build Coastguard Worker else if (!strcmp(argv[i], "--verbose") || !strcmp(argv[i], "-v"))
116*5e7646d2SAndroid Build Coastguard Worker {
117*5e7646d2SAndroid Build Coastguard Worker verbose = 1;
118*5e7646d2SAndroid Build Coastguard Worker }
119*5e7646d2SAndroid Build Coastguard Worker else if (!strcmp(argv[i], "-4"))
120*5e7646d2SAndroid Build Coastguard Worker {
121*5e7646d2SAndroid Build Coastguard Worker af = AF_INET;
122*5e7646d2SAndroid Build Coastguard Worker }
123*5e7646d2SAndroid Build Coastguard Worker else if (!strcmp(argv[i], "-6"))
124*5e7646d2SAndroid Build Coastguard Worker {
125*5e7646d2SAndroid Build Coastguard Worker af = AF_INET6;
126*5e7646d2SAndroid Build Coastguard Worker }
127*5e7646d2SAndroid Build Coastguard Worker else if (argv[i][0] == '-')
128*5e7646d2SAndroid Build Coastguard Worker {
129*5e7646d2SAndroid Build Coastguard Worker printf("tlscheck: Unknown option '%s'.\n", argv[i]);
130*5e7646d2SAndroid Build Coastguard Worker usage();
131*5e7646d2SAndroid Build Coastguard Worker }
132*5e7646d2SAndroid Build Coastguard Worker else if (!server)
133*5e7646d2SAndroid Build Coastguard Worker {
134*5e7646d2SAndroid Build Coastguard Worker if (!strncmp(argv[i], "ipps://", 7))
135*5e7646d2SAndroid Build Coastguard Worker {
136*5e7646d2SAndroid Build Coastguard Worker httpSeparateURI(HTTP_URI_CODING_ALL, argv[i], scheme, sizeof(scheme), userpass, sizeof(userpass), host, sizeof(host), &port, resource, sizeof(resource));
137*5e7646d2SAndroid Build Coastguard Worker server = host;
138*5e7646d2SAndroid Build Coastguard Worker }
139*5e7646d2SAndroid Build Coastguard Worker else
140*5e7646d2SAndroid Build Coastguard Worker {
141*5e7646d2SAndroid Build Coastguard Worker server = argv[i];
142*5e7646d2SAndroid Build Coastguard Worker strlcpy(resource, "/ipp/print", sizeof(resource));
143*5e7646d2SAndroid Build Coastguard Worker }
144*5e7646d2SAndroid Build Coastguard Worker }
145*5e7646d2SAndroid Build Coastguard Worker else if (!port && (argv[i][0] == '=' || isdigit(argv[i][0] & 255)))
146*5e7646d2SAndroid Build Coastguard Worker {
147*5e7646d2SAndroid Build Coastguard Worker if (argv[i][0] == '=')
148*5e7646d2SAndroid Build Coastguard Worker port = atoi(argv[i] + 1);
149*5e7646d2SAndroid Build Coastguard Worker else
150*5e7646d2SAndroid Build Coastguard Worker port = atoi(argv[i]);
151*5e7646d2SAndroid Build Coastguard Worker }
152*5e7646d2SAndroid Build Coastguard Worker else
153*5e7646d2SAndroid Build Coastguard Worker {
154*5e7646d2SAndroid Build Coastguard Worker printf("tlscheck: Unexpected argument '%s'.\n", argv[i]);
155*5e7646d2SAndroid Build Coastguard Worker usage();
156*5e7646d2SAndroid Build Coastguard Worker }
157*5e7646d2SAndroid Build Coastguard Worker }
158*5e7646d2SAndroid Build Coastguard Worker
159*5e7646d2SAndroid Build Coastguard Worker if (!server)
160*5e7646d2SAndroid Build Coastguard Worker usage();
161*5e7646d2SAndroid Build Coastguard Worker
162*5e7646d2SAndroid Build Coastguard Worker if (!port)
163*5e7646d2SAndroid Build Coastguard Worker port = 631;
164*5e7646d2SAndroid Build Coastguard Worker
165*5e7646d2SAndroid Build Coastguard Worker _httpTLSSetOptions(tls_options, tls_min_version, tls_max_version);
166*5e7646d2SAndroid Build Coastguard Worker
167*5e7646d2SAndroid Build Coastguard Worker http = httpConnect2(server, port, NULL, af, HTTP_ENCRYPTION_ALWAYS, 1, 30000, NULL);
168*5e7646d2SAndroid Build Coastguard Worker if (!http)
169*5e7646d2SAndroid Build Coastguard Worker {
170*5e7646d2SAndroid Build Coastguard Worker printf("%s: ERROR (%s)\n", server, cupsLastErrorString());
171*5e7646d2SAndroid Build Coastguard Worker return (1);
172*5e7646d2SAndroid Build Coastguard Worker }
173*5e7646d2SAndroid Build Coastguard Worker
174*5e7646d2SAndroid Build Coastguard Worker if (httpCopyCredentials(http, &creds))
175*5e7646d2SAndroid Build Coastguard Worker {
176*5e7646d2SAndroid Build Coastguard Worker strlcpy(creds_str, "Unable to get server X.509 credentials.", sizeof(creds_str));
177*5e7646d2SAndroid Build Coastguard Worker }
178*5e7646d2SAndroid Build Coastguard Worker else
179*5e7646d2SAndroid Build Coastguard Worker {
180*5e7646d2SAndroid Build Coastguard Worker httpCredentialsString(creds, creds_str, sizeof(creds_str));
181*5e7646d2SAndroid Build Coastguard Worker httpFreeCredentials(creds);
182*5e7646d2SAndroid Build Coastguard Worker }
183*5e7646d2SAndroid Build Coastguard Worker
184*5e7646d2SAndroid Build Coastguard Worker #ifdef __APPLE__
185*5e7646d2SAndroid Build Coastguard Worker SSLProtocol protocol;
186*5e7646d2SAndroid Build Coastguard Worker SSLCipherSuite cipher;
187*5e7646d2SAndroid Build Coastguard Worker char unknownCipherName[256];
188*5e7646d2SAndroid Build Coastguard Worker int paramsNeeded = 0;
189*5e7646d2SAndroid Build Coastguard Worker const void *params;
190*5e7646d2SAndroid Build Coastguard Worker size_t paramsLen;
191*5e7646d2SAndroid Build Coastguard Worker OSStatus err;
192*5e7646d2SAndroid Build Coastguard Worker
193*5e7646d2SAndroid Build Coastguard Worker if ((err = SSLGetNegotiatedProtocolVersion(http->tls, &protocol)) != noErr)
194*5e7646d2SAndroid Build Coastguard Worker {
195*5e7646d2SAndroid Build Coastguard Worker printf("%s: ERROR (No protocol version - %d)\n", server, (int)err);
196*5e7646d2SAndroid Build Coastguard Worker httpClose(http);
197*5e7646d2SAndroid Build Coastguard Worker return (1);
198*5e7646d2SAndroid Build Coastguard Worker }
199*5e7646d2SAndroid Build Coastguard Worker
200*5e7646d2SAndroid Build Coastguard Worker switch (protocol)
201*5e7646d2SAndroid Build Coastguard Worker {
202*5e7646d2SAndroid Build Coastguard Worker default :
203*5e7646d2SAndroid Build Coastguard Worker tlsVersion = 0;
204*5e7646d2SAndroid Build Coastguard Worker break;
205*5e7646d2SAndroid Build Coastguard Worker case kSSLProtocol3 :
206*5e7646d2SAndroid Build Coastguard Worker tlsVersion = 30;
207*5e7646d2SAndroid Build Coastguard Worker break;
208*5e7646d2SAndroid Build Coastguard Worker case kTLSProtocol1 :
209*5e7646d2SAndroid Build Coastguard Worker tlsVersion = 10;
210*5e7646d2SAndroid Build Coastguard Worker break;
211*5e7646d2SAndroid Build Coastguard Worker case kTLSProtocol11 :
212*5e7646d2SAndroid Build Coastguard Worker tlsVersion = 11;
213*5e7646d2SAndroid Build Coastguard Worker break;
214*5e7646d2SAndroid Build Coastguard Worker case kTLSProtocol12 :
215*5e7646d2SAndroid Build Coastguard Worker tlsVersion = 12;
216*5e7646d2SAndroid Build Coastguard Worker break;
217*5e7646d2SAndroid Build Coastguard Worker }
218*5e7646d2SAndroid Build Coastguard Worker
219*5e7646d2SAndroid Build Coastguard Worker if ((err = SSLGetNegotiatedCipher(http->tls, &cipher)) != noErr)
220*5e7646d2SAndroid Build Coastguard Worker {
221*5e7646d2SAndroid Build Coastguard Worker printf("%s: ERROR (No cipher suite - %d)\n", server, (int)err);
222*5e7646d2SAndroid Build Coastguard Worker httpClose(http);
223*5e7646d2SAndroid Build Coastguard Worker return (1);
224*5e7646d2SAndroid Build Coastguard Worker }
225*5e7646d2SAndroid Build Coastguard Worker
226*5e7646d2SAndroid Build Coastguard Worker switch (cipher)
227*5e7646d2SAndroid Build Coastguard Worker {
228*5e7646d2SAndroid Build Coastguard Worker case TLS_NULL_WITH_NULL_NULL:
229*5e7646d2SAndroid Build Coastguard Worker cipherName = "TLS_NULL_WITH_NULL_NULL";
230*5e7646d2SAndroid Build Coastguard Worker break;
231*5e7646d2SAndroid Build Coastguard Worker case TLS_RSA_WITH_NULL_MD5:
232*5e7646d2SAndroid Build Coastguard Worker cipherName = "TLS_RSA_WITH_NULL_MD5";
233*5e7646d2SAndroid Build Coastguard Worker break;
234*5e7646d2SAndroid Build Coastguard Worker case TLS_RSA_WITH_NULL_SHA:
235*5e7646d2SAndroid Build Coastguard Worker cipherName = "TLS_RSA_WITH_NULL_SHA";
236*5e7646d2SAndroid Build Coastguard Worker break;
237*5e7646d2SAndroid Build Coastguard Worker case TLS_RSA_WITH_RC4_128_MD5:
238*5e7646d2SAndroid Build Coastguard Worker cipherName = "TLS_RSA_WITH_RC4_128_MD5";
239*5e7646d2SAndroid Build Coastguard Worker break;
240*5e7646d2SAndroid Build Coastguard Worker case TLS_RSA_WITH_RC4_128_SHA:
241*5e7646d2SAndroid Build Coastguard Worker cipherName = "TLS_RSA_WITH_RC4_128_SHA";
242*5e7646d2SAndroid Build Coastguard Worker break;
243*5e7646d2SAndroid Build Coastguard Worker case TLS_RSA_WITH_3DES_EDE_CBC_SHA:
244*5e7646d2SAndroid Build Coastguard Worker cipherName = "TLS_RSA_WITH_3DES_EDE_CBC_SHA";
245*5e7646d2SAndroid Build Coastguard Worker break;
246*5e7646d2SAndroid Build Coastguard Worker case TLS_RSA_WITH_NULL_SHA256:
247*5e7646d2SAndroid Build Coastguard Worker cipherName = "TLS_RSA_WITH_NULL_SHA256";
248*5e7646d2SAndroid Build Coastguard Worker break;
249*5e7646d2SAndroid Build Coastguard Worker case TLS_RSA_WITH_AES_128_CBC_SHA256:
250*5e7646d2SAndroid Build Coastguard Worker cipherName = "TLS_RSA_WITH_AES_128_CBC_SHA256";
251*5e7646d2SAndroid Build Coastguard Worker break;
252*5e7646d2SAndroid Build Coastguard Worker case TLS_RSA_WITH_AES_256_CBC_SHA256:
253*5e7646d2SAndroid Build Coastguard Worker cipherName = "TLS_RSA_WITH_AES_256_CBC_SHA256";
254*5e7646d2SAndroid Build Coastguard Worker break;
255*5e7646d2SAndroid Build Coastguard Worker case TLS_DH_DSS_WITH_3DES_EDE_CBC_SHA:
256*5e7646d2SAndroid Build Coastguard Worker cipherName = "TLS_DH_DSS_WITH_3DES_EDE_CBC_SHA";
257*5e7646d2SAndroid Build Coastguard Worker paramsNeeded = 1;
258*5e7646d2SAndroid Build Coastguard Worker break;
259*5e7646d2SAndroid Build Coastguard Worker case TLS_DH_RSA_WITH_3DES_EDE_CBC_SHA:
260*5e7646d2SAndroid Build Coastguard Worker cipherName = "TLS_DH_RSA_WITH_3DES_EDE_CBC_SHA";
261*5e7646d2SAndroid Build Coastguard Worker paramsNeeded = 1;
262*5e7646d2SAndroid Build Coastguard Worker break;
263*5e7646d2SAndroid Build Coastguard Worker case TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA:
264*5e7646d2SAndroid Build Coastguard Worker cipherName = "TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA";
265*5e7646d2SAndroid Build Coastguard Worker paramsNeeded = 1;
266*5e7646d2SAndroid Build Coastguard Worker break;
267*5e7646d2SAndroid Build Coastguard Worker case TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA:
268*5e7646d2SAndroid Build Coastguard Worker cipherName = "TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA";
269*5e7646d2SAndroid Build Coastguard Worker paramsNeeded = 1;
270*5e7646d2SAndroid Build Coastguard Worker break;
271*5e7646d2SAndroid Build Coastguard Worker case TLS_DH_DSS_WITH_AES_128_CBC_SHA256:
272*5e7646d2SAndroid Build Coastguard Worker cipherName = "TLS_DH_DSS_WITH_AES_128_CBC_SHA256";
273*5e7646d2SAndroid Build Coastguard Worker paramsNeeded = 1;
274*5e7646d2SAndroid Build Coastguard Worker break;
275*5e7646d2SAndroid Build Coastguard Worker case TLS_DH_RSA_WITH_AES_128_CBC_SHA256:
276*5e7646d2SAndroid Build Coastguard Worker cipherName = "TLS_DH_RSA_WITH_AES_128_CBC_SHA256";
277*5e7646d2SAndroid Build Coastguard Worker paramsNeeded = 1;
278*5e7646d2SAndroid Build Coastguard Worker break;
279*5e7646d2SAndroid Build Coastguard Worker case TLS_DHE_DSS_WITH_AES_128_CBC_SHA256:
280*5e7646d2SAndroid Build Coastguard Worker cipherName = "TLS_DHE_DSS_WITH_AES_128_CBC_SHA256";
281*5e7646d2SAndroid Build Coastguard Worker paramsNeeded = 1;
282*5e7646d2SAndroid Build Coastguard Worker break;
283*5e7646d2SAndroid Build Coastguard Worker case TLS_DHE_RSA_WITH_AES_128_CBC_SHA256:
284*5e7646d2SAndroid Build Coastguard Worker cipherName = "TLS_DHE_RSA_WITH_AES_128_CBC_SHA256";
285*5e7646d2SAndroid Build Coastguard Worker paramsNeeded = 1;
286*5e7646d2SAndroid Build Coastguard Worker break;
287*5e7646d2SAndroid Build Coastguard Worker case TLS_DH_DSS_WITH_AES_256_CBC_SHA256:
288*5e7646d2SAndroid Build Coastguard Worker cipherName = "TLS_DH_DSS_WITH_AES_256_CBC_SHA256";
289*5e7646d2SAndroid Build Coastguard Worker paramsNeeded = 1;
290*5e7646d2SAndroid Build Coastguard Worker break;
291*5e7646d2SAndroid Build Coastguard Worker case TLS_DH_RSA_WITH_AES_256_CBC_SHA256:
292*5e7646d2SAndroid Build Coastguard Worker cipherName = "TLS_DH_RSA_WITH_AES_256_CBC_SHA256";
293*5e7646d2SAndroid Build Coastguard Worker paramsNeeded = 1;
294*5e7646d2SAndroid Build Coastguard Worker break;
295*5e7646d2SAndroid Build Coastguard Worker case TLS_DHE_DSS_WITH_AES_256_CBC_SHA256:
296*5e7646d2SAndroid Build Coastguard Worker cipherName = "TLS_DHE_DSS_WITH_AES_256_CBC_SHA256";
297*5e7646d2SAndroid Build Coastguard Worker paramsNeeded = 1;
298*5e7646d2SAndroid Build Coastguard Worker break;
299*5e7646d2SAndroid Build Coastguard Worker case TLS_DHE_RSA_WITH_AES_256_CBC_SHA256:
300*5e7646d2SAndroid Build Coastguard Worker cipherName = "TLS_DHE_RSA_WITH_AES_256_CBC_SHA256";
301*5e7646d2SAndroid Build Coastguard Worker paramsNeeded = 1;
302*5e7646d2SAndroid Build Coastguard Worker break;
303*5e7646d2SAndroid Build Coastguard Worker case TLS_DH_anon_WITH_RC4_128_MD5:
304*5e7646d2SAndroid Build Coastguard Worker cipherName = "TLS_DH_anon_WITH_RC4_128_MD5";
305*5e7646d2SAndroid Build Coastguard Worker paramsNeeded = 1;
306*5e7646d2SAndroid Build Coastguard Worker break;
307*5e7646d2SAndroid Build Coastguard Worker case TLS_DH_anon_WITH_3DES_EDE_CBC_SHA:
308*5e7646d2SAndroid Build Coastguard Worker cipherName = "TLS_DH_anon_WITH_3DES_EDE_CBC_SHA";
309*5e7646d2SAndroid Build Coastguard Worker paramsNeeded = 1;
310*5e7646d2SAndroid Build Coastguard Worker break;
311*5e7646d2SAndroid Build Coastguard Worker case TLS_DH_anon_WITH_AES_128_CBC_SHA256:
312*5e7646d2SAndroid Build Coastguard Worker cipherName = "TLS_DH_anon_WITH_AES_128_CBC_SHA256";
313*5e7646d2SAndroid Build Coastguard Worker paramsNeeded = 1;
314*5e7646d2SAndroid Build Coastguard Worker break;
315*5e7646d2SAndroid Build Coastguard Worker case TLS_DH_anon_WITH_AES_256_CBC_SHA256:
316*5e7646d2SAndroid Build Coastguard Worker cipherName = "TLS_DH_anon_WITH_AES_256_CBC_SHA256";
317*5e7646d2SAndroid Build Coastguard Worker paramsNeeded = 1;
318*5e7646d2SAndroid Build Coastguard Worker break;
319*5e7646d2SAndroid Build Coastguard Worker case TLS_PSK_WITH_RC4_128_SHA:
320*5e7646d2SAndroid Build Coastguard Worker cipherName = "TLS_PSK_WITH_RC4_128_SHA";
321*5e7646d2SAndroid Build Coastguard Worker break;
322*5e7646d2SAndroid Build Coastguard Worker case TLS_PSK_WITH_3DES_EDE_CBC_SHA:
323*5e7646d2SAndroid Build Coastguard Worker cipherName = "TLS_PSK_WITH_3DES_EDE_CBC_SHA";
324*5e7646d2SAndroid Build Coastguard Worker break;
325*5e7646d2SAndroid Build Coastguard Worker case TLS_PSK_WITH_AES_128_CBC_SHA:
326*5e7646d2SAndroid Build Coastguard Worker cipherName = "TLS_PSK_WITH_AES_128_CBC_SHA";
327*5e7646d2SAndroid Build Coastguard Worker break;
328*5e7646d2SAndroid Build Coastguard Worker case TLS_PSK_WITH_AES_256_CBC_SHA:
329*5e7646d2SAndroid Build Coastguard Worker cipherName = "TLS_PSK_WITH_AES_256_CBC_SHA";
330*5e7646d2SAndroid Build Coastguard Worker break;
331*5e7646d2SAndroid Build Coastguard Worker case TLS_DHE_PSK_WITH_RC4_128_SHA:
332*5e7646d2SAndroid Build Coastguard Worker cipherName = "TLS_DHE_PSK_WITH_RC4_128_SHA";
333*5e7646d2SAndroid Build Coastguard Worker paramsNeeded = 1;
334*5e7646d2SAndroid Build Coastguard Worker break;
335*5e7646d2SAndroid Build Coastguard Worker case TLS_DHE_PSK_WITH_3DES_EDE_CBC_SHA:
336*5e7646d2SAndroid Build Coastguard Worker cipherName = "TLS_DHE_PSK_WITH_3DES_EDE_CBC_SHA";
337*5e7646d2SAndroid Build Coastguard Worker paramsNeeded = 1;
338*5e7646d2SAndroid Build Coastguard Worker break;
339*5e7646d2SAndroid Build Coastguard Worker case TLS_DHE_PSK_WITH_AES_128_CBC_SHA:
340*5e7646d2SAndroid Build Coastguard Worker cipherName = "TLS_DHE_PSK_WITH_AES_128_CBC_SHA";
341*5e7646d2SAndroid Build Coastguard Worker paramsNeeded = 1;
342*5e7646d2SAndroid Build Coastguard Worker break;
343*5e7646d2SAndroid Build Coastguard Worker case TLS_DHE_PSK_WITH_AES_256_CBC_SHA:
344*5e7646d2SAndroid Build Coastguard Worker cipherName = "TLS_DHE_PSK_WITH_AES_256_CBC_SHA";
345*5e7646d2SAndroid Build Coastguard Worker paramsNeeded = 1;
346*5e7646d2SAndroid Build Coastguard Worker break;
347*5e7646d2SAndroid Build Coastguard Worker case TLS_RSA_PSK_WITH_RC4_128_SHA:
348*5e7646d2SAndroid Build Coastguard Worker cipherName = "TLS_RSA_PSK_WITH_RC4_128_SHA";
349*5e7646d2SAndroid Build Coastguard Worker break;
350*5e7646d2SAndroid Build Coastguard Worker case TLS_RSA_PSK_WITH_3DES_EDE_CBC_SHA:
351*5e7646d2SAndroid Build Coastguard Worker cipherName = "TLS_RSA_PSK_WITH_3DES_EDE_CBC_SHA";
352*5e7646d2SAndroid Build Coastguard Worker break;
353*5e7646d2SAndroid Build Coastguard Worker case TLS_RSA_PSK_WITH_AES_128_CBC_SHA:
354*5e7646d2SAndroid Build Coastguard Worker cipherName = "TLS_RSA_PSK_WITH_AES_128_CBC_SHA";
355*5e7646d2SAndroid Build Coastguard Worker break;
356*5e7646d2SAndroid Build Coastguard Worker case TLS_RSA_PSK_WITH_AES_256_CBC_SHA:
357*5e7646d2SAndroid Build Coastguard Worker cipherName = "TLS_RSA_PSK_WITH_AES_256_CBC_SHA";
358*5e7646d2SAndroid Build Coastguard Worker break;
359*5e7646d2SAndroid Build Coastguard Worker case TLS_PSK_WITH_NULL_SHA:
360*5e7646d2SAndroid Build Coastguard Worker cipherName = "TLS_PSK_WITH_NULL_SHA";
361*5e7646d2SAndroid Build Coastguard Worker break;
362*5e7646d2SAndroid Build Coastguard Worker case TLS_DHE_PSK_WITH_NULL_SHA:
363*5e7646d2SAndroid Build Coastguard Worker cipherName = "TLS_DHE_PSK_WITH_NULL_SHA";
364*5e7646d2SAndroid Build Coastguard Worker paramsNeeded = 1;
365*5e7646d2SAndroid Build Coastguard Worker break;
366*5e7646d2SAndroid Build Coastguard Worker case TLS_RSA_PSK_WITH_NULL_SHA:
367*5e7646d2SAndroid Build Coastguard Worker cipherName = "TLS_RSA_PSK_WITH_NULL_SHA";
368*5e7646d2SAndroid Build Coastguard Worker break;
369*5e7646d2SAndroid Build Coastguard Worker case TLS_RSA_WITH_AES_128_GCM_SHA256:
370*5e7646d2SAndroid Build Coastguard Worker cipherName = "TLS_RSA_WITH_AES_128_GCM_SHA256";
371*5e7646d2SAndroid Build Coastguard Worker break;
372*5e7646d2SAndroid Build Coastguard Worker case TLS_RSA_WITH_AES_256_GCM_SHA384:
373*5e7646d2SAndroid Build Coastguard Worker cipherName = "TLS_RSA_WITH_AES_256_GCM_SHA384";
374*5e7646d2SAndroid Build Coastguard Worker break;
375*5e7646d2SAndroid Build Coastguard Worker case TLS_DHE_RSA_WITH_AES_128_GCM_SHA256:
376*5e7646d2SAndroid Build Coastguard Worker cipherName = "TLS_DHE_RSA_WITH_AES_128_GCM_SHA256";
377*5e7646d2SAndroid Build Coastguard Worker paramsNeeded = 1;
378*5e7646d2SAndroid Build Coastguard Worker break;
379*5e7646d2SAndroid Build Coastguard Worker case TLS_DHE_RSA_WITH_AES_256_GCM_SHA384:
380*5e7646d2SAndroid Build Coastguard Worker cipherName = "TLS_DHE_RSA_WITH_AES_256_GCM_SHA384";
381*5e7646d2SAndroid Build Coastguard Worker paramsNeeded = 1;
382*5e7646d2SAndroid Build Coastguard Worker break;
383*5e7646d2SAndroid Build Coastguard Worker case TLS_DH_RSA_WITH_AES_128_GCM_SHA256:
384*5e7646d2SAndroid Build Coastguard Worker cipherName = "TLS_DH_RSA_WITH_AES_128_GCM_SHA256";
385*5e7646d2SAndroid Build Coastguard Worker paramsNeeded = 1;
386*5e7646d2SAndroid Build Coastguard Worker break;
387*5e7646d2SAndroid Build Coastguard Worker case TLS_DH_RSA_WITH_AES_256_GCM_SHA384:
388*5e7646d2SAndroid Build Coastguard Worker cipherName = "TLS_DH_RSA_WITH_AES_256_GCM_SHA384";
389*5e7646d2SAndroid Build Coastguard Worker paramsNeeded = 1;
390*5e7646d2SAndroid Build Coastguard Worker break;
391*5e7646d2SAndroid Build Coastguard Worker case TLS_DHE_DSS_WITH_AES_128_GCM_SHA256:
392*5e7646d2SAndroid Build Coastguard Worker cipherName = "TLS_DHE_DSS_WITH_AES_128_GCM_SHA256";
393*5e7646d2SAndroid Build Coastguard Worker paramsNeeded = 1;
394*5e7646d2SAndroid Build Coastguard Worker break;
395*5e7646d2SAndroid Build Coastguard Worker case TLS_DHE_DSS_WITH_AES_256_GCM_SHA384:
396*5e7646d2SAndroid Build Coastguard Worker cipherName = "TLS_DHE_DSS_WITH_AES_256_GCM_SHA384";
397*5e7646d2SAndroid Build Coastguard Worker paramsNeeded = 1;
398*5e7646d2SAndroid Build Coastguard Worker break;
399*5e7646d2SAndroid Build Coastguard Worker case TLS_DH_DSS_WITH_AES_128_GCM_SHA256:
400*5e7646d2SAndroid Build Coastguard Worker cipherName = "TLS_DH_DSS_WITH_AES_128_GCM_SHA256";
401*5e7646d2SAndroid Build Coastguard Worker paramsNeeded = 1;
402*5e7646d2SAndroid Build Coastguard Worker break;
403*5e7646d2SAndroid Build Coastguard Worker case TLS_DH_DSS_WITH_AES_256_GCM_SHA384:
404*5e7646d2SAndroid Build Coastguard Worker cipherName = "TLS_DH_DSS_WITH_AES_256_GCM_SHA384";
405*5e7646d2SAndroid Build Coastguard Worker paramsNeeded = 1;
406*5e7646d2SAndroid Build Coastguard Worker break;
407*5e7646d2SAndroid Build Coastguard Worker case TLS_DH_anon_WITH_AES_128_GCM_SHA256:
408*5e7646d2SAndroid Build Coastguard Worker cipherName = "TLS_DH_anon_WITH_AES_128_GCM_SHA256";
409*5e7646d2SAndroid Build Coastguard Worker paramsNeeded = 1;
410*5e7646d2SAndroid Build Coastguard Worker break;
411*5e7646d2SAndroid Build Coastguard Worker case TLS_DH_anon_WITH_AES_256_GCM_SHA384:
412*5e7646d2SAndroid Build Coastguard Worker cipherName = "TLS_DH_anon_WITH_AES_256_GCM_SHA384";
413*5e7646d2SAndroid Build Coastguard Worker paramsNeeded = 1;
414*5e7646d2SAndroid Build Coastguard Worker break;
415*5e7646d2SAndroid Build Coastguard Worker case TLS_PSK_WITH_AES_128_GCM_SHA256:
416*5e7646d2SAndroid Build Coastguard Worker cipherName = "TLS_PSK_WITH_AES_128_GCM_SHA256";
417*5e7646d2SAndroid Build Coastguard Worker break;
418*5e7646d2SAndroid Build Coastguard Worker case TLS_PSK_WITH_AES_256_GCM_SHA384:
419*5e7646d2SAndroid Build Coastguard Worker cipherName = "TLS_PSK_WITH_AES_256_GCM_SHA384";
420*5e7646d2SAndroid Build Coastguard Worker break;
421*5e7646d2SAndroid Build Coastguard Worker case TLS_DHE_PSK_WITH_AES_128_GCM_SHA256:
422*5e7646d2SAndroid Build Coastguard Worker cipherName = "TLS_DHE_PSK_WITH_AES_128_GCM_SHA256";
423*5e7646d2SAndroid Build Coastguard Worker paramsNeeded = 1;
424*5e7646d2SAndroid Build Coastguard Worker break;
425*5e7646d2SAndroid Build Coastguard Worker case TLS_DHE_PSK_WITH_AES_256_GCM_SHA384:
426*5e7646d2SAndroid Build Coastguard Worker cipherName = "TLS_DHE_PSK_WITH_AES_256_GCM_SHA384";
427*5e7646d2SAndroid Build Coastguard Worker paramsNeeded = 1;
428*5e7646d2SAndroid Build Coastguard Worker break;
429*5e7646d2SAndroid Build Coastguard Worker case TLS_RSA_PSK_WITH_AES_128_GCM_SHA256:
430*5e7646d2SAndroid Build Coastguard Worker cipherName = "TLS_RSA_PSK_WITH_AES_128_GCM_SHA256";
431*5e7646d2SAndroid Build Coastguard Worker break;
432*5e7646d2SAndroid Build Coastguard Worker case TLS_RSA_PSK_WITH_AES_256_GCM_SHA384:
433*5e7646d2SAndroid Build Coastguard Worker cipherName = "TLS_RSA_PSK_WITH_AES_256_GCM_SHA384";
434*5e7646d2SAndroid Build Coastguard Worker break;
435*5e7646d2SAndroid Build Coastguard Worker case TLS_PSK_WITH_AES_128_CBC_SHA256:
436*5e7646d2SAndroid Build Coastguard Worker cipherName = "TLS_PSK_WITH_AES_128_CBC_SHA256";
437*5e7646d2SAndroid Build Coastguard Worker break;
438*5e7646d2SAndroid Build Coastguard Worker case TLS_PSK_WITH_AES_256_CBC_SHA384:
439*5e7646d2SAndroid Build Coastguard Worker cipherName = "TLS_PSK_WITH_AES_256_CBC_SHA384";
440*5e7646d2SAndroid Build Coastguard Worker break;
441*5e7646d2SAndroid Build Coastguard Worker case TLS_PSK_WITH_NULL_SHA256:
442*5e7646d2SAndroid Build Coastguard Worker cipherName = "TLS_PSK_WITH_NULL_SHA256";
443*5e7646d2SAndroid Build Coastguard Worker break;
444*5e7646d2SAndroid Build Coastguard Worker case TLS_PSK_WITH_NULL_SHA384:
445*5e7646d2SAndroid Build Coastguard Worker cipherName = "TLS_PSK_WITH_NULL_SHA384";
446*5e7646d2SAndroid Build Coastguard Worker break;
447*5e7646d2SAndroid Build Coastguard Worker case TLS_DHE_PSK_WITH_AES_128_CBC_SHA256:
448*5e7646d2SAndroid Build Coastguard Worker cipherName = "TLS_DHE_PSK_WITH_AES_128_CBC_SHA256";
449*5e7646d2SAndroid Build Coastguard Worker paramsNeeded = 1;
450*5e7646d2SAndroid Build Coastguard Worker break;
451*5e7646d2SAndroid Build Coastguard Worker case TLS_DHE_PSK_WITH_AES_256_CBC_SHA384:
452*5e7646d2SAndroid Build Coastguard Worker cipherName = "TLS_DHE_PSK_WITH_AES_256_CBC_SHA384";
453*5e7646d2SAndroid Build Coastguard Worker paramsNeeded = 1;
454*5e7646d2SAndroid Build Coastguard Worker break;
455*5e7646d2SAndroid Build Coastguard Worker case TLS_DHE_PSK_WITH_NULL_SHA256:
456*5e7646d2SAndroid Build Coastguard Worker cipherName = "TLS_DHE_PSK_WITH_NULL_SHA256";
457*5e7646d2SAndroid Build Coastguard Worker paramsNeeded = 1;
458*5e7646d2SAndroid Build Coastguard Worker break;
459*5e7646d2SAndroid Build Coastguard Worker case TLS_DHE_PSK_WITH_NULL_SHA384:
460*5e7646d2SAndroid Build Coastguard Worker cipherName = "TLS_DHE_PSK_WITH_NULL_SHA384";
461*5e7646d2SAndroid Build Coastguard Worker paramsNeeded = 1;
462*5e7646d2SAndroid Build Coastguard Worker break;
463*5e7646d2SAndroid Build Coastguard Worker case TLS_RSA_PSK_WITH_AES_128_CBC_SHA256:
464*5e7646d2SAndroid Build Coastguard Worker cipherName = "TLS_RSA_PSK_WITH_AES_128_CBC_SHA256";
465*5e7646d2SAndroid Build Coastguard Worker break;
466*5e7646d2SAndroid Build Coastguard Worker case TLS_RSA_PSK_WITH_AES_256_CBC_SHA384:
467*5e7646d2SAndroid Build Coastguard Worker cipherName = "TLS_RSA_PSK_WITH_AES_256_CBC_SHA384";
468*5e7646d2SAndroid Build Coastguard Worker break;
469*5e7646d2SAndroid Build Coastguard Worker case TLS_RSA_PSK_WITH_NULL_SHA256:
470*5e7646d2SAndroid Build Coastguard Worker cipherName = "TLS_RSA_PSK_WITH_NULL_SHA256";
471*5e7646d2SAndroid Build Coastguard Worker break;
472*5e7646d2SAndroid Build Coastguard Worker case TLS_RSA_PSK_WITH_NULL_SHA384:
473*5e7646d2SAndroid Build Coastguard Worker cipherName = "TLS_RSA_PSK_WITH_NULL_SHA384";
474*5e7646d2SAndroid Build Coastguard Worker break;
475*5e7646d2SAndroid Build Coastguard Worker case TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256:
476*5e7646d2SAndroid Build Coastguard Worker cipherName = "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256";
477*5e7646d2SAndroid Build Coastguard Worker paramsNeeded = 1;
478*5e7646d2SAndroid Build Coastguard Worker break;
479*5e7646d2SAndroid Build Coastguard Worker case TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384:
480*5e7646d2SAndroid Build Coastguard Worker cipherName = "TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384";
481*5e7646d2SAndroid Build Coastguard Worker paramsNeeded = 1;
482*5e7646d2SAndroid Build Coastguard Worker break;
483*5e7646d2SAndroid Build Coastguard Worker case TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256:
484*5e7646d2SAndroid Build Coastguard Worker cipherName = "TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256";
485*5e7646d2SAndroid Build Coastguard Worker paramsNeeded = 1;
486*5e7646d2SAndroid Build Coastguard Worker break;
487*5e7646d2SAndroid Build Coastguard Worker case TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384:
488*5e7646d2SAndroid Build Coastguard Worker cipherName = "TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384";
489*5e7646d2SAndroid Build Coastguard Worker paramsNeeded = 1;
490*5e7646d2SAndroid Build Coastguard Worker break;
491*5e7646d2SAndroid Build Coastguard Worker case TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256:
492*5e7646d2SAndroid Build Coastguard Worker cipherName = "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256";
493*5e7646d2SAndroid Build Coastguard Worker paramsNeeded = 1;
494*5e7646d2SAndroid Build Coastguard Worker break;
495*5e7646d2SAndroid Build Coastguard Worker case TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384:
496*5e7646d2SAndroid Build Coastguard Worker cipherName = "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384";
497*5e7646d2SAndroid Build Coastguard Worker paramsNeeded = 1;
498*5e7646d2SAndroid Build Coastguard Worker break;
499*5e7646d2SAndroid Build Coastguard Worker case TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256:
500*5e7646d2SAndroid Build Coastguard Worker cipherName = "TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256";
501*5e7646d2SAndroid Build Coastguard Worker paramsNeeded = 1;
502*5e7646d2SAndroid Build Coastguard Worker break;
503*5e7646d2SAndroid Build Coastguard Worker case TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384:
504*5e7646d2SAndroid Build Coastguard Worker cipherName = "TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384";
505*5e7646d2SAndroid Build Coastguard Worker paramsNeeded = 1;
506*5e7646d2SAndroid Build Coastguard Worker break;
507*5e7646d2SAndroid Build Coastguard Worker case TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256:
508*5e7646d2SAndroid Build Coastguard Worker cipherName = "TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256";
509*5e7646d2SAndroid Build Coastguard Worker paramsNeeded = 1;
510*5e7646d2SAndroid Build Coastguard Worker break;
511*5e7646d2SAndroid Build Coastguard Worker case TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384:
512*5e7646d2SAndroid Build Coastguard Worker cipherName = "TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384";
513*5e7646d2SAndroid Build Coastguard Worker paramsNeeded = 1;
514*5e7646d2SAndroid Build Coastguard Worker break;
515*5e7646d2SAndroid Build Coastguard Worker case TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256:
516*5e7646d2SAndroid Build Coastguard Worker cipherName = "TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256";
517*5e7646d2SAndroid Build Coastguard Worker paramsNeeded = 1;
518*5e7646d2SAndroid Build Coastguard Worker break;
519*5e7646d2SAndroid Build Coastguard Worker case TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384:
520*5e7646d2SAndroid Build Coastguard Worker cipherName = "TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384";
521*5e7646d2SAndroid Build Coastguard Worker paramsNeeded = 1;
522*5e7646d2SAndroid Build Coastguard Worker break;
523*5e7646d2SAndroid Build Coastguard Worker case TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256:
524*5e7646d2SAndroid Build Coastguard Worker cipherName = "TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256";
525*5e7646d2SAndroid Build Coastguard Worker paramsNeeded = 1;
526*5e7646d2SAndroid Build Coastguard Worker break;
527*5e7646d2SAndroid Build Coastguard Worker case TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384:
528*5e7646d2SAndroid Build Coastguard Worker cipherName = "TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384";
529*5e7646d2SAndroid Build Coastguard Worker paramsNeeded = 1;
530*5e7646d2SAndroid Build Coastguard Worker break;
531*5e7646d2SAndroid Build Coastguard Worker case TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256:
532*5e7646d2SAndroid Build Coastguard Worker cipherName = "TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256";
533*5e7646d2SAndroid Build Coastguard Worker paramsNeeded = 1;
534*5e7646d2SAndroid Build Coastguard Worker break;
535*5e7646d2SAndroid Build Coastguard Worker case TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384:
536*5e7646d2SAndroid Build Coastguard Worker cipherName = "TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384";
537*5e7646d2SAndroid Build Coastguard Worker paramsNeeded = 1;
538*5e7646d2SAndroid Build Coastguard Worker break;
539*5e7646d2SAndroid Build Coastguard Worker case TLS_RSA_WITH_AES_128_CBC_SHA:
540*5e7646d2SAndroid Build Coastguard Worker cipherName = "TLS_RSA_WITH_AES_128_CBC_SHA";
541*5e7646d2SAndroid Build Coastguard Worker break;
542*5e7646d2SAndroid Build Coastguard Worker case TLS_DH_DSS_WITH_AES_128_CBC_SHA:
543*5e7646d2SAndroid Build Coastguard Worker cipherName = "TLS_DH_DSS_WITH_AES_128_CBC_SHA";
544*5e7646d2SAndroid Build Coastguard Worker paramsNeeded = 1;
545*5e7646d2SAndroid Build Coastguard Worker break;
546*5e7646d2SAndroid Build Coastguard Worker case TLS_DH_RSA_WITH_AES_128_CBC_SHA:
547*5e7646d2SAndroid Build Coastguard Worker cipherName = "TLS_DH_RSA_WITH_AES_128_CBC_SHA";
548*5e7646d2SAndroid Build Coastguard Worker paramsNeeded = 1;
549*5e7646d2SAndroid Build Coastguard Worker break;
550*5e7646d2SAndroid Build Coastguard Worker case TLS_DHE_DSS_WITH_AES_128_CBC_SHA:
551*5e7646d2SAndroid Build Coastguard Worker cipherName = "TLS_DHE_DSS_WITH_AES_128_CBC_SHA";
552*5e7646d2SAndroid Build Coastguard Worker paramsNeeded = 1;
553*5e7646d2SAndroid Build Coastguard Worker break;
554*5e7646d2SAndroid Build Coastguard Worker case TLS_DHE_RSA_WITH_AES_128_CBC_SHA:
555*5e7646d2SAndroid Build Coastguard Worker cipherName = "TLS_DHE_RSA_WITH_AES_128_CBC_SHA";
556*5e7646d2SAndroid Build Coastguard Worker paramsNeeded = 1;
557*5e7646d2SAndroid Build Coastguard Worker break;
558*5e7646d2SAndroid Build Coastguard Worker case TLS_DH_anon_WITH_AES_128_CBC_SHA:
559*5e7646d2SAndroid Build Coastguard Worker cipherName = "TLS_DH_anon_WITH_AES_128_CBC_SHA";
560*5e7646d2SAndroid Build Coastguard Worker paramsNeeded = 1;
561*5e7646d2SAndroid Build Coastguard Worker break;
562*5e7646d2SAndroid Build Coastguard Worker case TLS_RSA_WITH_AES_256_CBC_SHA:
563*5e7646d2SAndroid Build Coastguard Worker cipherName = "TLS_RSA_WITH_AES_256_CBC_SHA";
564*5e7646d2SAndroid Build Coastguard Worker break;
565*5e7646d2SAndroid Build Coastguard Worker case TLS_DH_DSS_WITH_AES_256_CBC_SHA:
566*5e7646d2SAndroid Build Coastguard Worker cipherName = "TLS_DH_DSS_WITH_AES_256_CBC_SHA";
567*5e7646d2SAndroid Build Coastguard Worker paramsNeeded = 1;
568*5e7646d2SAndroid Build Coastguard Worker break;
569*5e7646d2SAndroid Build Coastguard Worker case TLS_DH_RSA_WITH_AES_256_CBC_SHA:
570*5e7646d2SAndroid Build Coastguard Worker cipherName = "TLS_DH_RSA_WITH_AES_256_CBC_SHA";
571*5e7646d2SAndroid Build Coastguard Worker paramsNeeded = 1;
572*5e7646d2SAndroid Build Coastguard Worker break;
573*5e7646d2SAndroid Build Coastguard Worker case TLS_DHE_DSS_WITH_AES_256_CBC_SHA:
574*5e7646d2SAndroid Build Coastguard Worker cipherName = "TLS_DHE_DSS_WITH_AES_256_CBC_SHA";
575*5e7646d2SAndroid Build Coastguard Worker paramsNeeded = 1;
576*5e7646d2SAndroid Build Coastguard Worker break;
577*5e7646d2SAndroid Build Coastguard Worker case TLS_DHE_RSA_WITH_AES_256_CBC_SHA:
578*5e7646d2SAndroid Build Coastguard Worker cipherName = "TLS_DHE_RSA_WITH_AES_256_CBC_SHA";
579*5e7646d2SAndroid Build Coastguard Worker paramsNeeded = 1;
580*5e7646d2SAndroid Build Coastguard Worker break;
581*5e7646d2SAndroid Build Coastguard Worker case TLS_DH_anon_WITH_AES_256_CBC_SHA:
582*5e7646d2SAndroid Build Coastguard Worker cipherName = "TLS_DH_anon_WITH_AES_256_CBC_SHA";
583*5e7646d2SAndroid Build Coastguard Worker paramsNeeded = 1;
584*5e7646d2SAndroid Build Coastguard Worker break;
585*5e7646d2SAndroid Build Coastguard Worker case TLS_ECDH_ECDSA_WITH_NULL_SHA:
586*5e7646d2SAndroid Build Coastguard Worker cipherName = "TLS_ECDH_ECDSA_WITH_NULL_SHA";
587*5e7646d2SAndroid Build Coastguard Worker paramsNeeded = 1;
588*5e7646d2SAndroid Build Coastguard Worker break;
589*5e7646d2SAndroid Build Coastguard Worker case TLS_ECDH_ECDSA_WITH_RC4_128_SHA:
590*5e7646d2SAndroid Build Coastguard Worker cipherName = "TLS_ECDH_ECDSA_WITH_RC4_128_SHA";
591*5e7646d2SAndroid Build Coastguard Worker paramsNeeded = 1;
592*5e7646d2SAndroid Build Coastguard Worker break;
593*5e7646d2SAndroid Build Coastguard Worker case TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA:
594*5e7646d2SAndroid Build Coastguard Worker cipherName = "TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA";
595*5e7646d2SAndroid Build Coastguard Worker paramsNeeded = 1;
596*5e7646d2SAndroid Build Coastguard Worker break;
597*5e7646d2SAndroid Build Coastguard Worker case TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA:
598*5e7646d2SAndroid Build Coastguard Worker cipherName = "TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA";
599*5e7646d2SAndroid Build Coastguard Worker paramsNeeded = 1;
600*5e7646d2SAndroid Build Coastguard Worker break;
601*5e7646d2SAndroid Build Coastguard Worker case TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA:
602*5e7646d2SAndroid Build Coastguard Worker cipherName = "TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA";
603*5e7646d2SAndroid Build Coastguard Worker paramsNeeded = 1;
604*5e7646d2SAndroid Build Coastguard Worker break;
605*5e7646d2SAndroid Build Coastguard Worker case TLS_ECDHE_ECDSA_WITH_NULL_SHA:
606*5e7646d2SAndroid Build Coastguard Worker cipherName = "TLS_ECDHE_ECDSA_WITH_NULL_SHA";
607*5e7646d2SAndroid Build Coastguard Worker paramsNeeded = 1;
608*5e7646d2SAndroid Build Coastguard Worker break;
609*5e7646d2SAndroid Build Coastguard Worker case TLS_ECDHE_ECDSA_WITH_RC4_128_SHA:
610*5e7646d2SAndroid Build Coastguard Worker cipherName = "TLS_ECDHE_ECDSA_WITH_RC4_128_SHA";
611*5e7646d2SAndroid Build Coastguard Worker paramsNeeded = 1;
612*5e7646d2SAndroid Build Coastguard Worker break;
613*5e7646d2SAndroid Build Coastguard Worker case TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA:
614*5e7646d2SAndroid Build Coastguard Worker cipherName = "TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA";
615*5e7646d2SAndroid Build Coastguard Worker paramsNeeded = 1;
616*5e7646d2SAndroid Build Coastguard Worker break;
617*5e7646d2SAndroid Build Coastguard Worker case TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA:
618*5e7646d2SAndroid Build Coastguard Worker cipherName = "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA";
619*5e7646d2SAndroid Build Coastguard Worker paramsNeeded = 1;
620*5e7646d2SAndroid Build Coastguard Worker break;
621*5e7646d2SAndroid Build Coastguard Worker case TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA:
622*5e7646d2SAndroid Build Coastguard Worker cipherName = "TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA";
623*5e7646d2SAndroid Build Coastguard Worker paramsNeeded = 1;
624*5e7646d2SAndroid Build Coastguard Worker break;
625*5e7646d2SAndroid Build Coastguard Worker case TLS_ECDH_RSA_WITH_NULL_SHA:
626*5e7646d2SAndroid Build Coastguard Worker cipherName = "TLS_ECDH_RSA_WITH_NULL_SHA";
627*5e7646d2SAndroid Build Coastguard Worker paramsNeeded = 1;
628*5e7646d2SAndroid Build Coastguard Worker break;
629*5e7646d2SAndroid Build Coastguard Worker case TLS_ECDH_RSA_WITH_RC4_128_SHA:
630*5e7646d2SAndroid Build Coastguard Worker cipherName = "TLS_ECDH_RSA_WITH_RC4_128_SHA";
631*5e7646d2SAndroid Build Coastguard Worker paramsNeeded = 1;
632*5e7646d2SAndroid Build Coastguard Worker break;
633*5e7646d2SAndroid Build Coastguard Worker case TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA:
634*5e7646d2SAndroid Build Coastguard Worker cipherName = "TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA";
635*5e7646d2SAndroid Build Coastguard Worker paramsNeeded = 1;
636*5e7646d2SAndroid Build Coastguard Worker break;
637*5e7646d2SAndroid Build Coastguard Worker case TLS_ECDH_RSA_WITH_AES_128_CBC_SHA:
638*5e7646d2SAndroid Build Coastguard Worker cipherName = "TLS_ECDH_RSA_WITH_AES_128_CBC_SHA";
639*5e7646d2SAndroid Build Coastguard Worker paramsNeeded = 1;
640*5e7646d2SAndroid Build Coastguard Worker break;
641*5e7646d2SAndroid Build Coastguard Worker case TLS_ECDH_RSA_WITH_AES_256_CBC_SHA:
642*5e7646d2SAndroid Build Coastguard Worker cipherName = "TLS_ECDH_RSA_WITH_AES_256_CBC_SHA";
643*5e7646d2SAndroid Build Coastguard Worker paramsNeeded = 1;
644*5e7646d2SAndroid Build Coastguard Worker break;
645*5e7646d2SAndroid Build Coastguard Worker case TLS_ECDHE_RSA_WITH_NULL_SHA:
646*5e7646d2SAndroid Build Coastguard Worker cipherName = "TLS_ECDHE_RSA_WITH_NULL_SHA";
647*5e7646d2SAndroid Build Coastguard Worker paramsNeeded = 1;
648*5e7646d2SAndroid Build Coastguard Worker break;
649*5e7646d2SAndroid Build Coastguard Worker case TLS_ECDHE_RSA_WITH_RC4_128_SHA:
650*5e7646d2SAndroid Build Coastguard Worker cipherName = "TLS_ECDHE_RSA_WITH_RC4_128_SHA";
651*5e7646d2SAndroid Build Coastguard Worker paramsNeeded = 1;
652*5e7646d2SAndroid Build Coastguard Worker break;
653*5e7646d2SAndroid Build Coastguard Worker case TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA:
654*5e7646d2SAndroid Build Coastguard Worker cipherName = "TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA";
655*5e7646d2SAndroid Build Coastguard Worker paramsNeeded = 1;
656*5e7646d2SAndroid Build Coastguard Worker break;
657*5e7646d2SAndroid Build Coastguard Worker case TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA:
658*5e7646d2SAndroid Build Coastguard Worker cipherName = "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA";
659*5e7646d2SAndroid Build Coastguard Worker paramsNeeded = 1;
660*5e7646d2SAndroid Build Coastguard Worker break;
661*5e7646d2SAndroid Build Coastguard Worker case TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA:
662*5e7646d2SAndroid Build Coastguard Worker cipherName = "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA";
663*5e7646d2SAndroid Build Coastguard Worker paramsNeeded = 1;
664*5e7646d2SAndroid Build Coastguard Worker break;
665*5e7646d2SAndroid Build Coastguard Worker case TLS_ECDH_anon_WITH_NULL_SHA:
666*5e7646d2SAndroid Build Coastguard Worker cipherName = "TLS_ECDH_anon_WITH_NULL_SHA";
667*5e7646d2SAndroid Build Coastguard Worker paramsNeeded = 1;
668*5e7646d2SAndroid Build Coastguard Worker break;
669*5e7646d2SAndroid Build Coastguard Worker case TLS_ECDH_anon_WITH_RC4_128_SHA:
670*5e7646d2SAndroid Build Coastguard Worker cipherName = "TLS_ECDH_anon_WITH_RC4_128_SHA";
671*5e7646d2SAndroid Build Coastguard Worker paramsNeeded = 1;
672*5e7646d2SAndroid Build Coastguard Worker break;
673*5e7646d2SAndroid Build Coastguard Worker case TLS_ECDH_anon_WITH_3DES_EDE_CBC_SHA:
674*5e7646d2SAndroid Build Coastguard Worker cipherName = "TLS_ECDH_anon_WITH_3DES_EDE_CBC_SHA";
675*5e7646d2SAndroid Build Coastguard Worker paramsNeeded = 1;
676*5e7646d2SAndroid Build Coastguard Worker break;
677*5e7646d2SAndroid Build Coastguard Worker case TLS_ECDH_anon_WITH_AES_128_CBC_SHA:
678*5e7646d2SAndroid Build Coastguard Worker cipherName = "TLS_ECDH_anon_WITH_AES_128_CBC_SHA";
679*5e7646d2SAndroid Build Coastguard Worker paramsNeeded = 1;
680*5e7646d2SAndroid Build Coastguard Worker break;
681*5e7646d2SAndroid Build Coastguard Worker case TLS_ECDH_anon_WITH_AES_256_CBC_SHA:
682*5e7646d2SAndroid Build Coastguard Worker cipherName = "TLS_ECDH_anon_WITH_AES_256_CBC_SHA";
683*5e7646d2SAndroid Build Coastguard Worker paramsNeeded = 1;
684*5e7646d2SAndroid Build Coastguard Worker break;
685*5e7646d2SAndroid Build Coastguard Worker default :
686*5e7646d2SAndroid Build Coastguard Worker snprintf(unknownCipherName, sizeof(unknownCipherName), "UNKNOWN_%04X", cipher);
687*5e7646d2SAndroid Build Coastguard Worker cipherName = unknownCipherName;
688*5e7646d2SAndroid Build Coastguard Worker break;
689*5e7646d2SAndroid Build Coastguard Worker }
690*5e7646d2SAndroid Build Coastguard Worker
691*5e7646d2SAndroid Build Coastguard Worker if (cipher == TLS_RSA_WITH_RC4_128_MD5 ||
692*5e7646d2SAndroid Build Coastguard Worker cipher == TLS_RSA_WITH_RC4_128_SHA)
693*5e7646d2SAndroid Build Coastguard Worker {
694*5e7646d2SAndroid Build Coastguard Worker printf("%s: ERROR (Printers MUST NOT negotiate RC4 cipher suites.)\n", server);
695*5e7646d2SAndroid Build Coastguard Worker httpClose(http);
696*5e7646d2SAndroid Build Coastguard Worker return (1);
697*5e7646d2SAndroid Build Coastguard Worker }
698*5e7646d2SAndroid Build Coastguard Worker
699*5e7646d2SAndroid Build Coastguard Worker if ((err = SSLGetDiffieHellmanParams(http->tls, ¶ms, ¶msLen)) != noErr && paramsNeeded)
700*5e7646d2SAndroid Build Coastguard Worker {
701*5e7646d2SAndroid Build Coastguard Worker printf("%s: ERROR (Unable to get Diffie-Hellman parameters - %d)\n", server, (int)err);
702*5e7646d2SAndroid Build Coastguard Worker httpClose(http);
703*5e7646d2SAndroid Build Coastguard Worker return (1);
704*5e7646d2SAndroid Build Coastguard Worker }
705*5e7646d2SAndroid Build Coastguard Worker
706*5e7646d2SAndroid Build Coastguard Worker if (paramsLen < 128 && paramsLen != 0)
707*5e7646d2SAndroid Build Coastguard Worker {
708*5e7646d2SAndroid Build Coastguard Worker printf("%s: ERROR (Diffie-Hellman parameters MUST be at least 2048 bits, but Printer uses only %d bits/%d bytes)\n", server, (int)paramsLen * 8, (int)paramsLen);
709*5e7646d2SAndroid Build Coastguard Worker httpClose(http);
710*5e7646d2SAndroid Build Coastguard Worker return (1);
711*5e7646d2SAndroid Build Coastguard Worker }
712*5e7646d2SAndroid Build Coastguard Worker
713*5e7646d2SAndroid Build Coastguard Worker dhBits = (int)paramsLen * 8;
714*5e7646d2SAndroid Build Coastguard Worker #endif /* __APPLE__ */
715*5e7646d2SAndroid Build Coastguard Worker
716*5e7646d2SAndroid Build Coastguard Worker if (dhBits > 0)
717*5e7646d2SAndroid Build Coastguard Worker printf("%s: OK (TLS: %d.%d, %s, %d DH bits)\n", server, tlsVersion / 10, tlsVersion % 10, cipherName, dhBits);
718*5e7646d2SAndroid Build Coastguard Worker else
719*5e7646d2SAndroid Build Coastguard Worker printf("%s: OK (TLS: %d.%d, %s)\n", server, tlsVersion / 10, tlsVersion % 10, cipherName);
720*5e7646d2SAndroid Build Coastguard Worker
721*5e7646d2SAndroid Build Coastguard Worker printf(" %s\n", creds_str);
722*5e7646d2SAndroid Build Coastguard Worker
723*5e7646d2SAndroid Build Coastguard Worker if (verbose)
724*5e7646d2SAndroid Build Coastguard Worker {
725*5e7646d2SAndroid Build Coastguard Worker httpAssembleURI(HTTP_URI_CODING_ALL, uri, sizeof(uri), "ipps", NULL, host, port, resource);
726*5e7646d2SAndroid Build Coastguard Worker request = ippNewRequest(IPP_OP_GET_PRINTER_ATTRIBUTES);
727*5e7646d2SAndroid Build Coastguard Worker ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", NULL, uri);
728*5e7646d2SAndroid Build Coastguard Worker ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "requesting-user-name", NULL, cupsUser());
729*5e7646d2SAndroid Build Coastguard Worker ippAddStrings(request, IPP_TAG_OPERATION, IPP_TAG_KEYWORD, "requested-attributes", (int)(sizeof(pattrs) / sizeof(pattrs[0])), NULL, pattrs);
730*5e7646d2SAndroid Build Coastguard Worker
731*5e7646d2SAndroid Build Coastguard Worker response = cupsDoRequest(http, request, resource);
732*5e7646d2SAndroid Build Coastguard Worker
733*5e7646d2SAndroid Build Coastguard Worker for (attr = ippFirstAttribute(response); attr; attr = ippNextAttribute(response))
734*5e7646d2SAndroid Build Coastguard Worker {
735*5e7646d2SAndroid Build Coastguard Worker if (ippGetGroupTag(attr) != IPP_TAG_PRINTER)
736*5e7646d2SAndroid Build Coastguard Worker continue;
737*5e7646d2SAndroid Build Coastguard Worker
738*5e7646d2SAndroid Build Coastguard Worker if ((name = ippGetName(attr)) == NULL)
739*5e7646d2SAndroid Build Coastguard Worker continue;
740*5e7646d2SAndroid Build Coastguard Worker
741*5e7646d2SAndroid Build Coastguard Worker ippAttributeString(attr, value, sizeof(value));
742*5e7646d2SAndroid Build Coastguard Worker printf(" %s=%s\n", name, value);
743*5e7646d2SAndroid Build Coastguard Worker }
744*5e7646d2SAndroid Build Coastguard Worker
745*5e7646d2SAndroid Build Coastguard Worker ippDelete(response);
746*5e7646d2SAndroid Build Coastguard Worker puts("");
747*5e7646d2SAndroid Build Coastguard Worker }
748*5e7646d2SAndroid Build Coastguard Worker
749*5e7646d2SAndroid Build Coastguard Worker httpClose(http);
750*5e7646d2SAndroid Build Coastguard Worker
751*5e7646d2SAndroid Build Coastguard Worker return (0);
752*5e7646d2SAndroid Build Coastguard Worker }
753*5e7646d2SAndroid Build Coastguard Worker
754*5e7646d2SAndroid Build Coastguard Worker
755*5e7646d2SAndroid Build Coastguard Worker /*
756*5e7646d2SAndroid Build Coastguard Worker * 'usage()' - Show program usage.
757*5e7646d2SAndroid Build Coastguard Worker */
758*5e7646d2SAndroid Build Coastguard Worker
759*5e7646d2SAndroid Build Coastguard Worker static void
usage(void)760*5e7646d2SAndroid Build Coastguard Worker usage(void)
761*5e7646d2SAndroid Build Coastguard Worker {
762*5e7646d2SAndroid Build Coastguard Worker puts("Usage: ./tlscheck [options] server [port]");
763*5e7646d2SAndroid Build Coastguard Worker puts(" ./tlscheck [options] ipps://server[:port]/path");
764*5e7646d2SAndroid Build Coastguard Worker puts("");
765*5e7646d2SAndroid Build Coastguard Worker puts("Options:");
766*5e7646d2SAndroid Build Coastguard Worker puts(" --dh Allow DH/DHE key exchange");
767*5e7646d2SAndroid Build Coastguard Worker puts(" --no-cbc Disable CBC cipher suites");
768*5e7646d2SAndroid Build Coastguard Worker puts(" --no-tls10 Disable TLS/1.0");
769*5e7646d2SAndroid Build Coastguard Worker puts(" --rc4 Allow RC4 encryption");
770*5e7646d2SAndroid Build Coastguard Worker puts(" --tls10 Only use TLS/1.0");
771*5e7646d2SAndroid Build Coastguard Worker puts(" --tls11 Only use TLS/1.1");
772*5e7646d2SAndroid Build Coastguard Worker puts(" --tls12 Only use TLS/1.2");
773*5e7646d2SAndroid Build Coastguard Worker puts(" --tls13 Only use TLS/1.3");
774*5e7646d2SAndroid Build Coastguard Worker puts(" --verbose Be verbose");
775*5e7646d2SAndroid Build Coastguard Worker puts(" -4 Connect using IPv4 addresses only");
776*5e7646d2SAndroid Build Coastguard Worker puts(" -6 Connect using IPv6 addresses only");
777*5e7646d2SAndroid Build Coastguard Worker puts(" -v Be verbose");
778*5e7646d2SAndroid Build Coastguard Worker puts("");
779*5e7646d2SAndroid Build Coastguard Worker puts("The default port is 631.");
780*5e7646d2SAndroid Build Coastguard Worker
781*5e7646d2SAndroid Build Coastguard Worker exit(1);
782*5e7646d2SAndroid Build Coastguard Worker }
783*5e7646d2SAndroid Build Coastguard Worker #endif /* !HAVE_SSL */
784