285 lines
11 KiB
C
Raw Normal View History

2024-12-07 17:00:42 +08:00
/////////////////////////////////////////////////////////
//
// Filename: EXPDAT.H
//
// Descripition: Specifies the Export types.
//
// Used for checksum and data processing during the data-export.
// This is the interface header-file between EXPDATPROC.DLL and the Hex-View Program.
//
// 2015-01-03 V03.00.00 Interface version incremented because functions to allocate memory
// from host have been introduced in ExportDataInfo.
// Change valid since expodatproc.dll V2.00.
//
// 2018-01-30 V5.00.00 Supporting streaming API for several operations.
#ifndef __EXPDAT_H__
#define __EXPDAT_H__
#ifdef _WIN32
#include <Windows.h>
#endif
/* Re-defined in v_def.h and AUTOSAR types */
# ifndef BYTE
# define BYTE unsigned char
# endif
# ifndef WORD
# define WORD unsigned short
# endif
# ifndef DWORD
# define DWORD unsigned long
# endif
# ifndef __cplusplus
# define bool boolean
# define true TRUE
# define false FALSE
# endif
// Used in csum an datproc
#define ExpDat_AllocWorkspace(size) malloc(size)
#define ExpDat_FreeWorkspace(p) if (*p!=NULL) { \
free(*(p)); \
} \
*p=NULL
/* Give FORMAT parameter in the expdat proc a meaning */
#define EXPDAT_FORMAT_GENERAL_PARAM_BINARY 0x27u
/* Define the update mode for data processing and signature verification. */
/* The mode bits must be set in the DoDataOperation flag byte */
#define DODATA_START 0x01 // Flag is set when starting the update of a data block.
#define DODATA_UPDATE 0x02 // Flag is set when more data to be processed (start operation flag was already given).
#define DODATA_FINISH 0x04 // Flag is set when the operation will be concluded.
#define DODATA_START_UPDATE (DODATA_START|DODATA_UPDATE)
#define DODATA_START_UPDATE_FINISH (DODATA_START|DODATA_UPDATE|DODATA_FINISH)
#define DODATA_UPDATE_FINISH (DODATA_UPDATE|DODATA_FINISH)
// Export type (unused).
typedef enum EExportType
{
ExportTypeSRecord
,ExportTypeIntelHex
,ExportTypeFiatBinary
} EExportType;
enum EInterfaceVersion {
DllInterfaceVersion=0005
,DllInterfaceVersion_0004=0004
,DllInterfaceVersion_0003=0003 // Used for compatibility checks.
,DllVersionIllegal=-1
};
// Streaming operation.
typedef enum EChecksumAction
{
CSumActionBegin,
CSumActionDoData,
CSumActionEnd
} EChecksumAction;
// Error codes.
typedef enum EExportStatus
{
ExportStateIdle=0
,ExportStateDllInterfaceVersionError
,ExportStateChecksumCalculationError
,ExportStateNoConstDataResults
,ExportStateDataCompressionCalculationError
,ExportStateDataEncryptionError
,ExportStateChecksumAddressMisalignedError
,ExportStateChecksumLengthMisalignedError
,ExportStateUnknownActionItemOrActionType
,ExportStateParamterMissingForDataProcessing
,ExportStateKeyGeneralError
,ExportStateKeyDuplicateParamter
,ExportStateKeyParameterMissing
,ExportStateKeyIsHMAC
,ExportStateKeyIsRSA
,ExportStateWrongBytesPerBlockType
,ExportStateWrongAESBlockSize
,ExportStateWrongAESParameterExtension
,ExportStateGeneralRSAError
,ExportStateRSAInvalidLength
,ExportStateSignatureVerificationFailed
,ExportStatePublicKeyInvalid
,ExportStateSignatureInvalidSize
,ExportStateDynamicLengthOperationNotPossible
} EExportStatus;
/* Declare user interface functions as DLL */
#ifdef _USRDLL
#define DLL_FUNC(retval) retval __declspec(dllexport) __cdecl
#else
/* Normal C-Interfaces */
#define DLL_FUNC(retval) retval
#endif
// Used to identify the name of the DLL in function 'LoadLibrary'.
#define EXPDAT_DLL_NAME "EXPDATPROC.DLL"
#define EXPDAT_RESULTS_MAXSIZE 1024
// Functions used to allocate and deallocate host memory.
// Used when segOutData array need to be extended or changed.
typedef void * (*TAllocHostMemory)(int size);
typedef void (*TFreeHostMemory)(void *ptr);
typedef struct TExportDataInfo
{
enum EInterfaceVersion DllInterfaceVersion;
// Input-section:
// =============
// Segment data information
EExportType exType; // Provides information of export type (see above).
int index; // Selected service index.
BYTE format; // format byte (taken from the dialog).
char *generalParam; // General purpose string (will be taken from the dialogs).
DWORD segInAddress; // These information are not valid during Init and Deinit.
DWORD segInLength;
char *segInData;
// Output section:
// ==============
// Segment data information
DWORD segOutAddress; // On call to Checksum and process data, outXxx
DWORD segOutLength; // and InXxx are identically. OutXxx will be
char *segOutData; // taken for output data from ProcessData.
EExportStatus exState; // Call function can provide more detailed
// status information here.
DWORD maxSegLen; // max.number of bytes allowed for segInLength.
void *voidPtr; // used for future general purpose pointer (e.g. context data).
BYTE expDatResults[EXPDAT_RESULTS_MAXSIZE];
WORD expDatResultSize;
TAllocHostMemory HostAllocMemory; // DLL calls this function to re-allocate host memory.
TFreeHostMemory HostFreeMemory; // or release it.
BYTE doDataOperation; // This flag field indicates the mode of operation for data processing (START|UPDATE|FINISH).
DWORD segInTotalLength; // Provides the total segment length of a buffer.
LPCSTR segInPath; // This is the path of the to a file in case the data are located in a file.
LPCSTR segOutPath; // The target file where the data will be located to.
DWORD reserved[8]; // Space in the struct for future and backward compatible operation.
} TExportDataInfo;
// Interface function names.
#define EXPNAME_CSUMFCTCOUNT "GetChecksumFunctionCount"
#define EXPNAME_CSUMFCTNAME "GetChecksumFunctionName"
#define EXPNAME_INITCSUM "InitChecksum"
#define EXPNAME_DEINITCSUM "DeinitChecksum"
#define EXPNAME_DOCSUM "DoCalculateChecksum"
#define EXPNAME_CSUMRESULTSIZE "GetChecksumSizeOfResult"
#define EXPNAME_STATEINFO "GetExportStateInfo"
#define EXPNAME_DPROCFCTCOUNT "GetDataProcessingFunctionCount"
#define EXPNAME_DPROCFCTNAME "GetDataProcessingFunctionName"
#define EXPNAME_INITDPROC "InitDataProcessing"
#define EXPNAME_DEINITDPROC "DeinitDataProcessing"
#define EXPNAME_DODPROC "DoDataProcessing"
#define EXPNAME_SIGNVERFCTCOUNT "GetSignVerifyFunctionCount"
#define EXPNAME_SIGNVERFCTNAME "GetSignVerifyFunctionName"
#define EXPNAME_INITSIGNVER "InitSignVerify"
#define EXPNAME_DEINITSIGNVER "DeinitSignVerify"
#define EXPNAME_DOSIGNVER "DoSignVerify"
#ifdef STATIC_EXPDATPROC_DLL
extern "C" int __declspec(dllimport) __cdecl GetChecksumFunctionCount(void);
extern "C" bool __declspec(dllimport) __cdecl GetChecksumFunctionName(int index, char * name, int size);
extern "C" int __declspec(dllimport) __cdecl GetChecksumSizeOfResult(int index);
extern "C" bool __declspec(dllimport) __cdecl InitChecksum( TExportDataInfo *info ) ;
extern "C" bool __declspec(dllimport) __cdecl DeinitChecksum( TExportDataInfo *info ) ;
extern "C" bool __declspec(dllimport) __cdecl DoCalculateChecksum(TExportDataInfo *info,
EChecksumAction actionState);
extern "C" void __declspec(dllimport) __cdecl GetExportStateInfo(char **infoText, enum EExportStatus actionState ) ;
extern "C" int __declspec(dllimport) __cdecl GetDataProcessingFunctionCount(void);
extern "C" bool __declspec(dllimport) __cdecl GetDataProcessingFunctionName(int index, char * name, int size);
extern "C" bool __declspec(dllimport) __cdecl InitDataProcessing( TExportDataInfo *info ) ;
extern "C" bool __declspec(dllimport) __cdecl DeinitDataProcessing(TExportDataInfo *info ) ;
extern "C" bool __declspec(dllimport) __cdecl DoDataProcessing( TExportDataInfo *info ) ;
extern "C" int __declspec(dllimport) __cdecl GetSignVerifyFunctionCount(void);
extern "C" bool __declspec(dllimport) __cdecl GetSignVerifyFunctionName(int index, char * name, int size);
extern "C" bool __declspec(dllimport) __cdecl InitSignVerify( TExportDataInfo *info ) ;
extern "C" bool __declspec(dllimport) __cdecl DeinitSignVerify(TExportDataInfo *info ) ;
extern "C" bool __declspec(dllimport) __cdecl DoSignVerify( TExportDataInfo *info ) ;
#endif
#if defined(_USRDLL) || defined (PROGRAM_HEXVIEW)
typedef int (* TGetChecksumFunctionCount)(void);
typedef bool (* TGetChecksumFunctionName)(int index, char * name, int maxNamelen);
typedef bool (* TInitChecksum)( TExportDataInfo *info );
typedef bool (* TDeinitChecksum)( TExportDataInfo *info );
typedef bool (* TDoCalculateChecksum)( TExportDataInfo *info, EChecksumAction actionState );
typedef int (* TGetChecksumSizeOfResult)( int index );
typedef void (* TGetExportStateInfo) ( char **infoText, enum EExportStatus actionState );
typedef int (* TGetDataProcessingFunctionCount)(void);
typedef bool (* TGetDataProcessingFunctionName)(int index, char * name, int maxNamelen);
typedef bool (* TInitDataProcessing)( TExportDataInfo *info);
typedef bool (* TDeinitDataProcessing)( TExportDataInfo *info);
typedef bool (* TDoDataProcessing)( TExportDataInfo *info);
typedef int (* TGetSignVerifyFunctionCount)(void);
typedef bool (* TGetSignVerifyFunctionName)(int index, char * name, int maxNamelen);
typedef bool (* TInitSignVerify)( TExportDataInfo *info);
typedef bool (* TDeinitSignVerify)( TExportDataInfo *info);
typedef bool (* TDoSignVerify)( TExportDataInfo *info);
#else
#ifdef __cplusplus
extern "C" {
#endif
int GetChecksumFunctionCount(void);
bool GetChecksumFunctionName(int index, char * name, int maxNamelen);
bool InitChecksum( TExportDataInfo *info );
bool DeinitChecksum( TExportDataInfo *info );
bool DoCalculateChecksum( TExportDataInfo *info, EChecksumAction actionState );
int GetChecksumSizeOfResult( int index );
void GetExportStateInfo ( char **infoText, enum EExportStatus actionState );
int GetDataProcessingFunctionCount(void);
bool GetDataProcessingFunctionName(int index, char * name, int maxNamelen);
bool InitDataProcessing( TExportDataInfo *info);
bool DeinitDataProcessing( TExportDataInfo *info);
bool DoDataProcessing( TExportDataInfo *info);
int GetSignVerifyFunctionCount(void);
bool GetSignVerifyFunctionName(int index, char * name, int maxNamelen);
bool InitSignVerify( TExportDataInfo *info);
bool DeinitSignVerify( TExportDataInfo *info);
bool DoDataSignVerify( TExportDataInfo *info);
void ExpDat_Init(TExportDataInfo *expdat, int type);
#ifdef __cplusplus
}
#endif
#endif
#endif /* __EXPDAT_H__ */