| /* | |
| * Copyright (C) 2016 Cavium, Inc. | |
| * | |
| * This program is free software; you can redistribute it and/or modify it | |
| * under the terms of version 2 of the GNU General Public License | |
| * as published by the Free Software Foundation. | |
| */ | |
| #ifndef _CPTVF_ALGS_H_ | |
| #define _CPTVF_ALGS_H_ | |
| #include "request_manager.h" | |
| #define MAX_DEVICES 16 | |
| #define MAJOR_OP_FC 0x33 | |
| #define MAX_ENC_KEY_SIZE 32 | |
| #define MAX_HASH_KEY_SIZE 64 | |
| #define MAX_KEY_SIZE (MAX_ENC_KEY_SIZE + MAX_HASH_KEY_SIZE) | |
| #define CONTROL_WORD_LEN 8 | |
| #define KEY2_OFFSET 48 | |
| #define DMA_MODE_FLAG(dma_mode) \ | |
| (((dma_mode) == DMA_GATHER_SCATTER) ? (1 << 7) : 0) | |
| enum req_type { | |
| AE_CORE_REQ, | |
| SE_CORE_REQ, | |
| }; | |
| enum cipher_type { | |
| DES3_CBC = 0x1, | |
| DES3_ECB = 0x2, | |
| AES_CBC = 0x3, | |
| AES_ECB = 0x4, | |
| AES_CFB = 0x5, | |
| AES_CTR = 0x6, | |
| AES_GCM = 0x7, | |
| AES_XTS = 0x8 | |
| }; | |
| enum aes_type { | |
| AES_128_BIT = 0x1, | |
| AES_192_BIT = 0x2, | |
| AES_256_BIT = 0x3 | |
| }; | |
| union encr_ctrl { | |
| u64 flags; | |
| struct { | |
| #if defined(__BIG_ENDIAN_BITFIELD) | |
| u64 enc_cipher:4; | |
| u64 reserved1:1; | |
| u64 aes_key:2; | |
| u64 iv_source:1; | |
| u64 hash_type:4; | |
| u64 reserved2:3; | |
| u64 auth_input_type:1; | |
| u64 mac_len:8; | |
| u64 reserved3:8; | |
| u64 encr_offset:16; | |
| u64 iv_offset:8; | |
| u64 auth_offset:8; | |
| #else | |
| u64 auth_offset:8; | |
| u64 iv_offset:8; | |
| u64 encr_offset:16; | |
| u64 reserved3:8; | |
| u64 mac_len:8; | |
| u64 auth_input_type:1; | |
| u64 reserved2:3; | |
| u64 hash_type:4; | |
| u64 iv_source:1; | |
| u64 aes_key:2; | |
| u64 reserved1:1; | |
| u64 enc_cipher:4; | |
| #endif | |
| } e; | |
| }; | |
| struct cvm_cipher { | |
| const char *name; | |
| u8 value; | |
| }; | |
| struct enc_context { | |
| union encr_ctrl enc_ctrl; | |
| u8 encr_key[32]; | |
| u8 encr_iv[16]; | |
| }; | |
| struct fchmac_context { | |
| u8 ipad[64]; | |
| u8 opad[64]; /* or OPAD */ | |
| }; | |
| struct fc_context { | |
| struct enc_context enc; | |
| struct fchmac_context hmac; | |
| }; | |
| struct cvm_enc_ctx { | |
| u32 key_len; | |
| u8 enc_key[MAX_KEY_SIZE]; | |
| u8 cipher_type:4; | |
| u8 key_type:2; | |
| }; | |
| struct cvm_des3_ctx { | |
| u32 key_len; | |
| u8 des3_key[MAX_KEY_SIZE]; | |
| }; | |
| struct cvm_req_ctx { | |
| struct cpt_request_info cpt_req; | |
| u64 control_word; | |
| struct fc_context fctx; | |
| }; | |
| int cptvf_do_request(void *cptvf, struct cpt_request_info *req); | |
| #endif /*_CPTVF_ALGS_H_*/ |