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