Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-src
Path: blob/main/contrib/bearssl/tools/brssl.c
39536 views
1
/*
2
* Copyright (c) 2016 Thomas Pornin <[email protected]>
3
*
4
* Permission is hereby granted, free of charge, to any person obtaining
5
* a copy of this software and associated documentation files (the
6
* "Software"), to deal in the Software without restriction, including
7
* without limitation the rights to use, copy, modify, merge, publish,
8
* distribute, sublicense, and/or sell copies of the Software, and to
9
* permit persons to whom the Software is furnished to do so, subject to
10
* the following conditions:
11
*
12
* The above copyright notice and this permission notice shall be
13
* included in all copies or substantial portions of the Software.
14
*
15
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
16
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
17
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
18
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
19
* BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
20
* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
21
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22
* SOFTWARE.
23
*/
24
25
#include <stdio.h>
26
#include <stdlib.h>
27
#include <string.h>
28
#include <stdint.h>
29
#include <errno.h>
30
31
/*
32
* Network stuff on Windows requires some specific code.
33
*/
34
#ifdef _WIN32
35
#include <winsock2.h>
36
#include <ws2tcpip.h>
37
#pragma comment(lib, "Ws2_32.lib")
38
#endif
39
40
#include "brssl.h"
41
42
static void
43
usage(void)
44
{
45
fprintf(stderr, "usage: brssl command [ options ]\n");
46
fprintf(stderr, "available commands:\n");
47
fprintf(stderr, " client run SSL client\n");
48
fprintf(stderr, " server run SSL server\n");
49
fprintf(stderr, " verify verify certificate chain\n");
50
fprintf(stderr, " skey decode private key\n");
51
fprintf(stderr, " ta decode trust anchors\n");
52
fprintf(stderr, " chain make C code for certificate chains\n");
53
fprintf(stderr, " twrch run the Twrch protocol\n");
54
fprintf(stderr, " impl report on implementations\n");
55
}
56
57
int
58
main(int argc, char *argv[])
59
{
60
char *cmd;
61
62
if (argc < 2) {
63
usage();
64
return EXIT_FAILURE;
65
}
66
#ifdef _WIN32
67
{
68
WSADATA wd;
69
int r;
70
71
r = WSAStartup(MAKEWORD(2, 2), &wd);
72
if (r != 0) {
73
fprintf(stderr, "WARNING: network initialisation"
74
" failed (WSAStartup() returned %d)\n", r);
75
}
76
}
77
#endif
78
cmd = argv[1];
79
if (eqstr(cmd, "client")) {
80
if (do_client(argc - 2, argv + 2) < 0) {
81
return EXIT_FAILURE;
82
}
83
} else if (eqstr(cmd, "server")) {
84
if (do_server(argc - 2, argv + 2) < 0) {
85
return EXIT_FAILURE;
86
}
87
} else if (eqstr(cmd, "verify")) {
88
if (do_verify(argc - 2, argv + 2) < 0) {
89
return EXIT_FAILURE;
90
}
91
} else if (eqstr(cmd, "skey")) {
92
if (do_skey(argc - 2, argv + 2) < 0) {
93
return EXIT_FAILURE;
94
}
95
} else if (eqstr(cmd, "ta")) {
96
if (do_ta(argc - 2, argv + 2) < 0) {
97
return EXIT_FAILURE;
98
}
99
} else if (eqstr(cmd, "chain")) {
100
if (do_chain(argc - 2, argv + 2) < 0) {
101
return EXIT_FAILURE;
102
}
103
} else if (eqstr(cmd, "twrch")) {
104
int ret;
105
106
ret = do_twrch(argc - 2, argv + 2);
107
if (ret < 0) {
108
return EXIT_FAILURE;
109
} else {
110
return ret;
111
}
112
} else if (eqstr(cmd, "impl")) {
113
if (do_impl(argc - 2, argv + 2) < 0) {
114
return EXIT_FAILURE;
115
}
116
} else {
117
fprintf(stderr, "unknown command: '%s'\n", cmd);
118
usage();
119
return EXIT_FAILURE;
120
}
121
return 0;
122
}
123
124