xref: /OK3568_Linux_fs/external/security/librkcrypto/test/main.c (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /*
2*4882a593Smuzhiyun  * Copyright (c) 2022 Rockchip Electronics Co. Ltd.
3*4882a593Smuzhiyun  */
4*4882a593Smuzhiyun #include <getopt.h>
5*4882a593Smuzhiyun #include <stdio.h>
6*4882a593Smuzhiyun #include <stdlib.h>
7*4882a593Smuzhiyun #include <strings.h>
8*4882a593Smuzhiyun #include "test_ae.h"
9*4882a593Smuzhiyun #include "test_otp_key_crypto.h"
10*4882a593Smuzhiyun #include "test_throughput.h"
11*4882a593Smuzhiyun #include "test_cipher.h"
12*4882a593Smuzhiyun #include "test_crypto_mem.h"
13*4882a593Smuzhiyun #include "test_hash.h"
14*4882a593Smuzhiyun #include "test_random.h"
15*4882a593Smuzhiyun #include "test_stress.h"
16*4882a593Smuzhiyun #include "test_multi.h"
17*4882a593Smuzhiyun #include "test_rsa.h"
18*4882a593Smuzhiyun 
19*4882a593Smuzhiyun enum {
20*4882a593Smuzhiyun 	OPTION_TOP = 0,
21*4882a593Smuzhiyun 	ALL,
22*4882a593Smuzhiyun 	CIPHER,
23*4882a593Smuzhiyun 	AEAD,
24*4882a593Smuzhiyun 	HASH,
25*4882a593Smuzhiyun 	HMAC,
26*4882a593Smuzhiyun 	SETKEY,
27*4882a593Smuzhiyun 	OTPKEY,
28*4882a593Smuzhiyun 	MEM,
29*4882a593Smuzhiyun 	RANDOM,
30*4882a593Smuzhiyun 	THROUGHPUT,
31*4882a593Smuzhiyun 	STRESS,
32*4882a593Smuzhiyun 	MULTI,
33*4882a593Smuzhiyun 	RSA,
34*4882a593Smuzhiyun 	OPTION_BUTT,
35*4882a593Smuzhiyun };
36*4882a593Smuzhiyun 
guide(void)37*4882a593Smuzhiyun static void guide(void)
38*4882a593Smuzhiyun {
39*4882a593Smuzhiyun 	printf("\n######## rkcrypto api test ########\n");
40*4882a593Smuzhiyun 	printf("%s\n", RK_CRYPTO_API_FULL_VERSION);
41*4882a593Smuzhiyun 
42*4882a593Smuzhiyun 	printf("Entry one parameter as follow:\n");
43*4882a593Smuzhiyun 	printf("\t-all           Function of all ciphers\n");
44*4882a593Smuzhiyun 	printf("\t-cipher        Function of cipher\n");
45*4882a593Smuzhiyun 	printf("\t-aead          Function of aead\n");
46*4882a593Smuzhiyun 	printf("\t-hash          Function of hash\n");
47*4882a593Smuzhiyun 	printf("\t-hmac          Function of hmac\n");
48*4882a593Smuzhiyun 	printf("\t-rsa           Function of rsa\n");
49*4882a593Smuzhiyun 	printf("\t-setkey        Function of setkey. NOTE: it will write key to OTP area.\n");
50*4882a593Smuzhiyun 	printf("\t-otpkey        Function of otpkey\n");
51*4882a593Smuzhiyun 	printf("\t-mem           Maximum buffer size requested by crypto mem alloc, test until alloc failed\n");
52*4882a593Smuzhiyun 	printf("\t-random        Function of get random\n");
53*4882a593Smuzhiyun 	printf("\t-throughput    Throughput of all ciphers, MB/s\n");
54*4882a593Smuzhiyun 	printf("\t-stress [cnt]  stress cnt times of all cipher/hash/hmac\n");
55*4882a593Smuzhiyun }
56*4882a593Smuzhiyun 
main(int argc,char * argv[])57*4882a593Smuzhiyun int main(int argc, char *argv[])
58*4882a593Smuzhiyun {
59*4882a593Smuzhiyun 	int opt;
60*4882a593Smuzhiyun 	int option_index = 0;
61*4882a593Smuzhiyun 	int stress_cnt = 1;
62*4882a593Smuzhiyun 	int verbose = 1;
63*4882a593Smuzhiyun 	static struct option long_options[] = {
64*4882a593Smuzhiyun 		{"all",		0,	NULL,	ALL},
65*4882a593Smuzhiyun 		{"cipher",	0,	NULL,	CIPHER},
66*4882a593Smuzhiyun 		{"aead",	0,	NULL,	AEAD},
67*4882a593Smuzhiyun 		{"hash",	0,	NULL,	HASH},
68*4882a593Smuzhiyun 		{"hmac",	0,	NULL,	HMAC},
69*4882a593Smuzhiyun 		{"setkey",	0,	NULL,	SETKEY},
70*4882a593Smuzhiyun 		{"otpkey",	0,	NULL,	OTPKEY},
71*4882a593Smuzhiyun 		{"mem",		0,	NULL,	MEM},
72*4882a593Smuzhiyun 		{"random",	0,	NULL,	RANDOM},
73*4882a593Smuzhiyun 		{"throughput",	0,	NULL,	THROUGHPUT},
74*4882a593Smuzhiyun 		{"stress",	1,	NULL,	STRESS},
75*4882a593Smuzhiyun 		{"multi",	0,	NULL,	MULTI},
76*4882a593Smuzhiyun 		{"rsa",		0,	NULL,	RSA},
77*4882a593Smuzhiyun 		{NULL,		0,	NULL,	0},
78*4882a593Smuzhiyun 	};
79*4882a593Smuzhiyun 
80*4882a593Smuzhiyun 	if (argc < 2)
81*4882a593Smuzhiyun 		guide();
82*4882a593Smuzhiyun 
83*4882a593Smuzhiyun 	while ((opt = getopt_long_only(argc, argv, "", long_options, &option_index)) != -1) {
84*4882a593Smuzhiyun 		switch (opt) {
85*4882a593Smuzhiyun 		case ALL:
86*4882a593Smuzhiyun 			test_cipher(verbose);
87*4882a593Smuzhiyun 			test_ae(verbose);
88*4882a593Smuzhiyun 			test_hash(verbose);
89*4882a593Smuzhiyun 			test_hmac(verbose);
90*4882a593Smuzhiyun 			test_rsa(verbose);
91*4882a593Smuzhiyun 			test_write_otp_key();
92*4882a593Smuzhiyun 			test_otp_key();
93*4882a593Smuzhiyun 			test_crypto_mem();
94*4882a593Smuzhiyun 			break;
95*4882a593Smuzhiyun 		case CIPHER:
96*4882a593Smuzhiyun 			test_cipher(verbose);
97*4882a593Smuzhiyun 			break;
98*4882a593Smuzhiyun 		case AEAD:
99*4882a593Smuzhiyun 			test_ae(verbose);
100*4882a593Smuzhiyun 			break;
101*4882a593Smuzhiyun 		case HASH:
102*4882a593Smuzhiyun 			test_hash(verbose);
103*4882a593Smuzhiyun 			break;
104*4882a593Smuzhiyun 		case HMAC:
105*4882a593Smuzhiyun 			test_hmac(verbose);
106*4882a593Smuzhiyun 			break;
107*4882a593Smuzhiyun 		case RSA:
108*4882a593Smuzhiyun 			test_rsa(verbose);
109*4882a593Smuzhiyun 			break;
110*4882a593Smuzhiyun 		case SETKEY:
111*4882a593Smuzhiyun 			test_write_otp_key();
112*4882a593Smuzhiyun 			break;
113*4882a593Smuzhiyun 		case OTPKEY:
114*4882a593Smuzhiyun 			test_otp_key();
115*4882a593Smuzhiyun 			break;
116*4882a593Smuzhiyun 		case MEM:
117*4882a593Smuzhiyun 			test_crypto_mem();
118*4882a593Smuzhiyun 			break;
119*4882a593Smuzhiyun 		case RANDOM:
120*4882a593Smuzhiyun 			test_random();
121*4882a593Smuzhiyun 			break;
122*4882a593Smuzhiyun 		case THROUGHPUT:
123*4882a593Smuzhiyun 			test_throughput();
124*4882a593Smuzhiyun 			break;
125*4882a593Smuzhiyun 		case STRESS:
126*4882a593Smuzhiyun 			stress_cnt = atoi(optarg);
127*4882a593Smuzhiyun 			stress_test(stress_cnt);
128*4882a593Smuzhiyun 			break;
129*4882a593Smuzhiyun 		case MULTI:
130*4882a593Smuzhiyun 			test_multi();
131*4882a593Smuzhiyun 			break;
132*4882a593Smuzhiyun 		case '?':
133*4882a593Smuzhiyun 			guide();
134*4882a593Smuzhiyun 			break;
135*4882a593Smuzhiyun 		default:
136*4882a593Smuzhiyun 			break;
137*4882a593Smuzhiyun 		}
138*4882a593Smuzhiyun 
139*4882a593Smuzhiyun 	}
140*4882a593Smuzhiyun 
141*4882a593Smuzhiyun 	printf("\n######## Test done ########\n");
142*4882a593Smuzhiyun 
143*4882a593Smuzhiyun 	return 0;
144*4882a593Smuzhiyun }
145