You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
183 lines
6.1 KiB
183 lines
6.1 KiB
|
|
#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 int |
|
icaOpenAdapter(unsigned int adapterId, ICA_ADAPTER_HANDLE * pAdapterHandle); |
|
|
|
unsigned int icaCloseAdapter(ICA_ADAPTER_HANDLE adapterHandle); |
|
|
|
unsigned int |
|
icaRsaModExpo(ICA_ADAPTER_HANDLE hAdapterHandle, |
|
unsigned int inputDataLength, |
|
unsigned char *pInputData, |
|
ICA_KEY_RSA_MODEXPO *pKeyModExpo, |
|
unsigned int *pOutputDataLength, unsigned char *pOutputData); |
|
|
|
unsigned int |
|
icaRsaCrt(ICA_ADAPTER_HANDLE hAdapterHandle, |
|
unsigned int inputDataLength, |
|
unsigned char *pInputData, |
|
ICA_KEY_RSA_CRT *pKeyCrt, |
|
unsigned int *pOutputDataLength, unsigned char *pOutputData); |
|
|
|
unsigned int |
|
icaRandomNumberGenerate(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"; |
|
# else |
|
static 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__ */
|
|
|