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 * Copyright 2018, Joyent, Inc. 15 */ 16 17 #ifndef _CRYPTOTEST_H 18 #define _CRYPTOTEST_H 19 20 #ifdef __cplusplus 21 extern "C" { 22 #endif 23 24 #include <sys/crypto/ioctl.h> 25 26 #define CTEST_INIT_FAILED (-1) 27 #define CTEST_NAME_RESOLVE_FAILED (-2) 28 #define CTEST_MECH_NO_PROVIDER (-3) 29 30 typedef struct cryptotest { 31 uint8_t *in; 32 uint8_t *out; 33 uint8_t *key; 34 void *param; 35 36 size_t inlen; 37 size_t outlen; 38 size_t keylen; 39 size_t plen; 40 41 char *mechname; 42 size_t updatelen; 43 } cryptotest_t; 44 45 typedef int (*testfunc_t)(cryptotest_t *); 46 47 typedef struct test_fg { 48 testfunc_t single; 49 testfunc_t update; 50 } test_fg_t; 51 52 #define CRYPTO_INVALID_SESSION ((crypto_session_id_t)-1) 53 typedef struct crypto_op crypto_op_t; 54 55 int run_test(cryptotest_t *args, uint8_t *cmp, size_t cmplen, test_fg_t *funcs); 56 57 /* utils */ 58 crypto_op_t *cryptotest_init(cryptotest_t *args, crypto_func_group_t fg); 59 int cryptotest_close(crypto_op_t *op); 60 int get_mech_info(crypto_op_t *op); 61 int get_hsession_by_mech(crypto_op_t *op); 62 63 /* CRYPTO_MAC */ 64 int mac_init(crypto_op_t *op); 65 int mac_single(crypto_op_t *op); 66 int mac_update(crypto_op_t *op, int offset); 67 int mac_final(crypto_op_t *op); 68 69 /* CRYPTO_ENCRYPT */ 70 int encrypt_init(crypto_op_t *op); 71 int encrypt_single(crypto_op_t *op); 72 int encrypt_update(crypto_op_t *op, int offset, size_t *encrlen); 73 int encrypt_final(crypto_op_t *op, size_t encrlen); 74 75 /* CRYPTO_DECRYPT */ 76 int decrypt_init(crypto_op_t *op); 77 int decrypt_single(crypto_op_t *op); 78 int decrypt_update(crypto_op_t *op, int offset, size_t *encrlen); 79 int decrypt_final(crypto_op_t *op, size_t encrlen); 80 81 /* CRYPTO_DIGEST */ 82 int digest_init(crypto_op_t *op); 83 int digest_single(crypto_op_t *op); 84 int digest_update(crypto_op_t *op, int); 85 int digest_final(crypto_op_t *op); 86 87 /* wrappers */ 88 int test_mac_single(cryptotest_t *args); 89 int test_mac(cryptotest_t *args); 90 91 int test_encrypt_single(cryptotest_t *args); 92 int test_encrypt(cryptotest_t *args); 93 94 int test_decrypt_single(cryptotest_t *args); 95 int test_decrypt(cryptotest_t *args); 96 97 int test_digest_single(cryptotest_t *args); 98 int test_digest(cryptotest_t *args); 99 100 extern test_fg_t cryptotest_decr_fg; 101 extern test_fg_t cryptotest_encr_fg; 102 extern test_fg_t cryptotest_mac_fg; 103 extern test_fg_t cryptotest_digest_fg; 104 105 #define MAC_FG (&cryptotest_mac_fg) 106 #define ENCR_FG (&cryptotest_encr_fg) 107 #define DECR_FG (&cryptotest_decr_fg) 108 #define DIGEST_FG (&cryptotest_digest_fg) 109 110 /* 111 * KCF and PKCS11 use different structures for the CCM params (CK_AES_CCM_PARAMS 112 * and CK_CCM_PARAMS respectively. Each cryptotest_*.c file implements this 113 * for their respective structs. 114 */ 115 void ccm_init_params(void *, ulong_t, uchar_t *, ulong_t, uchar_t *, ulong_t, 116 ulong_t); 117 size_t ccm_param_len(void); 118 119 #ifdef __cplusplus 120 } 121 #endif 122 123 #endif /* _CRYPTOTEST_H */ 124