]> git.ipfire.org Git - thirdparty/openssl.git/blob - demos/engines/ibmca/ica_openssl_api.h
Additional comment changes for reformat of 0.9.8
[thirdparty/openssl.git] / demos / engines / ibmca / ica_openssl_api.h
1
2 #ifndef __ICA_OPENSSL_API_H__
3 #define __ICA_OPENSSL_API_H__
4
5 /**
6 ** abstract data types for API
7 **/
8
9 #define ICA_ADAPTER_HANDLE int
10
11 #if defined(linux) || defined (_AIX)
12 #define ICA_CALL
13 #endif
14
15 #if defined(WIN32) || defined(_WIN32)
16 #define ICA_CALL __stdcall
17 #endif
18
19 /*------------------------------------------------*
20 | RSA defines and typedefs |
21 *------------------------------------------------*/
22 /*
23 * All data elements of the RSA key are in big-endian format
24 * Modulus-Exponent form of key
25 *
26 */
27 #define MAX_EXP_SIZE 256
28 #define MAX_MODULUS_SIZE 256
29 #define MAX_MODEXP_SIZE (MAX_EXP_SIZE + MAX_MODULUS_SIZE)
30
31 #define MAX_OPERAND_SIZE MAX_EXP_SIZE
32
33 typedef unsigned char ICA_KEY_RSA_MODEXPO_REC[MAX_MODEXP_SIZE];
34 /*
35 * All data elements of the RSA key are in big-endian format
36 * Chinese Remainder Thereom(CRT) form of key
37 * Used only for Decrypt, the encrypt form is typically Modulus-Exponent
38 *
39 */
40 #define MAX_BP_SIZE 136
41 #define MAX_BQ_SIZE 128
42 #define MAX_NP_SIZE 136
43 #define MAX_NQ_SIZE 128
44 #define MAX_QINV_SIZE 136
45 #define MAX_RSACRT_SIZE (MAX_BP_SIZE+MAX_BQ_SIZE+MAX_NP_SIZE+MAX_NQ_SIZE+MAX_QINV_SIZE)
46
47 #define RSA_GEN_OPERAND_MAX 256 /* bytes */
48
49 typedef unsigned char ICA_KEY_RSA_CRT_REC[MAX_RSACRT_SIZE];
50 /*------------------------------------------------*
51 | RSA key token types |
52 *------------------------------------------------*/
53
54 #define RSA_PUBLIC_MODULUS_EXPONENT 3
55 #define RSA_PKCS_PRIVATE_CHINESE_REMAINDER 6
56
57 #define KEYTYPE_MODEXPO 1
58 #define KEYTYPE_PKCSCRT 2
59
60
61 /*------------------------------------------------*
62 | RSA Key Token format |
63 *------------------------------------------------*/
64
65 /*-
66 * NOTE: All the fields in the ICA_KEY_RSA_MODEXPO structure
67 * (lengths, offsets, exponents, modulus, etc.) are
68 * stored in big-endian format
69 */
70
71 typedef struct _ICA_KEY_RSA_MODEXPO
72 { unsigned int keyType; /* RSA key type. */
73 unsigned int keyLength; /* Total length of the token. */
74 unsigned int modulusBitLength; /* Modulus n bit length. */
75 /* -- Start of the data length.*/
76 unsigned int nLength; /* Modulus n = p * q */
77 unsigned int expLength; /* exponent (public or private)*/
78 /* e = 1/d * mod(p-1)(q-1) */
79 /* -- Start of the data offsets*/
80 unsigned int nOffset; /* Modulus n . */
81 unsigned int expOffset; /* exponent (public or private)*/
82 unsigned char reserved[112]; /* reserved area */
83 /* -- Start of the variable -- */
84 /* -- length token data. -- */
85 ICA_KEY_RSA_MODEXPO_REC keyRecord;
86 } ICA_KEY_RSA_MODEXPO;
87 #define SZ_HEADER_MODEXPO (sizeof(ICA_KEY_RSA_MODEXPO) - sizeof(ICA_KEY_RSA_MODEXPO_REC))
88
89 /*-
90 * NOTE: All the fields in the ICA_KEY_RSA_CRT structure
91 * (lengths, offsets, exponents, modulus, etc.) are
92 * stored in big-endian format
93 */
94
95 typedef struct _ICA_KEY_RSA_CRT
96 { unsigned int keyType; /* RSA key type. */
97 unsigned int keyLength; /* Total length of the token. */
98 unsigned int modulusBitLength; /* Modulus n bit length. */
99 /* -- Start of the data length.*/
100 #if _AIX
101 unsigned int nLength; /* Modulus n = p * q */
102 #endif
103 unsigned int pLength; /* Prime number p . */
104 unsigned int qLength; /* Prime number q . */
105 unsigned int dpLength; /* dp = d * mod(p-1) . */
106 unsigned int dqLength; /* dq = d * mod(q-1) . */
107 unsigned int qInvLength; /* PKCS: qInv = Ap/q */
108 /* -- Start of the data offsets*/
109 #if _AIX
110 unsigned int nOffset; /* Modulus n . */
111 #endif
112 unsigned int pOffset; /* Prime number p . */
113 unsigned int qOffset; /* Prime number q . */
114 unsigned int dpOffset; /* dp . */
115 unsigned int dqOffset; /* dq . */
116 unsigned int qInvOffset; /* qInv for PKCS */
117 #if _AIX
118 unsigned char reserved[80]; /* reserved area */
119 #else
120 unsigned char reserved[88]; /* reserved area */
121 #endif
122 /* -- Start of the variable -- */
123 /* -- length token data. -- */
124 ICA_KEY_RSA_CRT_REC keyRecord;
125 } ICA_KEY_RSA_CRT;
126 #define SZ_HEADER_CRT (sizeof(ICA_KEY_RSA_CRT) - sizeof(ICA_KEY_RSA_CRT_REC))
127
128 unsigned int
129 icaOpenAdapter( unsigned int adapterId,
130 ICA_ADAPTER_HANDLE *pAdapterHandle );
131
132 unsigned int
133 icaCloseAdapter( ICA_ADAPTER_HANDLE adapterHandle );
134
135 unsigned int
136 icaRsaModExpo( ICA_ADAPTER_HANDLE hAdapterHandle,
137 unsigned int inputDataLength,
138 unsigned char *pInputData,
139 ICA_KEY_RSA_MODEXPO *pKeyModExpo,
140 unsigned int *pOutputDataLength,
141 unsigned char *pOutputData );
142
143 unsigned int
144 icaRsaCrt( ICA_ADAPTER_HANDLE hAdapterHandle,
145 unsigned int inputDataLength,
146 unsigned char *pInputData,
147 ICA_KEY_RSA_CRT *pKeyCrt,
148 unsigned int *pOutputDataLength,
149 unsigned char *pOutputData );
150
151 unsigned int
152 icaRandomNumberGenerate( ICA_ADAPTER_HANDLE hAdapterHandle,
153 unsigned int outputDataLength,
154 unsigned char *pOutputData );
155
156 /* Specific macros and definitions to not have IFDEF;s all over the
157 main code */
158
159 #if (_AIX)
160 static const char *IBMCA_LIBNAME = "/lib/libica.a(shr.o)";
161 #elif (WIN32)
162 static const char *IBMCA_LIBNAME = "cryptica";
163 #else
164 static const char *IBMCA_LIBNAME = "ica";
165 #endif
166
167 #if (WIN32)
168 /*
169 The ICA_KEY_RSA_MODEXPO & ICA_KEY_RSA_CRT lengths and
170 offsets must be in big-endian format.
171
172 */
173 #define CORRECT_ENDIANNESS(b) ( \
174 (((unsigned long) (b) & 0x000000ff) << 24) | \
175 (((unsigned long) (b) & 0x0000ff00) << 8) | \
176 (((unsigned long) (b) & 0x00ff0000) >> 8) | \
177 (((unsigned long) (b) & 0xff000000) >> 24) \
178 )
179 #define CRT_KEY_TYPE RSA_PKCS_PRIVATE_CHINESE_REMAINDER
180 #define ME_KEY_TYPE RSA_PUBLIC_MODULUS_EXPONENT
181 #else
182 #define CORRECT_ENDIANNESS(b) (b)
183 #define CRT_KEY_TYPE KEYTYPE_PKCSCRT
184 #define ME_KEY_TYPE KEYTYPE_MODEXPO
185 #endif
186
187
188
189 #endif /* __ICA_OPENSSL_API_H__ */