1384 lines
46 KiB
C
1384 lines
46 KiB
C
/*
|
|
******************************************************************************
|
|
* SOURCE FILE
|
|
*
|
|
* Document no: @(#) $Name: VXWORKS_ITER40_2019102207 $ $RCSfile: Sec4.h,v $ $Revision: 1.5 $
|
|
* $Source: /home/interpeak/CVSRoot/ipfreescale/sec4/Sec4.h,v $
|
|
* $Author: dhessing $
|
|
* $State: Exp $ $Locker: $
|
|
*
|
|
* INTERPEAK_COPYRIGHT_STRING
|
|
******************************************************************************
|
|
*/
|
|
|
|
/*
|
|
****************************************************************************
|
|
* 1 DESCRIPTION
|
|
****************************************************************************
|
|
*/
|
|
|
|
/****************************************************************************
|
|
* Sec4.h - Top-level driver include file for SEC4 security processor.
|
|
* Based on Sec2.h for SEC2 security processor.
|
|
****************************************************************************
|
|
* Copyright (c) 2003-2005 Freescale Semiconductor
|
|
* All Rights Reserved. Proprietary and Confidential.
|
|
*
|
|
* NOTICE: The information contained in this file is proprietary
|
|
* to Freescale Semiconductor and is being made available to
|
|
* Freescale's customers under strict license agreements.
|
|
* Use or disclosure of this information is permissible only
|
|
* under the terms of the existing license agreement.
|
|
***************************************************************************/
|
|
|
|
|
|
/* Revision History:
|
|
* 1.0 Mar 11,2011 - Based on Sec2.h ver 1.2
|
|
*/
|
|
|
|
|
|
#ifndef SEC4_H
|
|
#define SEC4_H
|
|
|
|
#include <error_ext.h>
|
|
#include <sec_ext.h>
|
|
#include <sec_dcl_ext.h>
|
|
|
|
#ifdef _cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
|
|
/* General types for the driver, if they don't exist elsewhere */
|
|
|
|
#ifndef BOOLEAN
|
|
#define BOOLEAN int
|
|
#endif
|
|
|
|
#ifndef TRUE
|
|
#define TRUE (1)
|
|
#endif
|
|
#ifndef FALSE
|
|
#define FALSE (0)
|
|
#endif
|
|
|
|
#ifndef offsetof
|
|
#define offsetof(s,m) (size_t)&(((s *)0)->m)
|
|
#endif
|
|
|
|
/* IOCTL function code offsets */
|
|
/* Each defines an IOCTL request to be added to a system-defined offset */
|
|
#define SEC4_PROC_REQ (1) /* Process request */
|
|
#define SEC4_GET_STATUS (2) /* Read delayed status */
|
|
|
|
#define SEC4_IOCTL_INDEX (0x800)
|
|
/* Computed IOCTL constants for use */
|
|
#define IOCTL_PROC_REQ (SEC4_IOCTL_INDEX + SEC4_PROC_REQ)
|
|
#define IOCTL_GET_STATUS (SEC4_IOCTL_INDEX + SEC4_GET_STATUS)
|
|
|
|
#define vxworksDrvName "/dev/sec4"
|
|
|
|
/* General error/status codes for ioctl() function returns, and for the */
|
|
/* status field of the general-purpose part of the request struct */
|
|
#define __ERR_MODULE__ MODULE_SEC
|
|
#define SEC4_SUCCESS E_OK
|
|
/* Error codes as defined in error_ext.h */
|
|
#define SEC4_ERROR(errCode) ERROR_CODE(errCode)
|
|
#define SEC4_GET_ERROR_TYPE(errCode) GET_ERROR_TYPE(errCode)
|
|
/*static char sec4_error_strings[40][60] = {\*/
|
|
static const char *sec4_error_strings[] = {\
|
|
/* E_OK = 0 */ "Successful", \
|
|
/* Invalid Function Calls */ \
|
|
/* E_INVALID_STATE */ "The operation is not allowed in current module state", \
|
|
/* E_INVALID_OPERATION */ "The operation/command is invalid (unrecognized)", \
|
|
/* E_NOT_SUPPORTED */ "The function is not supported or not implemented", \
|
|
/* E_NO_DEVICE */ "The associated device is not initialized.", \
|
|
/* Invalid Parameters */ \
|
|
/* E_INVALID_HANDLE */ "Invalid handle of module or object.", \
|
|
/* E_INVALID_ID */ "Invalid module ID (usually enumeration or index)", \
|
|
/* E_NULL_POINTER */ "Unexpected NULL pointer.", \
|
|
/* E_INVALID_VALUE */ "Invalid value.", \
|
|
/* E_INVALID_SELECTION */ "Invalid selection or mode.", \
|
|
/* E_INVALID_COMM_MODE */ "Invalid communication mode.", \
|
|
/* E_INVALID_BYTE_ORDER */ "Invalid byte order.", \
|
|
/* E_INVALID_MEMORY_TYPE */ "Invalid memory type.", \
|
|
/* E_INVALID_INTR_QUEUE */ "Invalid interrupt queue.", \
|
|
/* E_INVALID_PRIORITY */ "Invalid priority.", \
|
|
/* E_INVALID_CLOCK */ "Invalid clock", \
|
|
/* E_INVALID_RATE */ "Invalid rate value", \
|
|
/* E_INVALID_ADDRESS */ "Invalid address", \
|
|
/* E_INVALID_BUS */ "Invalid bus type", \
|
|
/* E_BUS_CONFLICT */ "Bus (or memory) type conflicts with another setting", \
|
|
/* E_CONFLICT */ "Some setting conflicts with another setting", \
|
|
/* E_NOT_ALIGNED */ "Non-aligned address", \
|
|
/* E_NOT_IN_RANGE */ "Parameter value is out of range", \
|
|
/* Frame/Buffer Errors */ \
|
|
/* E_INVALID_FRAME */ "Invalid frame object (NULL handle or missing buffers)", \
|
|
/* E_EMPTY_FRAME */ "Frame object is empty (has no buffers)", \
|
|
/* E_EMPTY_BUFFER */ "Buffer object is empty (no data, or zero data length)", \
|
|
/* Resource Errors */ \
|
|
/* E_NO_MEMORY */ "External memory allocation failed", \
|
|
/* E_NOT_FOUND */ "Requested resource or item was not found", \
|
|
/* E_NOT_AVAILABLE */ "Resource is unavailable", \
|
|
/* E_ALREADY_EXISTS */ "Requested resource or item already exists", \
|
|
/* E_FULL */ "Resource is full", \
|
|
/* E_EMPTY */ "Resource is empty", \
|
|
/* E_BUSY */ "Resource or module is busy", \
|
|
/* E_ALREADY_FREE */ "Specified resource or item is already free or deleted", \
|
|
/* Read/Write Access Errors */ \
|
|
/* E_READ_FAILED */ "Read access failed on memory/device", \
|
|
/* E_WRITE_FAILED */ "Write access failed on memory/device", \
|
|
/* Send/Receive Failures */ \
|
|
/* E_SEND_FAILED */ "Send operation failed on device", \
|
|
/* E_RECEIVE_FAILED */ "Receive operation failed on device", \
|
|
/* Operation time-out */ \
|
|
/* E_TIMEOUT */ "The operation timed out", \
|
|
/* SEC4_UNKNOWN_ERROR */ "SEC4_UNKNOWN_ERROR", \
|
|
/* SEC4_IO_VXWORKS_DRIVER_TABLE_ADD_ERROR */ "SEC4_IO_VXWORKS_DRIVER_TABLE_ADD_ERROR", \
|
|
/* SEC4_VXWORKS_CANNOT_CREATE_QUEUE */ "SEC4_VXWORKS_CANNOT_CREATE_QUEUE", \
|
|
/* SEC4_INVALID_ADDRESS */ "SEC4_INVALID_ADDRESS", \
|
|
/* SEC4_JQ_NOT_AVAIL */ "SEC4_JQ_NOT_AVAIL" \
|
|
/* SEC4_JOB_ERROR */ "SEC4 job completed with an error" \
|
|
};
|
|
#define SEC4_ERRORTYPE_TO_STR(errCode) sec4_error_strings[errCode];
|
|
|
|
/* Define other errors than in the freescale driver. Start from last defined value */
|
|
|
|
/* Driver encountered an unidentfiable condition */
|
|
#define SEC4_UNKNOWN_ERROR (E_DUMMY_LAST)
|
|
|
|
/* System can't attach driver to the OS dispatch table */
|
|
#define SEC4_IO_VXWORKS_DRIVER_TABLE_ADD_ERROR (E_DUMMY_LAST + 1)
|
|
|
|
/* Driver can't initialize message queue */
|
|
#define SEC4_VXWORKS_CANNOT_CREATE_QUEUE (E_DUMMY_LAST + 2)
|
|
|
|
/* User passed a null request pointer to IOCTL_PROC_REQ */
|
|
#define SEC4_INVALID_ADDRESS (E_DUMMY_LAST + 3)
|
|
|
|
/* Selected job queue is not available */
|
|
#define SEC4_JQ_NOT_AVAIL (E_DUMMY_LAST + 4)
|
|
|
|
/* SEC job terminated with error */
|
|
#define SEC4_JOB_ERROR (E_DUMMY_LAST + 5)
|
|
|
|
|
|
/* SEC4 Scatter Gather Table Entry */
|
|
typedef _Packed struct {
|
|
uint32_t reserved:28; /* Always 0 */
|
|
uint64_t address:36; /* Address to buffer */
|
|
uint8_t ext:1; /* Data is another SGT */
|
|
uint8_t final:1; /* This entry is last in this SGT */
|
|
uint32_t length:30; /* Length of valid data */
|
|
uint8_t reserved2; /* Always 0 */
|
|
uint8_t bpid; /* Buffer Pool ID */
|
|
uint8_t reserved3:3; /* Always 0 */
|
|
uint16_t offset:13; /* Offset to valid data */
|
|
} _PackedType t_sec4SgtEntry;
|
|
|
|
/* "Split keys" are used by SEC4 HMAC to increase performance on crypto operations.
|
|
* Required for SEC4 IPsec protocol processing */
|
|
#define SEC4_SPLITKEY_MAXSIZE (48)
|
|
|
|
/* SEC4 IPsec SA cache entry */
|
|
typedef struct t_sec4IpsecSa
|
|
{
|
|
uint32_t spi;
|
|
//uint32_t seq; /* TODO */
|
|
e_IpsecVer ipsecVer;
|
|
uint8_t proto; /* Next header protocol */
|
|
e_IpsecMode ipsecMode;
|
|
e_IpsecAuthenAlg authAlg;
|
|
e_IpsecCryptoAlg cryptoAlg;
|
|
t_KeyParam authKey;
|
|
t_KeyParam cryptoKey;
|
|
e_IpsecArs antiReplaySize;
|
|
uint8_t *iv;
|
|
t_Handle h_ShrJobDesc; /* Shared job descriptor for this SA */
|
|
uint8_t splitKey[SEC4_SPLITKEY_MAXSIZE]; /* Pre computed SEC4 "split key" */
|
|
uint8_t splitKeySize;
|
|
|
|
} t_sec4IpsecSa;
|
|
|
|
#ifdef SEC4_USE_SHARED_JOB_QUEUE
|
|
/* Core-core message passing */
|
|
#define SEC4_IPC_STATE_IDLE 0
|
|
#define SEC4_IPC_STATE_PENDING 1
|
|
#define SEC4_IPC_STATE_DONE 2
|
|
typedef struct t_sec4IpcMsg
|
|
{
|
|
int state;
|
|
void *req;
|
|
} t_sec4IpcMsg;
|
|
#endif
|
|
|
|
/* DCL options to control job execution */
|
|
/* Common options */
|
|
#define SEC4_OPT_INDATA_IS_SGT (1 << 0)
|
|
#define SEC4_OPT_OUTDATA_IS_SGT (1 << 1)
|
|
#define SEC4_DCL_OPT_ICV (1 << 2)
|
|
/* Operation specific options. Start at bit 16 */
|
|
#define SEC4_DCL_OPT_CRC_IEEE802 (1 << 16)
|
|
#define SEC4_DCL_OPT_CRC_IETF3385 (1 << 17)
|
|
#define SEC4_DCL_OPT_CRC_DIS (1 << 18)
|
|
#define SEC4_DCL_OPT_CRC_DOS (1 << 19)
|
|
#define SEC4_DCL_OPT_CRC_DOC (1 << 20)
|
|
|
|
/* IPsec ESP */
|
|
#define SEC4_IPSEC_ESP_HEADER_SZ (8)
|
|
#define SEC4_IPSEC_ESP_DES_IV_SZ (8)
|
|
#define SEC4_IPSEC_ESP_AES_IV_SZ (16)
|
|
#define SEC4_IPSEC_ESP_TRAILER_SZ (2)
|
|
#define SEC4_IPSEC_ESP_ICV_SZ (12)
|
|
|
|
#include "Sec4Notify.h"
|
|
|
|
/***************/
|
|
|
|
|
|
/*
|
|
* Common request block for all request headers
|
|
* This macro contains the common portion of all request blocks
|
|
* It's composed as follows:
|
|
* opId - Type of operation requested
|
|
* notifyFlags - if bits set, notify pointers are actuall PIDs for a completion signal
|
|
* jobDesc - SEC4 job descriptor (t_Desc) handle
|
|
* notify - Handler for normal completion
|
|
* pNotifyCtx - Context for handler
|
|
* notify_on_error - Handler for error completion
|
|
* ctxNotifyOnErr - returned device context if error
|
|
* status - Driver completion status
|
|
*/
|
|
#define COMMON_REQ_PREAMBLE \
|
|
unsigned long opId; \
|
|
unsigned char notifyFlags; \
|
|
t_Handle *jobDesc; \
|
|
int coreId; \
|
|
PSEC4_NOTIFY_ROUTINE notify; \
|
|
PSEC4_NOTIFY_CTX pNotifyCtx; \
|
|
PSEC4_NOTIFY_ON_ERROR_ROUTINE notify_on_error; \
|
|
SEC4_NOTIFY_ON_ERROR_CTX ctxNotifyOnErr; \
|
|
int status;
|
|
|
|
/* This gets used by driver functions that need access to just the request */
|
|
/* header without knowing the remaining request-type-specific content */
|
|
typedef struct { COMMON_REQ_PREAMBLE } GENERIC_REQ;
|
|
|
|
|
|
/* Bits for use with notifyFlags in the request header */
|
|
#define NOTIFY_IS_PID (0x01) /* "notify" is a PID, not a pointer */
|
|
#define NOTIFY_ERROR_IS_PID (0x02) /* "notify_on_error" is a PID, not a pointer */
|
|
|
|
/*
|
|
* RNG_REQ - Random-Number generator request block
|
|
* rngBytes - number of bytes to return
|
|
* rngData - pointer to user's random data buffer
|
|
*/
|
|
|
|
typedef struct
|
|
{
|
|
COMMON_REQ_PREAMBLE
|
|
unsigned long rngBytes;
|
|
unsigned char *rngData;
|
|
} RNG_REQ;
|
|
|
|
#define NUM_RNGA_DESC (1)
|
|
#define DPD_RNG_GROUP (0x1000)
|
|
|
|
/* Get random data from the RNG */
|
|
#define DPD_RNG_GETRN (DPD_RNG_GROUP + 0)
|
|
|
|
/*
|
|
* DES_LOADCTX_CRYPT_REQ - DES request with context load
|
|
* These are basically CBC (cipher-block-chain) operations
|
|
*
|
|
*/
|
|
|
|
typedef struct
|
|
{
|
|
COMMON_REQ_PREAMBLE
|
|
unsigned long inIvBytes; /* 0 or 8 bytes */
|
|
unsigned char *inIvData;
|
|
unsigned long keyBytes; /* 8, 16, or 24 bytes */
|
|
unsigned char *keyData;
|
|
unsigned long inBytes; /* multiple of 8 bytes */
|
|
unsigned char *inData;
|
|
unsigned char *outData; /* output length = input length */
|
|
unsigned long outIvBytes; /* 0 or 8 bytes */
|
|
unsigned char *outIvData;
|
|
} DES_CBC_CRYPT_REQ;
|
|
|
|
/* typedef the old name for legacy compatibility */
|
|
typedef DES_CBC_CRYPT_REQ DES_LOADCTX_CRYPT_REQ;
|
|
|
|
#define NUM_DES_CBC_DESC (4)
|
|
#define DPD_DES_CBC_GROUP (0x2500)
|
|
|
|
/* Single-DES CBC encrypt */
|
|
#define DPD_SDES_CBC_CTX_ENCRYPT (DPD_DES_CBC_GROUP + 0)
|
|
|
|
/* Single-DES CBC decrypt */
|
|
#define DPD_SDES_CBC_CTX_DECRYPT (DPD_DES_CBC_GROUP + 1)
|
|
|
|
/* Triple-DES CBC encrypt */
|
|
#define DPD_TDES_CBC_CTX_ENCRYPT (DPD_DES_CBC_GROUP + 2)
|
|
|
|
/* Triple-DES CBC decrypt */
|
|
#define DPD_TDES_CBC_CTX_DECRYPT (DPD_DES_CBC_GROUP + 3)
|
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
* DES_CRYPT_REQ - non-context DES cipher operation
|
|
* These are ECB-only operations
|
|
*
|
|
*/
|
|
|
|
typedef struct
|
|
{
|
|
COMMON_REQ_PREAMBLE
|
|
unsigned long keyBytes; /* 8, 16, or 24 bytes */
|
|
unsigned char *keyData;
|
|
unsigned long inBytes; /* multiple of 8 bytes */
|
|
unsigned char *inData;
|
|
unsigned char *outData; /* output length = input length */
|
|
} DES_CRYPT_REQ;
|
|
|
|
#define NUM_DES_DESC (4)
|
|
#define DPD_DES_ECB_GROUP (0x2600)
|
|
|
|
#define DPD_SDES_ECB_ENCRYPT (DPD_DES_ECB_GROUP + 0)
|
|
#define DPD_SDES_ECB_DECRYPT (DPD_DES_ECB_GROUP + 1)
|
|
#define DPD_TDES_ECB_ENCRYPT (DPD_DES_ECB_GROUP + 2)
|
|
#define DPD_TDES_ECB_DECRYPT (DPD_DES_ECB_GROUP + 3)
|
|
|
|
|
|
|
|
|
|
/*
|
|
* AESA_CRYPT_REQ - AES ciphering operations
|
|
*
|
|
*/
|
|
|
|
typedef struct
|
|
{
|
|
COMMON_REQ_PREAMBLE
|
|
unsigned long keyBytes; /* 8, 16, or 24 bytes */
|
|
unsigned char *keyData;
|
|
unsigned long inIvBytes; /* 0 or 16 bytes */
|
|
unsigned char *inIvData;
|
|
unsigned long inBytes; /* multiple of 8 bytes */
|
|
unsigned char *inData;
|
|
unsigned char *outData; /* output length = input length */
|
|
unsigned long outCtxBytes; /* 0 or 16 bytes */
|
|
unsigned char *outCtxData;
|
|
} AESA_CRYPT_REQ;
|
|
|
|
#define NUM_AESA_CRYPT_DESC (8)
|
|
#define DPD_AESA_CRYPT_GROUP (0x6000)
|
|
|
|
#define DPD_AESA_CBC_ENCRYPT_CRYPT (DPD_AESA_CRYPT_GROUP + 0)
|
|
#define DPD_AESA_CBC_DECRYPT_CRYPT (DPD_AESA_CRYPT_GROUP + 1)
|
|
#define DPD_AESA_CBC_DECRYPT_CRYPT_RDK (DPD_AESA_CRYPT_GROUP + 2)
|
|
#define DPD_AESA_ECB_ENCRYPT_CRYPT (DPD_AESA_CRYPT_GROUP + 3)
|
|
#define DPD_AESA_ECB_DECRYPT_CRYPT (DPD_AESA_CRYPT_GROUP + 4)
|
|
#define DPD_AESA_ECB_DECRYPT_CRYPT_RDK (DPD_AESA_CRYPT_GROUP + 5)
|
|
#define DPD_AESA_CTR_CRYPT (DPD_AESA_CRYPT_GROUP + 6)
|
|
#define DPD_AESA_CTR_HMAC (DPD_AESA_CRYPT_GROUP + 7)
|
|
|
|
|
|
#if 0
|
|
/*
|
|
* KEA_CRYPT_REQ - Kasumi cipher operations
|
|
* Not present in 2.0
|
|
*
|
|
*/
|
|
|
|
typedef struct
|
|
{
|
|
COMMON_REQ_PREAMBLE
|
|
unsigned long ivBytes; /* 0 or 8 bytes */
|
|
unsigned char *ivData;
|
|
unsigned long keyBytes; /* 8, 16, or 24 bytes */
|
|
unsigned char *keyData;
|
|
unsigned long inBytes; /* multiple of 8 bytes */
|
|
unsigned char *inData;
|
|
unsigned char *outData; /* output length = input length */
|
|
} KEA_CRYPT_REQ;
|
|
|
|
#define NUM_KEA_CRYPT_DESC (4)
|
|
#define DPD_KEA_CRYPT_GROUP (0xA000)
|
|
|
|
/* Kasumi request types */
|
|
#define DPD_KEA_f8_UPLINK_CRYPT (DPD_KEA_CRYPT_GROUP + 0)
|
|
#define DPD_KEA_f8_DOWNLINK_CRYPT (DPD_KEA_CRYPT_GROUP + 1)
|
|
#define DPD_KEA_f9_UPLINK_CRYPT (DPD_KEA_CRYPT_GROUP + 2)
|
|
#define DPD_KEA_f9_DOWNLINK_CRYPT (DPD_KEA_CRYPT_GROUP + 3)
|
|
#endif /* #IF 0 */
|
|
|
|
|
|
|
|
|
|
/*
|
|
* ARC4_LOADCTX_CRYPT_REQ - ARC4 cipher operation with context load
|
|
*
|
|
*/
|
|
|
|
typedef struct
|
|
{
|
|
COMMON_REQ_PREAMBLE
|
|
unsigned long inCtxBytes; /* 257 bytes */
|
|
unsigned char *inCtxData;
|
|
unsigned long inBytes;
|
|
unsigned char *inData;
|
|
unsigned char *outData; /* output length = input length */
|
|
unsigned long outCtxBytes; /* 257 bytes */
|
|
unsigned char *outCtxData;
|
|
} ARC4_LOADCTX_CRYPT_REQ;
|
|
|
|
#define NUM_RC4_LOADCTX_UNLOADCTX_DESC (1)
|
|
#define DPD_RC4_LDCTX_CRYPT_ULCTX_GROUP (0x3400)
|
|
|
|
#define DPD_RC4_LDCTX_CRYPT_ULCTX (DPD_RC4_LDCTX_CRYPT_ULCTX_GROUP + 0)
|
|
|
|
|
|
|
|
|
|
/*
|
|
* ARC4_LOADKEY_CRYPT_UNLOADCTX_REQ - ARC4 operation with key load
|
|
* and context save
|
|
*
|
|
*/
|
|
|
|
typedef struct
|
|
{
|
|
COMMON_REQ_PREAMBLE
|
|
unsigned long keyBytes;
|
|
unsigned char *keyData;
|
|
unsigned long inBytes;
|
|
unsigned char *inData;
|
|
unsigned char *outData; /* output length = input length */
|
|
unsigned long outCtxBytes; /* 257 bytes */
|
|
unsigned char *outCtxData;
|
|
} ARC4_LOADKEY_CRYPT_UNLOADCTX_REQ;
|
|
|
|
#define NUM_RC4_LOADKEY_UNLOADCTX_DESC (1)
|
|
#define DPD_RC4_LDKEY_CRYPT_ULCTX_GROUP (0x3500)
|
|
|
|
#define DPD_RC4_LDKEY_CRYPT_ULCTX (DPD_RC4_LDKEY_CRYPT_ULCTX_GROUP + 0)
|
|
|
|
|
|
|
|
|
|
/*
|
|
* HASH_REQ - combined SHA/MD5 hash operations with context loads
|
|
* and saves
|
|
*
|
|
*/
|
|
|
|
typedef struct
|
|
{
|
|
COMMON_REQ_PREAMBLE
|
|
unsigned long ctxBytes;
|
|
unsigned char *ctxData;
|
|
unsigned long inBytes;
|
|
unsigned char *inData;
|
|
unsigned long outBytes; /* length is fixed by algorithm */
|
|
unsigned char *outData;
|
|
} HASH_REQ;
|
|
|
|
|
|
#define NUM_MDHA_DESC (9)
|
|
#define DPD_HASH_LDCTX_HASH_ULCTX_GROUP (0x4400)
|
|
|
|
#define DPD_SHA256_LDCTX_HASH_ULCTX (DPD_HASH_LDCTX_HASH_ULCTX_GROUP + 0)
|
|
#define DPD_MD5_LDCTX_HASH_ULCTX (DPD_HASH_LDCTX_HASH_ULCTX_GROUP + 1)
|
|
#define DPD_SHA_LDCTX_HASH_ULCTX (DPD_HASH_LDCTX_HASH_ULCTX_GROUP + 2)
|
|
#define DPD_SHA256_LDCTX_IDGS_HASH_ULCTX (DPD_HASH_LDCTX_HASH_ULCTX_GROUP + 3)
|
|
#define DPD_MD5_LDCTX_IDGS_HASH_ULCTX (DPD_HASH_LDCTX_HASH_ULCTX_GROUP + 4)
|
|
#define DPD_SHA_LDCTX_IDGS_HASH_ULCTX (DPD_HASH_LDCTX_HASH_ULCTX_GROUP + 5)
|
|
#define DPD_SHA256_CONT_HASH_ULCT X (DPD_HASH_LDCTX_HASH_ULCTX_GROUP + 6)
|
|
#define DPD_MD5_CONT_HASH_ULCTX (DPD_HASH_LDCTX_HASH_ULCTX_GROUP + 7)
|
|
#define DPD_SHA_CONT_HASH_ULCTX (DPD_HASH_LDCTX_HASH_ULCTX_GROUP + 8)
|
|
|
|
|
|
|
|
#define NUM_MDHA_PAD_DESC (9)
|
|
#define DPD_HASH_LDCTX_HASH_PAD_ULCTX_GROUP (0x4500)
|
|
|
|
#define DPD_SHA256_LDCTX_HASH_PAD_ULCTX (DPD_HASH_LDCTX_HASH_PAD_ULCTX_GROUP + 0)
|
|
#define DPD_MD5_LDCTX_HASH_PAD_ULCTX (DPD_HASH_LDCTX_HASH_PAD_ULCTX_GROUP + 1)
|
|
#define DPD_SHA_LDCTX_HASH_PAD_ULCTX (DPD_HASH_LDCTX_HASH_PAD_ULCTX_GROUP + 2)
|
|
#define DPD_SHA256_LDCTX_IDGS_HASH_PAD_ULCTX (DPD_HASH_LDCTX_HASH_PAD_ULCTX_GROUP + 3)
|
|
#define DPD_MD5_LDCTX_IDGS_HASH_PAD_ULCTX (DPD_HASH_LDCTX_HASH_PAD_ULCTX_GROUP + 4)
|
|
#define DPD_SHA_LDCTX_IDGS_HASH_PAD_ULCTX (DPD_HASH_LDCTX_HASH_PAD_ULCTX_GROUP + 5)
|
|
#define DPD_SHA256_CONT_HASH_PAD_ULCTX (DPD_HASH_LDCTX_HASH_PAD_ULCTX_GROUP + 6)
|
|
#define DPD_MD5_CONT_HASH_PAD_ULCTX (DPD_HASH_LDCTX_HASH_PAD_ULCTX_GROUP + 7)
|
|
#define DPD_SHA_CONT_HASH_PAD_ULCTX (DPD_HASH_LDCTX_HASH_PAD_ULCTX_GROUP + 8)
|
|
|
|
|
|
|
|
/*
|
|
* HMAC_PAD_REQ - Hash-message authentication code
|
|
*
|
|
*/
|
|
|
|
typedef struct
|
|
{
|
|
COMMON_REQ_PREAMBLE
|
|
unsigned long keyBytes;
|
|
unsigned char *keyData;
|
|
unsigned long inBytes;
|
|
unsigned char *inData;
|
|
unsigned long outBytes; /* length is fixed by algorithm */
|
|
unsigned char *outData;
|
|
} HMAC_PAD_REQ;
|
|
|
|
#define NUM_HMAC_PAD_DESC (6)
|
|
#define DPD_HASH_LDCTX_HMAC_ULCTX_GROUP (0x4A00)
|
|
|
|
#define DPD_SHA256_LDCTX_HMAC_ULCTX (DPD_HASH_LDCTX_HMAC_ULCTX_GROUP + 0)
|
|
#define DPD_MD5_LDCTX_HMAC_ULCTX (DPD_HASH_LDCTX_HMAC_ULCTX_GROUP + 1)
|
|
#define DPD_SHA_LDCTX_HMAC_ULCTX (DPD_HASH_LDCTX_HMAC_ULCTX_GROUP + 2)
|
|
#define DPD_SHA256_LDCTX_HMAC_PAD_ULCTX (DPD_HASH_LDCTX_HMAC_ULCTX_GROUP + 3)
|
|
#define DPD_MD5_LDCTX_HMAC_PAD_ULCTX (DPD_HASH_LDCTX_HMAC_ULCTX_GROUP + 4)
|
|
#define DPD_SHA_LDCTX_HMAC_PAD_ULCTX (DPD_HASH_LDCTX_HMAC_ULCTX_GROUP + 5)
|
|
|
|
|
|
|
|
|
|
/*
|
|
* MOD_EXP_REQ - integer public key (modular expo) operations
|
|
*
|
|
*/
|
|
|
|
typedef struct
|
|
{
|
|
COMMON_REQ_PREAMBLE
|
|
unsigned long aDataBytes;
|
|
unsigned char *aData;
|
|
unsigned long expBytes;
|
|
unsigned char *expData;
|
|
unsigned long modBytes;
|
|
unsigned char *modData;
|
|
unsigned long outBytes;
|
|
unsigned char *outData;
|
|
} MOD_EXP_REQ;
|
|
|
|
#define NUM_MM_EXP_DESC (1)
|
|
#define DPD_MM_LDCTX_EXP_ULCTX_GROUP (0x5100)
|
|
|
|
#define DPD_MM_LDCTX_EXP_ULCTX (DPD_MM_LDCTX_EXP_ULCTX_GROUP + 0)
|
|
|
|
|
|
|
|
|
|
/*
|
|
* MOD_SS_EXP_REQ - single-stage RSA operations
|
|
*
|
|
*/
|
|
typedef struct
|
|
{
|
|
COMMON_REQ_PREAMBLE
|
|
unsigned long expBytes;
|
|
unsigned char *expData;
|
|
unsigned long modBytes;
|
|
unsigned char *modData;
|
|
unsigned long aDataBytes;
|
|
unsigned char *aData;
|
|
unsigned long bDataBytes;
|
|
unsigned char *bData;
|
|
} MOD_SS_EXP_REQ;
|
|
|
|
#define NUM_MM_SS_EXP_DESC (1)
|
|
#define DPD_MM_SS_EXP_GROUP (0x5B00)
|
|
|
|
#define DPD_MM_SS_RSA_EXP (DPD_MM_SS_EXP_GROUP + 0)
|
|
|
|
#if 0
|
|
/*
|
|
* MOD_R2MODN_REQ - Modular R2 operations
|
|
*
|
|
*/
|
|
|
|
typedef struct
|
|
{
|
|
COMMON_REQ_PREAMBLE
|
|
unsigned long modBytes;
|
|
unsigned char *modData;
|
|
unsigned long outBytes;
|
|
unsigned char *outData;
|
|
} MOD_R2MODN_REQ;
|
|
|
|
#define NUM_MOD_R2MODN_DESC (1)
|
|
#define DPD_MM_LDCTX_R2MODN_ULCTX_GROUP (0x5200)
|
|
|
|
#define DPD_MM_LDCTX_R2MODN_ULCTX (DPD_MM_LDCTX_R2MODN_ULCTX_GROUP + 0)
|
|
#endif /* #IF 0 */
|
|
|
|
|
|
|
|
#if 0
|
|
/*
|
|
* MOD_RRMODP_REQ - montgomery precomputation operations
|
|
*
|
|
*/
|
|
|
|
typedef struct
|
|
{
|
|
COMMON_REQ_PREAMBLE
|
|
unsigned long nBytes;
|
|
unsigned long pBytes;
|
|
unsigned char *pData;
|
|
unsigned long outBytes;
|
|
unsigned char *outData;
|
|
} MOD_RRMODP_REQ;
|
|
|
|
#define NUM_MM_RRMODP_DESC (1)
|
|
#define DPD_MM_LDCTX_RRMODP_ULCTX_GROUP (0x5300)
|
|
|
|
#define DPD_MM_LDCTX_RRMODP_ULCTX (DPD_MM_LDCTX_RRMODP_ULCTX_GROUP + 0)
|
|
#endif /* #IF 0 */
|
|
|
|
|
|
#if 0
|
|
/*
|
|
* MOD_2OP_REQ
|
|
*
|
|
*/
|
|
|
|
typedef struct
|
|
{
|
|
COMMON_REQ_PREAMBLE
|
|
unsigned long bDataBytes;
|
|
unsigned char *bData;
|
|
unsigned long aDataBytes;
|
|
unsigned char *aData;
|
|
unsigned long modBytes;
|
|
unsigned char *modData;
|
|
unsigned long outBytes;
|
|
unsigned char *outData;
|
|
} MOD_2OP_REQ;
|
|
|
|
#define NUM_MOD_2OP_DESC (52)
|
|
#define DPD_MOD_LDCTX_2OP_ULCTX_GROUP (0x5400)
|
|
|
|
#define DPD_MOD_LDCTX_MUL1_ULCTX (DPD_MOD_LDCTX_2OP_ULCTX_GROUP + 0)
|
|
#define DPD_MOD_LDCTX_MUL2_ULCTX (DPD_MOD_LDCTX_2OP_ULCTX_GROUP + 1)
|
|
#define DPD_MOD_LDCTX_ADD_ULCTX (DPD_MOD_LDCTX_2OP_ULCTX_GROUP + 2)
|
|
#define DPD_MOD_LDCTX_SUB_ULCTX (DPD_MOD_LDCTX_2OP_ULCTX_GROUP + 3)
|
|
|
|
/* equivalents for obsolete names */
|
|
#define DPD_MM_LDCTX_MUL1_ULCTX DPD_MOD_LDCTX_MUL1_ULCTX
|
|
#define DPD_MM_LDCTX_MUL2_ULCTX DPD_MOD_LDCTX_MUL2_ULCTX
|
|
#define DPD_MM_LDCTX_ADD_ULCTX DPD_MOD_LDCTX_ADD_ULCTX
|
|
#define DPD_MM_LDCTX_SUB_ULCTX DPD_MOD_LDCTX_SUB_ULCTX
|
|
|
|
/* These constants will likely be removed in a future release in favor */
|
|
/* of a different internal register allocation scheme */
|
|
#define DPD_POLY_LDCTX_A0_B0_MUL1_ULCTX (DPD_MOD_LDCTX_2OP_ULCTX_GROUP + 4)
|
|
#define DPD_POLY_LDCTX_A0_B0_MUL2_ULCTX (DPD_MOD_LDCTX_2OP_ULCTX_GROUP + 5)
|
|
#define DPD_POLY_LDCTX_A0_B0_ADD_ULCTX (DPD_MOD_LDCTX_2OP_ULCTX_GROUP + 6)
|
|
#define DPD_POLY_LDCTX_A1_B0_MUL1_ULCTX (DPD_MOD_LDCTX_2OP_ULCTX_GROUP + 7)
|
|
#define DPD_POLY_LDCTX_A1_B0_MUL2_ULCTX (DPD_MOD_LDCTX_2OP_ULCTX_GROUP + 8)
|
|
#define DPD_POLY_LDCTX_A1_B0_ADD_ULCTX (DPD_MOD_LDCTX_2OP_ULCTX_GROUP + 9)
|
|
#define DPD_POLY_LDCTX_A2_B0_MUL1_ULCTX (DPD_MOD_LDCTX_2OP_ULCTX_GROUP + 10)
|
|
#define DPD_POLY_LDCTX_A2_B0_MUL2_ULCTX (DPD_MOD_LDCTX_2OP_ULCTX_GROUP + 11)
|
|
#define DPD_POLY_LDCTX_A2_B0_ADD_ULCTX (DPD_MOD_LDCTX_2OP_ULCTX_GROUP + 12)
|
|
#define DPD_POLY_LDCTX_A3_B0_MUL1_ULCTX (DPD_MOD_LDCTX_2OP_ULCTX_GROUP + 13)
|
|
#define DPD_POLY_LDCTX_A3_B0_MUL2_ULCTX (DPD_MOD_LDCTX_2OP_ULCTX_GROUP + 14)
|
|
#define DPD_POLY_LDCTX_A3_B0_ADD_ULCTX (DPD_MOD_LDCTX_2OP_ULCTX_GROUP + 15)
|
|
#define DPD_POLY_LDCTX_A0_B1_MUL1_ULCTX (DPD_MOD_LDCTX_2OP_ULCTX_GROUP + 16)
|
|
#define DPD_POLY_LDCTX_A0_B1_MUL2_ULCTX (DPD_MOD_LDCTX_2OP_ULCTX_GROUP + 17)
|
|
#define DPD_POLY_LDCTX_A0_B1_ADD_ULCTX (DPD_MOD_LDCTX_2OP_ULCTX_GROUP + 18)
|
|
#define DPD_POLY_LDCTX_A1_B1_MUL1_ULCTX (DPD_MOD_LDCTX_2OP_ULCTX_GROUP + 19)
|
|
#define DPD_POLY_LDCTX_A1_B1_MUL2_ULCTX (DPD_MOD_LDCTX_2OP_ULCTX_GROUP + 20)
|
|
#define DPD_POLY_LDCTX_A1_B1_ADD_ULCTX (DPD_MOD_LDCTX_2OP_ULCTX_GROUP + 21)
|
|
#define DPD_POLY_LDCTX_A2_B1_MUL1_ULCTX (DPD_MOD_LDCTX_2OP_ULCTX_GROUP + 22)
|
|
#define DPD_POLY_LDCTX_A2_B1_MUL2_ULCTX (DPD_MOD_LDCTX_2OP_ULCTX_GROUP + 23)
|
|
#define DPD_POLY_LDCTX_A2_B1_ADD_ULCTX (DPD_MOD_LDCTX_2OP_ULCTX_GROUP + 24)
|
|
#define DPD_POLY_LDCTX_A3_B1_MUL1_ULCTX (DPD_MOD_LDCTX_2OP_ULCTX_GROUP + 25)
|
|
#define DPD_POLY_LDCTX_A3_B1_MUL2_ULCTX (DPD_MOD_LDCTX_2OP_ULCTX_GROUP + 26)
|
|
#define DPD_POLY_LDCTX_A3_B1_ADD_ULCTX (DPD_MOD_LDCTX_2OP_ULCTX_GROUP + 27)
|
|
#define DPD_POLY_LDCTX_A0_B2_MUL1_ULCTX (DPD_MOD_LDCTX_2OP_ULCTX_GROUP + 28)
|
|
#define DPD_POLY_LDCTX_A0_B2_MUL2_ULCTX (DPD_MOD_LDCTX_2OP_ULCTX_GROUP + 29)
|
|
#define DPD_POLY_LDCTX_A0_B2_ADD_ULCTX (DPD_MOD_LDCTX_2OP_ULCTX_GROUP + 30)
|
|
#define DPD_POLY_LDCTX_A1_B2_MUL1_ULCTX (DPD_MOD_LDCTX_2OP_ULCTX_GROUP + 31)
|
|
#define DPD_POLY_LDCTX_A1_B2_MUL2_ULCTX (DPD_MOD_LDCTX_2OP_ULCTX_GROUP + 32)
|
|
#define DPD_POLY_LDCTX_A1_B2_ADD_ULCTX (DPD_MOD_LDCTX_2OP_ULCTX_GROUP + 33)
|
|
#define DPD_POLY_LDCTX_A2_B2_MUL1_ULCTX (DPD_MOD_LDCTX_2OP_ULCTX_GROUP + 34)
|
|
#define DPD_POLY_LDCTX_A2_B2_MUL2_ULCTX (DPD_MOD_LDCTX_2OP_ULCTX_GROUP + 35)
|
|
#define DPD_POLY_LDCTX_A2_B2_ADD_ULCTX (DPD_MOD_LDCTX_2OP_ULCTX_GROUP + 36)
|
|
#define DPD_POLY_LDCTX_A3_B2_MUL1_ULCTX (DPD_MOD_LDCTX_2OP_ULCTX_GROUP + 37)
|
|
#define DPD_POLY_LDCTX_A3_B2_MUL2_ULCTX (DPD_MOD_LDCTX_2OP_ULCTX_GROUP + 38)
|
|
#define DPD_POLY_LDCTX_A3_B2_ADD_ULCTX (DPD_MOD_LDCTX_2OP_ULCTX_GROUP + 39)
|
|
#define DPD_POLY_LDCTX_A0_B3_MUL1_ULCTX (DPD_MOD_LDCTX_2OP_ULCTX_GROUP + 40)
|
|
#define DPD_POLY_LDCTX_A0_B3_MUL2_ULCTX (DPD_MOD_LDCTX_2OP_ULCTX_GROUP + 41)
|
|
#define DPD_POLY_LDCTX_A0_B3_ADD_ULCTX (DPD_MOD_LDCTX_2OP_ULCTX_GROUP + 42)
|
|
#define DPD_POLY_LDCTX_A1_B3_MUL1_ULCTX (DPD_MOD_LDCTX_2OP_ULCTX_GROUP + 43)
|
|
#define DPD_POLY_LDCTX_A1_B3_MUL2_ULCTX (DPD_MOD_LDCTX_2OP_ULCTX_GROUP + 44)
|
|
#define DPD_POLY_LDCTX_A1_B3_ADD_ULCTX (DPD_MOD_LDCTX_2OP_ULCTX_GROUP + 45)
|
|
#define DPD_POLY_LDCTX_A2_B3_MUL1_ULCTX (DPD_MOD_LDCTX_2OP_ULCTX_GROUP + 46)
|
|
#define DPD_POLY_LDCTX_A2_B3_MUL2_ULCTX (DPD_MOD_LDCTX_2OP_ULCTX_GROUP + 47)
|
|
#define DPD_POLY_LDCTX_A2_B3_ADD_ULCTX (DPD_MOD_LDCTX_2OP_ULCTX_GROUP + 48)
|
|
#define DPD_POLY_LDCTX_A3_B3_MUL1_ULCTX (DPD_MOD_LDCTX_2OP_ULCTX_GROUP + 49)
|
|
#define DPD_POLY_LDCTX_A3_B3_MUL2_ULCTX (DPD_MOD_LDCTX_2OP_ULCTX_GROUP + 50)
|
|
#define DPD_POLY_LDCTX_A3_B3_ADD_ULCTX (DPD_MOD_LDCTX_2OP_ULCTX_GROUP + 51)
|
|
|
|
#endif /* #IF 0 */
|
|
|
|
|
|
#if 0
|
|
/*
|
|
* ECC_POINT_REQ - elliptic curve point processing
|
|
*
|
|
*/
|
|
|
|
typedef struct
|
|
{
|
|
COMMON_REQ_PREAMBLE
|
|
unsigned long nDataBytes;
|
|
unsigned char *nData;
|
|
unsigned long eDataBytes;
|
|
unsigned char *eData;
|
|
unsigned long buildDataBytes;
|
|
unsigned char *buildData;
|
|
unsigned long b1DataBytes;
|
|
unsigned char *b1Data;
|
|
unsigned long b2DataBytes;
|
|
unsigned char *b2Data;
|
|
unsigned long b3DataBytes;
|
|
unsigned char *b3Data;
|
|
} ECC_POINT_REQ;
|
|
|
|
#define NUM_EC_POINT_DESC (8)
|
|
#define DPD_EC_LDCTX_kP_ULCTX_GROUP (0x5800)
|
|
|
|
#define DPD_EC_FP_AFF_PT_MULT (DPD_EC_LDCTX_kP_ULCTX_GROUP + 0)
|
|
#define DPD_EC_FP_PROJ_PT_MULT (DPD_EC_LDCTX_kP_ULCTX_GROUP + 1)
|
|
#define DPD_EC_F2M_AFF_PT_MULT (DPD_EC_LDCTX_kP_ULCTX_GROUP + 2)
|
|
#define DPD_EC_F2M_PROJ_PT_MULT (DPD_EC_LDCTX_kP_ULCTX_GROUP + 3)
|
|
#define DPD_EC_FP_LDCTX_ADD_ULCTX (DPD_EC_LDCTX_kP_ULCTX_GROUP + 4)
|
|
#define DPD_EC_FP_LDCTX_DOUBLE_ULCTX (DPD_EC_LDCTX_kP_ULCTX_GROUP + 5)
|
|
#define DPD_EC_F2M_LDCTX_ADD_ULCTX (DPD_EC_LDCTX_kP_ULCTX_GROUP + 6)
|
|
#define DPD_EC_F2M_LDCTX_DOUBLE_ULCTX (DPD_EC_LDCTX_kP_ULCTX_GROUP + 7)
|
|
|
|
/* legacy name definitions */
|
|
#define DPD_EC_FP_AFF_LDCTX_kP_ULCTX DPD_EC_FP_AFF_PT_MULT
|
|
#define DPD_EC_FP_PROJ_LDCTX_kP_ULCTX DPD_EC_FP_PROJ_PT_MULT
|
|
#define DPD_EC_F2M_AFF_LDCTX_kP_ULCTX DPD_EC_F2M_AFF_PT_MULT
|
|
#define DPD_EC_F2M_PROJ_LDCTX_kP_ULCTX DPD_EC_F2M_PROJ_PT_MULT
|
|
|
|
#endif /* #IF 0 */
|
|
|
|
#if 0
|
|
/*
|
|
* ECC_2OP_REQ - F2M elliptic curve operations
|
|
*
|
|
*/
|
|
|
|
typedef struct
|
|
{
|
|
COMMON_REQ_PREAMBLE
|
|
unsigned long bDataBytes;
|
|
unsigned char *bData;
|
|
unsigned long aDataBytes;
|
|
unsigned char *aData;
|
|
unsigned long modBytes;
|
|
unsigned char *modData;
|
|
unsigned long outBytes;
|
|
unsigned char *outData;
|
|
} ECC_2OP_REQ;
|
|
|
|
#define NUM_EC_2OP_DESC (1)
|
|
#define DPD_EC_2OP_GROUP (0x5900)
|
|
|
|
#define DPD_EC_F2M_LDCTX_MUL1_ULCTX (DPD_EC_2OP_GROUP + 0)
|
|
|
|
|
|
|
|
/*
|
|
* ECC_SPKBUILD_REQ - elliptic curve request builder
|
|
*
|
|
*/
|
|
|
|
typedef struct
|
|
{
|
|
COMMON_REQ_PREAMBLE
|
|
unsigned long a0DataBytes;
|
|
unsigned char *a0Data;
|
|
unsigned long a1DataBytes;
|
|
unsigned char *a1Data;
|
|
unsigned long a2DataBytes;
|
|
unsigned char *a2Data;
|
|
unsigned long a3DataBytes;
|
|
unsigned char *a3Data;
|
|
unsigned long b0DataBytes;
|
|
unsigned char *b0Data;
|
|
unsigned long b1DataBytes;
|
|
unsigned char *b1Data;
|
|
unsigned long buildDataBytes;
|
|
unsigned char *buildData;
|
|
} ECC_SPKBUILD_REQ;
|
|
|
|
#define NUM_EC_SPKBUILD_DESC (1)
|
|
#define DPD_EC_SPKBUILD_GROUP (0x5c00)
|
|
|
|
#define DPD_EC_SPKBUILD (DPD_EC_SPKBUILD_GROUP + 0)
|
|
|
|
|
|
|
|
|
|
/*
|
|
* ECC_PTADD_DBL_REQ - elliptic curve point add
|
|
*/
|
|
|
|
typedef struct
|
|
{
|
|
COMMON_REQ_PREAMBLE
|
|
unsigned long modBytes;
|
|
unsigned char *modData;
|
|
unsigned long buildDataBytes;
|
|
unsigned char *buildData;
|
|
unsigned long b2InDataBytes;
|
|
unsigned char *b2InData;
|
|
unsigned long b3InDataBytes;
|
|
unsigned char *b3InData;
|
|
unsigned long b1DataBytes;
|
|
unsigned char *b1Data;
|
|
unsigned long b2DataBytes;
|
|
unsigned char *b2Data;
|
|
unsigned long b3DataBytes;
|
|
unsigned char *b3Data;
|
|
} ECC_PTADD_DBL_REQ;
|
|
|
|
#define NUM_EC_PTADD_DBL_DESC (4)
|
|
#define DPD_EC_PTADD_DBL_GROUP (0x5d00)
|
|
|
|
#define DPD_EC_FPADD (DPD_EC_PTADD_DBL_GROUP + 0)
|
|
#define DPD_EC_FPDBL (DPD_EC_PTADD_DBL_GROUP + 0)
|
|
#define DPD_EC_F2MADD (DPD_EC_PTADD_DBL_GROUP + 0)
|
|
#define DPD_EC_F2MDBL (DPD_EC_PTADD_DBL_GROUP + 0)
|
|
|
|
#endif /* #IF 0 */
|
|
|
|
|
|
|
|
|
|
/*
|
|
* IPSEC_CBC_REQ - common IPSec/DES-CBC compound request operations
|
|
*
|
|
*/
|
|
|
|
typedef struct
|
|
{
|
|
COMMON_REQ_PREAMBLE
|
|
unsigned long hashKeyBytes;
|
|
unsigned char *hashKeyData;
|
|
unsigned long cryptKeyBytes;
|
|
unsigned char *cryptKeyData;
|
|
unsigned long cryptCtxInBytes;
|
|
unsigned char *cryptCtxInData;
|
|
unsigned long hashInDataBytes;
|
|
unsigned char *hashInData;
|
|
unsigned long inDataBytes;
|
|
unsigned char *inData;
|
|
unsigned char *cryptDataOut;
|
|
unsigned long hashDataOutBytes;
|
|
unsigned char *hashDataOut;
|
|
} IPSEC_CBC_REQ;
|
|
|
|
#define NUM_IPSEC_CBC_DESC (24)
|
|
#define DPD_IPSEC_CBC_GROUP (0x7000)
|
|
|
|
#define DPD_IPSEC_CBC_SDES_ENCRYPT_MD5_PAD (DPD_IPSEC_CBC_GROUP + 0)
|
|
#define DPD_IPSEC_CBC_SDES_ENCRYPT_SHA_PAD (DPD_IPSEC_CBC_GROUP + 1)
|
|
#define DPD_IPSEC_CBC_SDES_ENCRYPT_SHA256_PAD (DPD_IPSEC_CBC_GROUP + 2)
|
|
#define DPD_IPSEC_CBC_SDES_DECRYPT_MD5_PAD (DPD_IPSEC_CBC_GROUP + 3)
|
|
#define DPD_IPSEC_CBC_SDES_DECRYPT_SHA_PAD (DPD_IPSEC_CBC_GROUP + 4)
|
|
#define DPD_IPSEC_CBC_SDES_DECRYPT_SHA256_PAD (DPD_IPSEC_CBC_GROUP + 5)
|
|
#define DPD_IPSEC_CBC_TDES_ENCRYPT_MD5_PAD (DPD_IPSEC_CBC_GROUP + 6)
|
|
#define DPD_IPSEC_CBC_TDES_ENCRYPT_SHA_PAD (DPD_IPSEC_CBC_GROUP + 7)
|
|
#define DPD_IPSEC_CBC_TDES_ENCRYPT_SHA256_PAD (DPD_IPSEC_CBC_GROUP + 8)
|
|
#define DPD_IPSEC_CBC_TDES_DECRYPT_MD5_PAD (DPD_IPSEC_CBC_GROUP + 9)
|
|
#define DPD_IPSEC_CBC_TDES_DECRYPT_SHA_PAD (DPD_IPSEC_CBC_GROUP + 10)
|
|
#define DPD_IPSEC_CBC_TDES_DECRYPT_SHA256_PAD (DPD_IPSEC_CBC_GROUP + 11)
|
|
|
|
/* All "standard" legacy request types will autopad, no reason */
|
|
/* to do otherwise */
|
|
#define DPD_IPSEC_CBC_SDES_ENCRYPT_MD5 DPD_IPSEC_CBC_SDES_ENCRYPT_MD5_PAD
|
|
#define DPD_IPSEC_CBC_SDES_ENCRYPT_SHA DPD_IPSEC_CBC_SDES_ENCRYPT_SHA_PAD
|
|
#define DPD_IPSEC_CBC_SDES_ENCRYPT_SHA256 DPD_IPSEC_CBC_SDES_ENCRYPT_SHA256_PAD
|
|
#define DPD_IPSEC_CBC_SDES_DECRYPT_MD5 DPD_IPSEC_CBC_SDES_DECRYPT_MD5_PAD
|
|
#define DPD_IPSEC_CBC_SDES_DECRYPT_SHA DPD_IPSEC_CBC_SDES_DECRYPT_SHA_PAD
|
|
#define DPD_IPSEC_CBC_SDES_DECRYPT_SHA256 DPD_IPSEC_CBC_SDES_DECRYPT_SHA256_PAD
|
|
#define DPD_IPSEC_CBC_TDES_ENCRYPT_MD5 DPD_IPSEC_CBC_TDES_ENCRYPT_MD5_PAD
|
|
#define DPD_IPSEC_CBC_TDES_ENCRYPT_SHA DPD_IPSEC_CBC_TDES_ENCRYPT_SHA_PAD
|
|
#define DPD_IPSEC_CBC_TDES_ENCRYPT_SHA256 DPD_IPSEC_CBC_TDES_ENCRYPT_SHA256_PAD
|
|
#define DPD_IPSEC_CBC_TDES_DECRYPT_MD5 DPD_IPSEC_CBC_TDES_DECRYPT_MD5_PAD
|
|
#define DPD_IPSEC_CBC_TDES_DECRYPT_SHA DPD_IPSEC_CBC_TDES_DECRYPT_SHA_PAD
|
|
#define DPD_IPSEC_CBC_TDES_DECRYPT_SHA256 DPD_IPSEC_CBC_TDES_DECRYPT_SHA256_PAD
|
|
|
|
|
|
|
|
/*
|
|
* IPSEC_ECB_REQ - common IPSec/DES-ECB compound request operations
|
|
*
|
|
*/
|
|
|
|
typedef struct
|
|
{
|
|
COMMON_REQ_PREAMBLE
|
|
unsigned long hashKeyBytes;
|
|
unsigned char *hashKeyData;
|
|
unsigned long cryptKeyBytes;
|
|
unsigned char *cryptKeyData;
|
|
unsigned long hashInDataBytes;
|
|
unsigned char *hashInData;
|
|
unsigned long inDataBytes;
|
|
unsigned char *inData;
|
|
unsigned long hashDataOutBytes;
|
|
unsigned char *hashDataOut;
|
|
unsigned char *cryptDataOut;
|
|
} IPSEC_ECB_REQ;
|
|
|
|
#define NUM_IPSEC_ECB_DESC (24)
|
|
#define DPD_IPSEC_ECB_GROUP (0x7100)
|
|
|
|
#define DPD_IPSEC_ECB_SDES_ENCRYPT_MD5_PAD (DPD_IPSEC_ECB_GROUP + 0)
|
|
#define DPD_IPSEC_ECB_SDES_ENCRYPT_SHA_PAD (DPD_IPSEC_ECB_GROUP + 1)
|
|
#define DPD_IPSEC_ECB_SDES_ENCRYPT_SHA256_PAD (DPD_IPSEC_ECB_GROUP + 2)
|
|
#define DPD_IPSEC_ECB_SDES_DECRYPT_MD5_PAD (DPD_IPSEC_ECB_GROUP + 3)
|
|
#define DPD_IPSEC_ECB_SDES_DECRYPT_SHA_PAD (DPD_IPSEC_ECB_GROUP + 4)
|
|
#define DPD_IPSEC_ECB_SDES_DECRYPT_SHA256_PAD (DPD_IPSEC_ECB_GROUP + 5)
|
|
#define DPD_IPSEC_ECB_TDES_ENCRYPT_MD5_PAD (DPD_IPSEC_ECB_GROUP + 6)
|
|
#define DPD_IPSEC_ECB_TDES_ENCRYPT_SHA_PAD (DPD_IPSEC_ECB_GROUP + 7)
|
|
#define DPD_IPSEC_ECB_TDES_ENCRYPT_SHA256_PAD (DPD_IPSEC_ECB_GROUP + 8)
|
|
#define DPD_IPSEC_ECB_TDES_DECRYPT_MD5_PAD (DPD_IPSEC_ECB_GROUP + 9)
|
|
#define DPD_IPSEC_ECB_TDES_DECRYPT_SHA_PAD (DPD_IPSEC_ECB_GROUP + 10)
|
|
#define DPD_IPSEC_ECB_TDES_DECRYPT_SHA256_PAD (DPD_IPSEC_ECB_GROUP + 11)
|
|
|
|
#define DPD_IPSEC_ECB_SDES_ENCRYPT_MD5 DPD_IPSEC_ECB_SDES_ENCRYPT_MD5_PAD
|
|
#define DPD_IPSEC_ECB_SDES_ENCRYPT_SHA DPD_IPSEC_ECB_SDES_ENCRYPT_SHA_PAD
|
|
#define DPD_IPSEC_ECB_SDES_ENCRYPT_SHA256 DPD_IPSEC_ECB_SDES_ENCRYPT_SHA256_PAD
|
|
#define DPD_IPSEC_ECB_SDES_DECRYPT_MD5 DPD_IPSEC_ECB_SDES_DECRYPT_MD5_PAD
|
|
#define DPD_IPSEC_ECB_SDES_DECRYPT_SHA DPD_IPSEC_ECB_SDES_DECRYPT_SHA_PAD
|
|
#define DPD_IPSEC_ECB_SDES_DECRYPT_SHA256 DPD_IPSEC_ECB_SDES_DECRYPT_SHA256_PAD
|
|
#define DPD_IPSEC_ECB_TDES_ENCRYPT_MD5 DPD_IPSEC_ECB_TDES_ENCRYPT_MD5_PAD
|
|
#define DPD_IPSEC_ECB_TDES_ENCRYPT_SHA DPD_IPSEC_ECB_TDES_ENCRYPT_SHA_PAD
|
|
#define DPD_IPSEC_ECB_TDES_ENCRYPT_SHA256 DPD_IPSEC_ECB_TDES_ENCRYPT_SHA256_PAD
|
|
#define DPD_IPSEC_ECB_TDES_DECRYPT_MD5 DPD_IPSEC_ECB_TDES_DECRYPT_MD5_PAD
|
|
#define DPD_IPSEC_ECB_TDES_DECRYPT_SHA DPD_IPSEC_ECB_TDES_DECRYPT_SHA_PAD
|
|
#define DPD_IPSEC_ECB_TDES_DECRYPT_SHA256 DPD_IPSEC_ECB_TDES_DECRYPT_SHA256_PAD
|
|
|
|
|
|
|
|
/*
|
|
* IPSEC_AES_CBC_REQ - common IPSec/AES-CBC compound request operations
|
|
*
|
|
*/
|
|
|
|
typedef struct
|
|
{
|
|
COMMON_REQ_PREAMBLE
|
|
unsigned long hashKeyBytes;
|
|
unsigned char *hashKeyData;
|
|
unsigned long cryptKeyBytes;
|
|
unsigned char *cryptKeyData;
|
|
unsigned long cryptCtxInBytes;
|
|
unsigned char *cryptCtxInData;
|
|
unsigned long hashInDataBytes;
|
|
unsigned char *hashInData;
|
|
unsigned long inDataBytes;
|
|
unsigned char *inData;
|
|
unsigned char *cryptDataOut;
|
|
unsigned long hashDataOutBytes;
|
|
unsigned char *hashDataOut;
|
|
} IPSEC_AES_CBC_REQ;
|
|
|
|
#define NUM_IPSEC_AES_CBC_DESC (12)
|
|
#define DPD_IPSEC_AES_CBC_GROUP (0x8000)
|
|
|
|
#define DPD_IPSEC_AES_CBC_ENCRYPT_MD5_APAD (DPD_IPSEC_AES_CBC_GROUP + 0)
|
|
#define DPD_IPSEC_AES_CBC_ENCRYPT_SHA_APAD (DPD_IPSEC_AES_CBC_GROUP + 1)
|
|
#define DPD_IPSEC_AES_CBC_ENCRYPT_SHA256_APAD (DPD_IPSEC_AES_CBC_GROUP + 2)
|
|
#define DPD_IPSEC_AES_CBC_ENCRYPT_MD5 (DPD_IPSEC_AES_CBC_GROUP + 3)
|
|
#define DPD_IPSEC_AES_CBC_ENCRYPT_SHA (DPD_IPSEC_AES_CBC_GROUP + 4)
|
|
#define DPD_IPSEC_AES_CBC_ENCRYPT_SHA256 (DPD_IPSEC_AES_CBC_GROUP + 5)
|
|
#define DPD_IPSEC_AES_CBC_DECRYPT_MD5_APAD (DPD_IPSEC_AES_CBC_GROUP + 6)
|
|
#define DPD_IPSEC_AES_CBC_DECRYPT_SHA_APAD (DPD_IPSEC_AES_CBC_GROUP + 7)
|
|
#define DPD_IPSEC_AES_CBC_DECRYPT_SHA256_APAD (DPD_IPSEC_AES_CBC_GROUP + 8)
|
|
#define DPD_IPSEC_AES_CBC_DECRYPT_MD5 (DPD_IPSEC_AES_CBC_GROUP + 9)
|
|
#define DPD_IPSEC_AES_CBC_DECRYPT_SHA (DPD_IPSEC_AES_CBC_GROUP + 10)
|
|
#define DPD_IPSEC_AES_CBC_DECRYPT_SHA256 (DPD_IPSEC_AES_CBC_GROUP + 11)
|
|
|
|
|
|
|
|
/*
|
|
* IPSEC_AES_ECB_REQ - common IPSec/AES-ECB compound request operations
|
|
*
|
|
*/
|
|
|
|
typedef struct
|
|
{
|
|
COMMON_REQ_PREAMBLE
|
|
unsigned long hashKeyBytes;
|
|
unsigned char *hashKeyData;
|
|
unsigned long cryptKeyBytes;
|
|
unsigned char *cryptKeyData;
|
|
unsigned long hashInDataBytes;
|
|
unsigned char *hashInData;
|
|
unsigned long inDataBytes;
|
|
unsigned char *inData;
|
|
unsigned char *cryptDataOut;
|
|
unsigned long hashDataOutBytes;
|
|
unsigned char *hashDataOut;
|
|
} IPSEC_AES_ECB_REQ;
|
|
|
|
#define NUM_IPSEC_AES_ECB_DESC (12)
|
|
#define DPD_IPSEC_AES_ECB_GROUP (0x8100)
|
|
|
|
#define DPD_IPSEC_AES_ECB_ENCRYPT_MD5_APAD (DPD_IPSEC_AES_ECB_GROUP + 0)
|
|
#define DPD_IPSEC_AES_ECB_ENCRYPT_SHA_APAD (DPD_IPSEC_AES_ECB_GROUP + 1)
|
|
#define DPD_IPSEC_AES_ECB_ENCRYPT_SHA256_APAD (DPD_IPSEC_AES_ECB_GROUP + 2)
|
|
#define DPD_IPSEC_AES_ECB_ENCRYPT_MD5 (DPD_IPSEC_AES_ECB_GROUP + 3)
|
|
#define DPD_IPSEC_AES_ECB_ENCRYPT_SHA (DPD_IPSEC_AES_ECB_GROUP + 4)
|
|
#define DPD_IPSEC_AES_ECB_ENCRYPT_SHA256 (DPD_IPSEC_AES_ECB_GROUP + 5)
|
|
#define DPD_IPSEC_AES_ECB_DECRYPT_MD5_APAD (DPD_IPSEC_AES_ECB_GROUP + 6)
|
|
#define DPD_IPSEC_AES_ECB_DECRYPT_SHA_APAD (DPD_IPSEC_AES_ECB_GROUP + 7)
|
|
#define DPD_IPSEC_AES_ECB_DECRYPT_SHA256_APAD (DPD_IPSEC_AES_ECB_GROUP + 8)
|
|
#define DPD_IPSEC_AES_ECB_DECRYPT_MD5 (DPD_IPSEC_AES_ECB_GROUP + 9)
|
|
#define DPD_IPSEC_AES_ECB_DECRYPT_SHA (DPD_IPSEC_AES_ECB_GROUP + 10)
|
|
#define DPD_IPSEC_AES_ECB_DECRYPT_SHA256 (DPD_IPSEC_AES_ECB_GROUP + 11)
|
|
|
|
|
|
|
|
|
|
/*
|
|
* IPSEC_ESP_REQ - IPSec Encapsulated system payload compound operations
|
|
*
|
|
*/
|
|
|
|
typedef struct
|
|
{
|
|
COMMON_REQ_PREAMBLE
|
|
unsigned long hashKeyBytes;
|
|
unsigned char *hashKeyData;
|
|
unsigned long cryptKeyBytes;
|
|
unsigned char *cryptKeyData;
|
|
unsigned long cryptCtxInBytes;
|
|
unsigned char *cryptCtxInData;
|
|
unsigned long hashInDataBytes;
|
|
unsigned char *hashInData;
|
|
unsigned long inDataBytes;
|
|
unsigned char *inData;
|
|
unsigned char *cryptDataOut;
|
|
unsigned long hashDataOutBytes; /* out ICV is always at the end of cryptDataOut */
|
|
unsigned long cryptCtxOutBytes;
|
|
unsigned char *cryptCtxOutData;
|
|
} IPSEC_ESP_REQ;
|
|
|
|
#define NUM_IPSEC_ESP_DESC (24)
|
|
#define DPD_IPSEC_ESP_GROUP (0x7500)
|
|
|
|
#define DPD_IPSEC_ESP_OUT_SDES_ECB_CRPT_MD5_PAD (DPD_IPSEC_ESP_GROUP + 0)
|
|
#define DPD_IPSEC_ESP_OUT_SDES_ECB_CRPT_SHA_PAD (DPD_IPSEC_ESP_GROUP + 1)
|
|
#define DPD_IPSEC_ESP_OUT_SDES_ECB_CRPT_SHA256_PAD (DPD_IPSEC_ESP_GROUP + 2)
|
|
#define DPD_IPSEC_ESP_IN_SDES_ECB_DCRPT_MD5_PAD (DPD_IPSEC_ESP_GROUP + 3)
|
|
#define DPD_IPSEC_ESP_IN_SDES_ECB_DCRPT_SHA_PAD (DPD_IPSEC_ESP_GROUP + 4)
|
|
#define DPD_IPSEC_ESP_IN_SDES_ECB_DCRPT_SHA256_PAD (DPD_IPSEC_ESP_GROUP + 5)
|
|
#define DPD_IPSEC_ESP_OUT_SDES_CBC_CRPT_MD5_PAD (DPD_IPSEC_ESP_GROUP + 6)
|
|
#define DPD_IPSEC_ESP_OUT_SDES_CBC_CRPT_SHA_PAD (DPD_IPSEC_ESP_GROUP + 7)
|
|
#define DPD_IPSEC_ESP_OUT_SDES_CBC_CRPT_SHA256_PAD (DPD_IPSEC_ESP_GROUP + 8)
|
|
#define DPD_IPSEC_ESP_IN_SDES_CBC_DCRPT_MD5_PAD (DPD_IPSEC_ESP_GROUP + 9)
|
|
#define DPD_IPSEC_ESP_IN_SDES_CBC_DCRPT_SHA_PAD (DPD_IPSEC_ESP_GROUP + 10)
|
|
#define DPD_IPSEC_ESP_IN_SDES_CBC_DCRPT_SHA256_PAD (DPD_IPSEC_ESP_GROUP + 11)
|
|
#define DPD_IPSEC_ESP_OUT_TDES_CBC_CRPT_MD5_PAD (DPD_IPSEC_ESP_GROUP + 12)
|
|
#define DPD_IPSEC_ESP_OUT_TDES_CBC_CRPT_SHA_PAD (DPD_IPSEC_ESP_GROUP + 13)
|
|
#define DPD_IPSEC_ESP_OUT_TDES_CBC_CRPT_SHA256_PAD (DPD_IPSEC_ESP_GROUP + 14)
|
|
#define DPD_IPSEC_ESP_IN_TDES_CBC_DCRPT_MD5_PAD (DPD_IPSEC_ESP_GROUP + 15)
|
|
#define DPD_IPSEC_ESP_IN_TDES_CBC_DCRPT_SHA_PAD (DPD_IPSEC_ESP_GROUP + 16)
|
|
#define DPD_IPSEC_ESP_IN_TDES_CBC_DCRPT_SHA256_PAD (DPD_IPSEC_ESP_GROUP + 17)
|
|
#define DPD_IPSEC_ESP_OUT_TDES_ECB_CRPT_MD5_PAD (DPD_IPSEC_ESP_GROUP + 18)
|
|
#define DPD_IPSEC_ESP_OUT_TDES_ECB_CRPT_SHA_PAD (DPD_IPSEC_ESP_GROUP + 19)
|
|
#define DPD_IPSEC_ESP_OUT_TDES_ECB_CRPT_SHA256_PAD (DPD_IPSEC_ESP_GROUP + 20)
|
|
#define DPD_IPSEC_ESP_IN_TDES_ECB_DCRPT_MD5_PAD (DPD_IPSEC_ESP_GROUP + 21)
|
|
#define DPD_IPSEC_ESP_IN_TDES_ECB_DCRPT_SHA_PAD (DPD_IPSEC_ESP_GROUP + 22)
|
|
#define DPD_IPSEC_ESP_IN_TDES_ECB_DCRPT_SHA256_PAD (DPD_IPSEC_ESP_GROUP + 23)
|
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
* CCMP_REQ 802.11 counter mode with CBC MAC protocol operation
|
|
*
|
|
*/
|
|
|
|
typedef struct
|
|
{
|
|
COMMON_REQ_PREAMBLE
|
|
unsigned long keyBytes;
|
|
unsigned char *keyData;
|
|
unsigned long ctxBytes;
|
|
unsigned char *context;
|
|
unsigned long FrameDataBytes;
|
|
unsigned char *FrameData;
|
|
unsigned long AADBytes;
|
|
unsigned char *AADData;
|
|
unsigned long cryptDataBytes;
|
|
unsigned char *cryptDataOut;
|
|
unsigned long MICBytes;
|
|
unsigned char *MICData;
|
|
} CCMP_REQ;
|
|
|
|
#define NUM_CCMP_DESC (2)
|
|
#define DPD_CCMP_GROUP (0x6500)
|
|
|
|
#define DPD_802_11_CCMP_OUTBOUND (DPD_CCMP_GROUP + 0)
|
|
#define DPD_802_11_CCMP_INBOUND (DPD_CCMP_GROUP + 1)
|
|
|
|
|
|
#if 0
|
|
/*
|
|
* SRTP_REQ - secure RTP compound operations
|
|
*
|
|
*/
|
|
|
|
typedef struct
|
|
{
|
|
COMMON_REQ_PREAMBLE
|
|
unsigned long hashKeyBytes;
|
|
unsigned char *hashKeyData;
|
|
unsigned long keyBytes;
|
|
unsigned char *keyData;
|
|
unsigned long ivBytes;
|
|
unsigned char *ivData;
|
|
unsigned long HeaderBytes;
|
|
unsigned long inBytes;
|
|
unsigned char *inData;
|
|
unsigned long ROCBytes;
|
|
unsigned long cryptDataBytes;
|
|
unsigned char *cryptDataOut;
|
|
unsigned long digestBytes;
|
|
unsigned char *digestData;
|
|
unsigned long outIvBytes;
|
|
unsigned char *outIvData;
|
|
} SRTP_REQ;
|
|
|
|
#define NUM_SRTP_DESC (2)
|
|
#define DPD_SRTP_GROUP (0x8500)
|
|
|
|
#define DPD_SRTP_OUTBOUND (DPD_SRTP_GROUP + 0)
|
|
#define DPD_SRTP_INBOUND (DPD_SRTP_GROUP + 1)
|
|
#endif /* #IF 0 */
|
|
|
|
|
|
|
|
#if 0
|
|
/*
|
|
* TLS request types
|
|
*
|
|
* Note that this differs from many similar types of requests
|
|
* on account that there are significant differences is the needed
|
|
* format for a DPD for each of the different types of TLS packets
|
|
*
|
|
* Since DPD's are built according to a translation table that's
|
|
* determined on a group basis (not on individual requests), and
|
|
* since the DPDs have to be constructed differently for each type
|
|
* of TLS packet/payload, there are individual request structs for
|
|
* each
|
|
*/
|
|
|
|
/*
|
|
* TLS_BLOCK_INBOUND_REQ - SSL/TLS block cipher inbound operation
|
|
* This is a 2.1 request type only
|
|
*/
|
|
|
|
typedef struct
|
|
{
|
|
COMMON_REQ_PREAMBLE
|
|
unsigned long hashKeyBytes;
|
|
unsigned char* hashKeyData;
|
|
unsigned long hashOnlyBytes;
|
|
unsigned char* hashOnlyData;
|
|
unsigned long ivBytes;
|
|
unsigned char* ivData;
|
|
unsigned long cipherKeyBytes;
|
|
unsigned char* cipherKeyData;
|
|
unsigned long inBytes;
|
|
unsigned char* inData;
|
|
unsigned long MACcmpBytes;
|
|
unsigned long outBytes;
|
|
unsigned char* outData;
|
|
unsigned long MACoutBytes;
|
|
unsigned long ivOutBytes;
|
|
unsigned char* ivOutData;
|
|
|
|
} TLS_BLOCK_INBOUND_REQ;
|
|
|
|
#define NUM_TLS_BLOCK_INBOUND_DESC (1)
|
|
#define DPD_TLS_BLOCK_INBOUND_GROUP (0x9000)
|
|
|
|
#define DPD_TLS_BLOCK_INBOUND (DPD_TLS_BLOCK_INBOUND_GROUP)
|
|
|
|
|
|
|
|
/*
|
|
* TLS_BLOCK_OUTBOUND_REQ - SSL/TLS block cipher outbound operation
|
|
* This is a 2.1 request type only
|
|
*/
|
|
|
|
typedef struct
|
|
{
|
|
COMMON_REQ_PREAMBLE
|
|
unsigned long hashKeyBytes;
|
|
unsigned char* hashKeyData;
|
|
unsigned long ivBytes;
|
|
unsigned char* ivData;
|
|
unsigned long cipherKeyBytes;
|
|
unsigned char* cipherKeyData;
|
|
unsigned long hashOnlyBytes;
|
|
unsigned char* hashOnlyData;
|
|
unsigned long mainDataBytes;
|
|
unsigned long outBytes;
|
|
unsigned char* outData;
|
|
unsigned long MACbytes;
|
|
unsigned long cipherOnlyBytes;
|
|
unsigned char* cipherOnlyData;
|
|
unsigned long ivOutBytes;
|
|
unsigned char* ivOutData;
|
|
|
|
} TLS_BLOCK_OUTBOUND_REQ;
|
|
|
|
#define NUM_TLS_BLOCK_OUTBOUND_DESC (1)
|
|
#define DPD_TLS_BLOCK_OUTBOUND_GROUP (0x9100)
|
|
#define DPD_TLS_BLOCK_OUTBOUND (DPD_TLS_BLOCK_OUTBOUND_GROUP)
|
|
|
|
|
|
/*
|
|
* TLS_STREAM_INBOUND_REQ - SSL/TLS stream cipher inbound operation
|
|
* This is a 2.1 request type only
|
|
*/
|
|
|
|
typedef struct
|
|
{
|
|
COMMON_REQ_PREAMBLE
|
|
unsigned long hashKeyBytes;
|
|
unsigned char* hashKeyData;
|
|
unsigned long hashOnlyBytes;
|
|
unsigned char* hashOnlyData;
|
|
unsigned long ivBytes;
|
|
unsigned char* ivData;
|
|
unsigned long cipherKeyBytes;
|
|
unsigned char* cipherKeyData;
|
|
unsigned long inBytes;
|
|
unsigned char* inData;
|
|
unsigned long MACcmpBytes;
|
|
unsigned long outBytes;
|
|
unsigned char* outData;
|
|
unsigned long MACoutBytes;
|
|
unsigned long ivOutBytes;
|
|
unsigned char* ivOutData;
|
|
|
|
} TLS_STREAM_INBOUND_REQ;
|
|
|
|
#define NUM_TLS_STREAM_INBOUND_DESC (1)
|
|
#define DPD_TLS_STREAM_INBOUND_GROUP (0x9200)
|
|
|
|
#define DPD_TLS_STREAM_INBOUND (DPD_TLS_STREAM_INBOUND_GROUP)
|
|
|
|
|
|
|
|
|
|
/*
|
|
* TLS_STREAM_OUTBOUND_REQ - SSL/TLS stream cipher outbound operation
|
|
* This is a 2.1 request type only
|
|
*/
|
|
|
|
typedef struct
|
|
{
|
|
COMMON_REQ_PREAMBLE
|
|
unsigned long hashKeyBytes;
|
|
unsigned char* hashKeyData;
|
|
unsigned long ivBytes;
|
|
unsigned char* ivData;
|
|
unsigned long cipherKeyBytes;
|
|
unsigned char* cipherKeyData;
|
|
unsigned long hashOnlyBytes;
|
|
unsigned char* hashOnlyData;
|
|
unsigned long mainDataBytes;
|
|
unsigned long outBytes;
|
|
unsigned char* outData;
|
|
unsigned long MACbytes;
|
|
unsigned long ivOutBytes;
|
|
unsigned char* ivOutData;
|
|
|
|
} TLS_STREAM_OUTBOUND_REQ;
|
|
|
|
#define NUM_TLS_STREAM_OUTBOUND_DESC (1)
|
|
#define DPD_TLS_STREAM_OUTBOUND_GROUP (0x9300)
|
|
|
|
#define DPD_TLS_STREAM_OUTBOUND (DPD_TLS_STREAM_OUTBOUND_GROUP)
|
|
#endif /* #IF 0 */
|
|
|
|
#define NUM_CUSTOM_DESC (4)
|
|
#define DPD_CUSTOM_GROUP (0xF000)
|
|
#define DPD_CHKSUM_CRC (DPD_CUSTOM_GROUP + 0)
|
|
#define DPD_DMA (DPD_CUSTOM_GROUP + 1)
|
|
#define DPD_AESCCM_ENCRYPT (DPD_CUSTOM_GROUP + 2)
|
|
#define DPD_AESCCM_DECRYPT (DPD_CUSTOM_GROUP + 3)
|
|
|
|
typedef struct
|
|
{
|
|
COMMON_REQ_PREAMBLE
|
|
unsigned long inDataBytes;
|
|
unsigned char* inData;
|
|
unsigned long inCtxDataBytes;
|
|
unsigned char* inCtxData;
|
|
unsigned short crcOutBytes;
|
|
unsigned char* crcOut;
|
|
unsigned char* polynomialData;
|
|
unsigned long crcOptions;
|
|
} CHKSUM_CRC_REQ ;
|
|
|
|
typedef struct
|
|
{
|
|
COMMON_REQ_PREAMBLE
|
|
unsigned long keyBytes;
|
|
unsigned char *keyData;
|
|
unsigned long ctxBytes;
|
|
unsigned char *ctx;
|
|
unsigned long inDataBytes;
|
|
unsigned char *inData;
|
|
unsigned long AADBytes;
|
|
unsigned char *AADData;
|
|
unsigned long outDataBytes;
|
|
unsigned char *outData;
|
|
unsigned long MICBytes;
|
|
unsigned char *inMICData;
|
|
unsigned char *outMICData;
|
|
unsigned long options;
|
|
} AESCCM_REQ;
|
|
|
|
typedef struct
|
|
{
|
|
COMMON_REQ_PREAMBLE
|
|
unsigned long inDataBytes;
|
|
unsigned char* inData;
|
|
unsigned char* outData;
|
|
unsigned long options;
|
|
} DMA_REQ ;
|
|
|
|
#define NUM_SEC4_INTERNAL_DESC (1)
|
|
#define DPD_SEC4_INTERNAL_GROUP (0xE000)
|
|
#define DPD_SEC4_INTERNAL_CMN (DPD_SEC4_INTERNAL_GROUP + 0)
|
|
|
|
#ifdef _cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif /* SEC4_H */
|