1 /*
2  * This file and its contents are supplied under the terms of the
3  * Common Development and Distribution License ("CDDL"), version 1.0.
4  * You may only use this file in accordance with the terms of version
5  * 1.0 of the CDDL.
6  *
7  * A full copy of the text of the CDDL should have accompanied this
8  * source.  A copy of the CDDL is also available via the Internet at
9  * http://www.illumos.org/license/CDDL.
10  */
11 
12 /*
13  * Copyright 2015 Nexenta Systems, Inc.  All rights reserved.
14  */
15 
16 #ifndef _CRYPTOTEST_H
17 #define	_CRYPTOTEST_H
18 
19 #ifdef __cplusplus
20 extern "C" {
21 #endif
22 
23 #include <sys/crypto/ioctl.h>
24 
25 #define	CTEST_INIT_FAILED (-1)
26 #define	CTEST_NAME_RESOLVE_FAILED (-2)
27 #define	CTEST_MECH_NO_PROVIDER (-3)
28 
29 typedef struct cryptotest {
30 	uint8_t *in;
31 	uint8_t *out;
32 	uint8_t *key;
33 	void *param;
34 
35 	size_t inlen;
36 	size_t outlen;
37 	size_t keylen;
38 	size_t plen;
39 
40 	char *mechname;
41 	size_t updatelen;
42 } cryptotest_t;
43 
44 typedef int (*testfunc_t)(cryptotest_t *);
45 
46 typedef struct test_fg {
47 	testfunc_t single;
48 	testfunc_t update;
49 } test_fg_t;
50 
51 #define	CRYPTO_INVALID_SESSION ((size_t)-1)
52 typedef struct crypto_op crypto_op_t;
53 
54 int run_test(cryptotest_t *args, uint8_t *cmp, size_t cmplen, test_fg_t *funcs);
55 
56 /* utils */
57 crypto_op_t *cryptotest_init(cryptotest_t *args, crypto_func_group_t fg);
58 int cryptotest_close(crypto_op_t *op);
59 int get_mech_info(crypto_op_t *op);
60 int get_hsession_by_mech(crypto_op_t *op);
61 
62 /* CRYPTO_MAC */
63 int mac_init(crypto_op_t *op);
64 int mac_single(crypto_op_t *op);
65 int mac_update(crypto_op_t *op, int offset);
66 int mac_final(crypto_op_t *op);
67 
68 /* CRYPTO_ENCRYPT */
69 int encrypt_init(crypto_op_t *op);
70 int encrypt_single(crypto_op_t *op);
71 int encrypt_update(crypto_op_t *op, int offset, size_t *encrlen);
72 int encrypt_final(crypto_op_t *op, size_t encrlen);
73 
74 /* CRYPTO_DECRYPT */
75 int decrypt_init(crypto_op_t *op);
76 int decrypt_single(crypto_op_t *op);
77 int decrypt_update(crypto_op_t *op, int offset, size_t *encrlen);
78 int decrypt_final(crypto_op_t *op, size_t encrlen);
79 
80 /* wrappers */
81 int test_mac_single(cryptotest_t *args);
82 int test_mac(cryptotest_t *args);
83 
84 int test_encrypt_single(cryptotest_t *args);
85 int test_encrypt(cryptotest_t *args);
86 
87 int test_decrypt_single(cryptotest_t *args);
88 int test_decrypt(cryptotest_t *args);
89 
90 extern test_fg_t cryptotest_decr_fg;
91 extern test_fg_t cryptotest_encr_fg;
92 extern test_fg_t cryptotest_mac_fg;
93 
94 #define	MAC_FG (&cryptotest_mac_fg)
95 #define	ENCR_FG (&cryptotest_encr_fg)
96 #define	DECR_FG (&cryptotest_decr_fg)
97 
98 #ifdef __cplusplus
99 }
100 #endif
101 
102 #endif /* _CRYPTOTEST_H */
103