📄 ica_openssl_api.h
字号:
#ifndef __ICA_OPENSSL_API_H__#define __ICA_OPENSSL_API_H__/** ** abstract data types for API **/#define ICA_ADAPTER_HANDLE int#if defined(linux) || defined (_AIX)#define ICA_CALL #endif#if defined(WIN32) || defined(_WIN32)#define ICA_CALL __stdcall#endif/*------------------------------------------------* | RSA defines and typedefs | *------------------------------------------------*/ /* * All data elements of the RSA key are in big-endian format * Modulus-Exponent form of key * */ #define MAX_EXP_SIZE 256 #define MAX_MODULUS_SIZE 256 #define MAX_MODEXP_SIZE (MAX_EXP_SIZE + MAX_MODULUS_SIZE) #define MAX_OPERAND_SIZE MAX_EXP_SIZE typedef unsigned char ICA_KEY_RSA_MODEXPO_REC[MAX_MODEXP_SIZE]; /* * All data elements of the RSA key are in big-endian format * Chinese Remainder Thereom(CRT) form of key * Used only for Decrypt, the encrypt form is typically Modulus-Exponent * */ #define MAX_BP_SIZE 136 #define MAX_BQ_SIZE 128 #define MAX_NP_SIZE 136 #define MAX_NQ_SIZE 128 #define MAX_QINV_SIZE 136 #define MAX_RSACRT_SIZE (MAX_BP_SIZE+MAX_BQ_SIZE+MAX_NP_SIZE+MAX_NQ_SIZE+MAX_QINV_SIZE)#define RSA_GEN_OPERAND_MAX 256 /* bytes */typedef unsigned char ICA_KEY_RSA_CRT_REC[MAX_RSACRT_SIZE];/*------------------------------------------------* | RSA key token types | *------------------------------------------------*/#define RSA_PUBLIC_MODULUS_EXPONENT 3#define RSA_PKCS_PRIVATE_CHINESE_REMAINDER 6#define KEYTYPE_MODEXPO 1#define KEYTYPE_PKCSCRT 2/*------------------------------------------------* | RSA Key Token format | *------------------------------------------------*//* * NOTE: All the fields in the ICA_KEY_RSA_MODEXPO structure * (lengths, offsets, exponents, modulus, etc.) are * stored in big-endian format */typedef struct _ICA_KEY_RSA_MODEXPO{ unsigned int keyType; /* RSA key type. */ unsigned int keyLength; /* Total length of the token. */ unsigned int modulusBitLength; /* Modulus n bit length. */ /* -- Start of the data length.*/ unsigned int nLength; /* Modulus n = p * q */ unsigned int expLength; /* exponent (public or private)*/ /* e = 1/d * mod(p-1)(q-1) */ /* -- Start of the data offsets*/ unsigned int nOffset; /* Modulus n . */ unsigned int expOffset; /* exponent (public or private)*/ unsigned char reserved[112]; /* reserved area */ /* -- Start of the variable -- */ /* -- length token data. -- */ ICA_KEY_RSA_MODEXPO_REC keyRecord;} ICA_KEY_RSA_MODEXPO;#define SZ_HEADER_MODEXPO (sizeof(ICA_KEY_RSA_MODEXPO) - sizeof(ICA_KEY_RSA_MODEXPO_REC))/* * NOTE: All the fields in the ICA_KEY_RSA_CRT structure * (lengths, offsets, exponents, modulus, etc.) are * stored in big-endian format */typedef struct _ICA_KEY_RSA_CRT{ unsigned int keyType; /* RSA key type. */ unsigned int keyLength; /* Total length of the token. */ unsigned int modulusBitLength; /* Modulus n bit length. */ /* -- Start of the data length.*/#if _AIX unsigned int nLength; /* Modulus n = p * q */#endif unsigned int pLength; /* Prime number p . */ unsigned int qLength; /* Prime number q . */ unsigned int dpLength; /* dp = d * mod(p-1) . */ unsigned int dqLength; /* dq = d * mod(q-1) . */ unsigned int qInvLength; /* PKCS: qInv = Ap/q */ /* -- Start of the data offsets*/#if _AIX unsigned int nOffset; /* Modulus n . */#endif unsigned int pOffset; /* Prime number p . */ unsigned int qOffset; /* Prime number q . */ unsigned int dpOffset; /* dp . */ unsigned int dqOffset; /* dq . */ unsigned int qInvOffset; /* qInv for PKCS */#if _AIX unsigned char reserved[80]; /* reserved area */#else unsigned char reserved[88]; /* reserved area */#endif /* -- Start of the variable -- */ /* -- length token data. -- */ ICA_KEY_RSA_CRT_REC keyRecord;} ICA_KEY_RSA_CRT;#define SZ_HEADER_CRT (sizeof(ICA_KEY_RSA_CRT) - sizeof(ICA_KEY_RSA_CRT_REC))unsigned inticaOpenAdapter( unsigned int adapterId, ICA_ADAPTER_HANDLE *pAdapterHandle );unsigned inticaCloseAdapter( ICA_ADAPTER_HANDLE adapterHandle );unsigned inticaRsaModExpo( ICA_ADAPTER_HANDLE hAdapterHandle, unsigned int inputDataLength, unsigned char *pInputData, ICA_KEY_RSA_MODEXPO *pKeyModExpo, unsigned int *pOutputDataLength, unsigned char *pOutputData );unsigned inticaRsaCrt( ICA_ADAPTER_HANDLE hAdapterHandle, unsigned int inputDataLength, unsigned char *pInputData, ICA_KEY_RSA_CRT *pKeyCrt, unsigned int *pOutputDataLength, unsigned char *pOutputData );unsigned inticaRandomNumberGenerate( ICA_ADAPTER_HANDLE hAdapterHandle, unsigned int outputDataLength, unsigned char *pOutputData );/* Specific macros and definitions to not have IFDEF;s all over the main code */#if (_AIX)static const char *IBMCA_LIBNAME = "/lib/libica.a(shr.o)";#elif (WIN32)static const char *IBMCA_LIBNAME = "cryptica";#elsestatic const char *IBMCA_LIBNAME = "ica";#endif#if (WIN32)/* The ICA_KEY_RSA_MODEXPO & ICA_KEY_RSA_CRT lengths and offsets must be in big-endian format.*/#define CORRECT_ENDIANNESS(b) ( \ (((unsigned long) (b) & 0x000000ff) << 24) | \ (((unsigned long) (b) & 0x0000ff00) << 8) | \ (((unsigned long) (b) & 0x00ff0000) >> 8) | \ (((unsigned long) (b) & 0xff000000) >> 24) \ )#define CRT_KEY_TYPE RSA_PKCS_PRIVATE_CHINESE_REMAINDER#define ME_KEY_TYPE RSA_PUBLIC_MODULUS_EXPONENT#else#define CORRECT_ENDIANNESS(b) (b)#define CRT_KEY_TYPE KEYTYPE_PKCSCRT#define ME_KEY_TYPE KEYTYPE_MODEXPO#endif#endif /* __ICA_OPENSSL_API_H__ */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -