• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  *  Copyright 2014-2022 The GmSSL Project. All Rights Reserved.
3  *
4  *  Licensed under the Apache License, Version 2.0 (the License); you may
5  *  not use this file except in compliance with the License.
6  *
7  *  http://www.apache.org/licenses/LICENSE-2.0
8  */
9 
10 
11 #include <stdio.h>
12 #include <string.h>
13 #include <stdlib.h>
14 
15 
16 extern int version_main(int argc, char **argv);
17 extern int rand_main(int argc, char **argv);
18 extern int certgen_main(int argc, char **argv);
19 extern int certparse_main(int argc, char **argv);
20 extern int certverify_main(int argc, char **argv);
21 extern int crlparse_main(int argc, char **argv);
22 extern int crlverify_main(int argc, char **argv);
23 extern int pbkdf2_main(int argc, char **argv);
24 extern int reqgen_main(int argc, char **argv);
25 extern int reqparse_main(int argc, char **argv);
26 extern int reqsign_main(int argc, char **argv);
27 extern int sm2keygen_main(int argc, char **argv);
28 extern int sm2sign_main(int argc, char **argv);
29 extern int sm2verify_main(int argc, char **argv);
30 extern int sm2encrypt_main(int argc, char **argv);
31 extern int sm2decrypt_main(int argc, char **argv);
32 extern int sm3_main(int argc, char **argv);
33 extern int sm3hmac_main(int argc, char **argv);
34 extern int sm4_main(int argc, char **argv);
35 extern int zuc_main(int argc, char **argv);
36 extern int sm9setup_main(int argc, char **argv);
37 extern int sm9keygen_main(int argc, char **argv);
38 extern int sm9sign_main(int argc, char **argv);
39 extern int sm9verify_main(int argc, char **argv);
40 extern int sm9encrypt_main(int argc, char **argv);
41 extern int sm9decrypt_main(int argc, char **argv);
42 extern int cmsparse_main(int argc, char **argv);
43 extern int cmsencrypt_main(int argc, char **argv);
44 extern int cmsdecrypt_main(int argc, char **argv);
45 extern int cmssign_main(int argc, char **argv);
46 extern int cmsverify_main(int argc, char **argv);
47 extern int tlcp_client_main(int argc, char **argv);
48 extern int tlcp_server_main(int argc, char **argv);
49 extern int tls12_client_main(int argc, char **argv);
50 extern int tls12_server_main(int argc, char **argv);
51 extern int tls13_client_main(int argc, char **argv);
52 extern int tls13_server_main(int argc, char **argv);
53 extern int sdfutil_main(int argc, char **argv);
54 extern int skfutil_main(int argc, char **argv);
55 
56 
57 static const char *options =
58 	"command [options]\n"
59 	"\n"
60 	"Commands:\n"
61 	"  help            Print this help message\n"
62 	"  version         Print version\n"
63 	"  rand            Generate random bytes\n"
64 	"  sm2keygen       Generate SM2 keypair\n"
65 	"  sm2sign         Generate SM2 signature\n"
66 	"  sm2verify       Verify SM2 signature\n"
67 	"  sm2encrypt      Encrypt with SM2 public key\n"
68 	"  sm2decrypt      Decrypt with SM2 private key\n"
69 	"  sm3             Generate SM3 hash\n"
70 	"  sm3hmac         Generate SM3 HMAC tag\n"
71 	"  sm4             Encrypt or decrypt with SM4\n"
72 	"  zuc             Encrypt or decrypt with ZUC\n"
73 	"  sm9setup        Generate SM9 master secret\n"
74 	"  sm9keygen       Generate SM9 private key\n"
75 	"  sm9sign         Generate SM9 signature\n"
76 	"  sm9verify       Verify SM9 signature\n"
77 	"  sm9encrypt      SM9 public key encryption\n"
78 	"  sm9decrypt      SM9 decryption\n"
79 	"  pbkdf2          Generate key from password\n"
80 	"  reqgen          Generate certificate signing request (CSR)\n"
81 	"  reqsign         Generate certificate from CSR\n"
82 	"  reqparse        Parse and print a CSR\n"
83 	"  crlparse        Verify a CRL with certificate\n"
84 	"  crlverify       Parse and print CRL\n"
85 	"  certgen         Generate a self-signed certificate\n"
86 	"  certparse       Parse and print certificates\n"
87 	"  certverify      Verify certificate chain\n"
88 	"  cmsparse        Parse cryptographic message syntax (CMS)\n"
89 	"  cmsencrypt      Generate CMS EnvelopedData\n"
90 	"  cmsdecrypt      Decrypt CMS EnvelopedData\n"
91 	"  cmssign         Generate CMS SignedData\n"
92 	"  cmsverify       Verify CMS SignedData\n"
93 	"  sdfutil         SDF crypto device utility\n"
94 	"  skfutil         SKF crypto device utility\n"
95 	"  tlcp_client     TLCP client\n"
96 	"  tlcp_server     TLCP server\n"
97 	"  tls12_client    TLS 1.2 client\n"
98 	"  tls12_server    TLS 1.2 server\n"
99 	"  tls13_client    TLS 1.3 client\n"
100 	"  tls13_server    TLS 1.3 server\n";
101 
102 
103 
main(int argc,char ** argv)104 int main(int argc, char **argv)
105 {
106 	int ret = 1;
107 	char *prog = argv[0];
108 
109 	argc--;
110 	argv++;
111 
112 	if (argc < 1) {
113 		printf("Usage: %s %s\n", prog, options);
114 		return 1;
115 	}
116 
117 	while (argc > 0) {
118 		if (!strcmp(*argv, "help")) {
119 			printf("usage: %s %s\n", prog, options);
120 			return 0;
121 		} else if (!strcmp(*argv, "version")) {
122 			return version_main(argc, argv);
123 		} else if (!strcmp(*argv, "rand")) {
124 			return rand_main(argc, argv);
125 		} else if (!strcmp(*argv, "certgen")) {
126 			return certgen_main(argc, argv);
127 		} else if (!strcmp(*argv, "certparse")) {
128 			return certparse_main(argc, argv);
129 		} else if (!strcmp(*argv, "certverify")) {
130 			return certverify_main(argc, argv);
131 		} else if (!strcmp(*argv, "crlparse")) {
132 			return crlparse_main(argc, argv);
133 		} else if (!strcmp(*argv, "crlverify")) {
134 			return crlverify_main(argc, argv);
135 		} else if (!strcmp(*argv, "reqgen")) {
136 			return reqgen_main(argc, argv);
137 		} else if (!strcmp(*argv, "reqparse")) {
138 			return reqparse_main(argc, argv);
139 		} else if (!strcmp(*argv, "reqsign")) {
140 			return reqsign_main(argc, argv);
141 		} else if (!strcmp(*argv, "pbkdf2")) {
142 			return pbkdf2_main(argc, argv);
143 		} else if (!strcmp(*argv, "sm2keygen")) {
144 			return sm2keygen_main(argc, argv);
145 		} else if (!strcmp(*argv, "sm2sign")) {
146 			return sm2sign_main(argc, argv);
147 		} else if (!strcmp(*argv, "sm2verify")) {
148 			return sm2verify_main(argc, argv);
149 		} else if (!strcmp(*argv, "sm2encrypt")) {
150 			return sm2encrypt_main(argc, argv);
151 		} else if (!strcmp(*argv, "sm2decrypt")) {
152 			return sm2decrypt_main(argc, argv);
153 		} else if (!strcmp(*argv, "sm3")) {
154 			return sm3_main(argc, argv);
155 		} else if (!strcmp(*argv, "sm3hmac")) {
156 			return sm3hmac_main(argc, argv);
157 		} else if (!strcmp(*argv, "sm4")) {
158 			return sm4_main(argc, argv);
159 		} else if (!strcmp(*argv, "zuc")) {
160 			return zuc_main(argc, argv);
161 		} else if (!strcmp(*argv, "sm9setup")) {
162 			return sm9setup_main(argc, argv);
163 		} else if (!strcmp(*argv, "sm9keygen")) {
164 			return sm9keygen_main(argc, argv);
165 		} else if (!strcmp(*argv, "sm9sign")) {
166 			return sm9sign_main(argc, argv);
167 		} else if (!strcmp(*argv, "sm9verify")) {
168 			return sm9verify_main(argc, argv);
169 		} else if (!strcmp(*argv, "sm9encrypt")) {
170 			return sm9encrypt_main(argc, argv);
171 		} else if (!strcmp(*argv, "sm9decrypt")) {
172 			return sm9decrypt_main(argc, argv);
173 		} else if (!strcmp(*argv, "cmsparse")) {
174 			return cmsparse_main(argc, argv);
175 		} else if (!strcmp(*argv, "cmsencrypt")) {
176 			return cmsencrypt_main(argc, argv);
177 		} else if (!strcmp(*argv, "cmsdecrypt")) {
178 			return cmsdecrypt_main(argc, argv);
179 		} else if (!strcmp(*argv, "cmssign")) {
180 			return cmssign_main(argc, argv);
181 		} else if (!strcmp(*argv, "cmsverify")) {
182 			return cmsverify_main(argc, argv);
183 		} else if (!strcmp(*argv, "tlcp_client")) {
184 			return tlcp_client_main(argc, argv);
185 		} else if (!strcmp(*argv, "tlcp_server")) {
186 			return tlcp_server_main(argc, argv);
187 		} else if (!strcmp(*argv, "tls12_client")) {
188 			return tls12_client_main(argc, argv);
189 		} else if (!strcmp(*argv, "tls12_server")) {
190 			return tls12_server_main(argc, argv);
191 		} else if (!strcmp(*argv, "tls13_client")) {
192 			return tls13_client_main(argc, argv);
193 		} else if (!strcmp(*argv, "tls13_server")) {
194 			return tls13_server_main(argc, argv);
195 		} else if (!strcmp(*argv, "sdfutil")) {
196 			return sdfutil_main(argc, argv);
197 		} else if (!strcmp(*argv, "skfutil")) {
198 			return skfutil_main(argc, argv);
199 		} else {
200 			fprintf(stderr, "%s: illegal option '%s'\n", prog, *argv);
201 			fprintf(stderr, "usage: %s %s\n", prog, options);
202 			return 1;
203 		}
204 
205 		argc--;
206 		argv++;
207 	}
208 
209 	return ret;
210 }
211