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