1cd964fceSMatt Barden /*
2cd964fceSMatt Barden  * This file and its contents are supplied under the terms of the
3cd964fceSMatt Barden  * Common Development and Distribution License ("CDDL"), version 1.0.
4cd964fceSMatt Barden  * You may only use this file in accordance with the terms of version
5cd964fceSMatt Barden  * 1.0 of the CDDL.
6cd964fceSMatt Barden  *
7cd964fceSMatt Barden  * A full copy of the text of the CDDL should have accompanied this
8cd964fceSMatt Barden  * source.  A copy of the CDDL is also available via the Internet at
9cd964fceSMatt Barden  * http://www.illumos.org/license/CDDL.
10cd964fceSMatt Barden  */
11cd964fceSMatt Barden 
12cd964fceSMatt Barden /*
13cd964fceSMatt Barden  * Copyright 2015 Nexenta Systems, Inc.  All rights reserved.
14*77de87d2SJason King  * Copyright 2019 Joyent, Inc.
15cd964fceSMatt Barden  */
16cd964fceSMatt Barden 
17cd964fceSMatt Barden #ifndef _CRYPTOTEST_H
18cd964fceSMatt Barden #define	_CRYPTOTEST_H
19cd964fceSMatt Barden 
20cd964fceSMatt Barden #ifdef __cplusplus
21cd964fceSMatt Barden extern "C" {
22cd964fceSMatt Barden #endif
23cd964fceSMatt Barden 
24*77de87d2SJason King #include <inttypes.h>
25cd964fceSMatt Barden #include <sys/crypto/ioctl.h>
26cd964fceSMatt Barden 
27cd964fceSMatt Barden #define	CTEST_INIT_FAILED (-1)
28cd964fceSMatt Barden #define	CTEST_NAME_RESOLVE_FAILED (-2)
29cd964fceSMatt Barden #define	CTEST_MECH_NO_PROVIDER (-3)
30cd964fceSMatt Barden 
31*77de87d2SJason King #define	CTEST_UPDATELEN_WHOLE	SIZE_MAX
32*77de87d2SJason King #define	CTEST_UPDATELEN_END	0
33*77de87d2SJason King 
34cd964fceSMatt Barden typedef struct cryptotest {
35cd964fceSMatt Barden 	uint8_t *in;
36cd964fceSMatt Barden 	uint8_t *out;
37cd964fceSMatt Barden 	uint8_t *key;
38cd964fceSMatt Barden 	void *param;
39cd964fceSMatt Barden 
40cd964fceSMatt Barden 	size_t inlen;
41cd964fceSMatt Barden 	size_t outlen;
42cd964fceSMatt Barden 	size_t keylen;
43cd964fceSMatt Barden 	size_t plen;
44cd964fceSMatt Barden 
45cd964fceSMatt Barden 	char *mechname;
46*77de87d2SJason King 	size_t *updatelens;
47cd964fceSMatt Barden } cryptotest_t;
48cd964fceSMatt Barden 
49*77de87d2SJason King typedef struct crypto_op crypto_op_t;
50cd964fceSMatt Barden 
51cd964fceSMatt Barden typedef struct test_fg {
52*77de87d2SJason King 	crypto_func_group_t tf_fg;
53*77de87d2SJason King 	int (*tf_init)(crypto_op_t *);
54*77de87d2SJason King 	int (*tf_single)(crypto_op_t *);
55*77de87d2SJason King 	int (*tf_update)(crypto_op_t *, size_t, size_t, size_t *);
56*77de87d2SJason King 	int (*tf_final)(crypto_op_t *, size_t);
57cd964fceSMatt Barden } test_fg_t;
58cd964fceSMatt Barden 
59e75b2cb0SRobert Mustacchi #define	CRYPTO_INVALID_SESSION ((crypto_session_id_t)-1)
60cd964fceSMatt Barden 
61cd964fceSMatt Barden int run_test(cryptotest_t *args, uint8_t *cmp, size_t cmplen, test_fg_t *funcs);
62cd964fceSMatt Barden 
63*77de87d2SJason King const char *cryptotest_errstr(int e, char *buf, size_t buflen);
64*77de87d2SJason King 
65cd964fceSMatt Barden /* utils */
66cd964fceSMatt Barden crypto_op_t *cryptotest_init(cryptotest_t *args, crypto_func_group_t fg);
67*77de87d2SJason King void cryptotest_close(crypto_op_t *op);
68cd964fceSMatt Barden int get_mech_info(crypto_op_t *op);
69cd964fceSMatt Barden int get_hsession_by_mech(crypto_op_t *op);
70cd964fceSMatt Barden 
71cd964fceSMatt Barden /* CRYPTO_MAC */
72cd964fceSMatt Barden int mac_init(crypto_op_t *op);
73cd964fceSMatt Barden int mac_single(crypto_op_t *op);
74*77de87d2SJason King int mac_update(crypto_op_t *op, size_t offset, size_t len, size_t *dummy);
75*77de87d2SJason King int mac_final(crypto_op_t *op, size_t dummy);
76cd964fceSMatt Barden 
77cd964fceSMatt Barden /* CRYPTO_ENCRYPT */
78cd964fceSMatt Barden int encrypt_init(crypto_op_t *op);
79cd964fceSMatt Barden int encrypt_single(crypto_op_t *op);
80*77de87d2SJason King int encrypt_update(crypto_op_t *op, size_t offset, size_t plainlen,
81*77de87d2SJason King     size_t *encrlen);
82cd964fceSMatt Barden int encrypt_final(crypto_op_t *op, size_t encrlen);
83cd964fceSMatt Barden 
84cd964fceSMatt Barden /* CRYPTO_DECRYPT */
85cd964fceSMatt Barden int decrypt_init(crypto_op_t *op);
86cd964fceSMatt Barden int decrypt_single(crypto_op_t *op);
87*77de87d2SJason King int decrypt_update(crypto_op_t *op, size_t offset, size_t cipherlen,
88*77de87d2SJason King     size_t *encrlen);
89cd964fceSMatt Barden int decrypt_final(crypto_op_t *op, size_t encrlen);
90cd964fceSMatt Barden 
91f3041bfaSJason King /* CRYPTO_DIGEST */
92f3041bfaSJason King int digest_init(crypto_op_t *op);
93f3041bfaSJason King int digest_single(crypto_op_t *op);
94*77de87d2SJason King int digest_update(crypto_op_t *op, size_t offset, size_t len, size_t *dummy);
95*77de87d2SJason King int digest_final(crypto_op_t *op, size_t dummy);
96f3041bfaSJason King 
97cd964fceSMatt Barden extern test_fg_t cryptotest_decr_fg;
98cd964fceSMatt Barden extern test_fg_t cryptotest_encr_fg;
99cd964fceSMatt Barden extern test_fg_t cryptotest_mac_fg;
100f3041bfaSJason King extern test_fg_t cryptotest_digest_fg;
101cd964fceSMatt Barden 
102cd964fceSMatt Barden #define	MAC_FG (&cryptotest_mac_fg)
103cd964fceSMatt Barden #define	ENCR_FG (&cryptotest_encr_fg)
104cd964fceSMatt Barden #define	DECR_FG (&cryptotest_decr_fg)
105f3041bfaSJason King #define	DIGEST_FG (&cryptotest_digest_fg)
106cd964fceSMatt Barden 
107fb261280SJason King /*
108fb261280SJason King  * KCF and PKCS11 use different structures for the CCM params (CK_AES_CCM_PARAMS
109fb261280SJason King  * and CK_CCM_PARAMS respectively.  Each cryptotest_*.c file implements this
110fb261280SJason King  * for their respective structs.
111fb261280SJason King  */
112fb261280SJason King void ccm_init_params(void *, ulong_t, uchar_t *, ulong_t, uchar_t *, ulong_t,
113fb261280SJason King     ulong_t);
114fb261280SJason King size_t ccm_param_len(void);
115fb261280SJason King 
116cd964fceSMatt Barden #ifdef __cplusplus
117cd964fceSMatt Barden }
118cd964fceSMatt Barden #endif
119cd964fceSMatt Barden 
120cd964fceSMatt Barden #endif /* _CRYPTOTEST_H */
121