"Fossies" - the Fresh Open Source Software Archive

Member "src/PKCS11/pkcs11.h" (10 Oct 2018, 9275 Bytes) of package /windows/misc/VeraCrypt_1.23-Hotfix-2_Source.zip:


As a special service "Fossies" has tried to format the requested source page into HTML format using (guessed) C and C++ source code syntax highlighting (style: standard) with prefixed line numbers and code folding option. Alternatively you can here view or download the uninterpreted source code file. For more information about "pkcs11.h" see the Fossies "Dox" file reference documentation.

    1 /* pkcs11.h include file for PKCS #11. */
    2 /* $Revision: 1.4 $ */
    3 
    4 /* License to copy and use this software is granted provided that it is
    5  * identified as "RSA Security Inc. PKCS #11 Cryptographic Token Interface
    6  * (Cryptoki)" in all material mentioning or referencing this software.
    7 
    8  * License is also granted to make and use derivative works provided that
    9  * such works are identified as "derived from the RSA Security Inc. PKCS #11
   10  * Cryptographic Token Interface (Cryptoki)" in all material mentioning or
   11  * referencing the derived work.
   12 
   13  * RSA Security Inc. makes no representations concerning either the
   14  * merchantability of this software or the suitability of this software for
   15  * any particular purpose. It is provided "as is" without express or implied
   16  * warranty of any kind.
   17  */
   18 
   19 #ifndef _PKCS11_H_
   20 #define _PKCS11_H_ 1
   21 
   22 #ifdef __cplusplus
   23 extern "C" {
   24 #endif
   25 
   26 /* Before including this file (pkcs11.h) (or pkcs11t.h by
   27  * itself), 6 platform-specific macros must be defined.  These
   28  * macros are described below, and typical definitions for them
   29  * are also given.  Be advised that these definitions can depend
   30  * on both the platform and the compiler used (and possibly also
   31  * on whether a Cryptoki library is linked statically or
   32  * dynamically).
   33  *
   34  * In addition to defining these 6 macros, the packing convention
   35  * for Cryptoki structures should be set.  The Cryptoki
   36  * convention on packing is that structures should be 1-byte
   37  * aligned.
   38  *
   39  * If you're using Microsoft Developer Studio 5.0 to produce
   40  * Win32 stuff, this might be done by using the following
   41  * preprocessor directive before including pkcs11.h or pkcs11t.h:
   42  *
   43  * #pragma pack(push, cryptoki, 1)
   44  *
   45  * and using the following preprocessor directive after including
   46  * pkcs11.h or pkcs11t.h:
   47  *
   48  * #pragma pack(pop, cryptoki)
   49  *
   50  * If you're using an earlier version of Microsoft Developer
   51  * Studio to produce Win16 stuff, this might be done by using
   52  * the following preprocessor directive before including
   53  * pkcs11.h or pkcs11t.h:
   54  *
   55  * #pragma pack(1)
   56  *
   57  * In a UNIX environment, you're on your own for this.  You might
   58  * not need to do (or be able to do!) anything.
   59  *
   60  *
   61  * Now for the macros:
   62  *
   63  *
   64  * 1. CK_PTR: The indirection string for making a pointer to an
   65  * object.  It can be used like this:
   66  *
   67  * typedef CK_BYTE CK_PTR CK_BYTE_PTR;
   68  *
   69  * If you're using Microsoft Developer Studio 5.0 to produce
   70  * Win32 stuff, it might be defined by:
   71  *
   72  * #define CK_PTR *
   73  *
   74  * If you're using an earlier version of Microsoft Developer
   75  * Studio to produce Win16 stuff, it might be defined by:
   76  *
   77  * #define CK_PTR far *
   78  *
   79  * In a typical UNIX environment, it might be defined by:
   80  *
   81  * #define CK_PTR *
   82  *
   83  *
   84  * 2. CK_DEFINE_FUNCTION(returnType, name): A macro which makes
   85  * an exportable Cryptoki library function definition out of a
   86  * return type and a function name.  It should be used in the
   87  * following fashion to define the exposed Cryptoki functions in
   88  * a Cryptoki library:
   89  *
   90  * CK_DEFINE_FUNCTION(CK_RV, C_Initialize)(
   91  *   CK_VOID_PTR pReserved
   92  * )
   93  * {
   94  *   ...
   95  * }
   96  *
   97  * If you're using Microsoft Developer Studio 5.0 to define a
   98  * function in a Win32 Cryptoki .dll, it might be defined by:
   99  *
  100  * #define CK_DEFINE_FUNCTION(returnType, name) \
  101  *   returnType __declspec(dllexport) name
  102  *
  103  * If you're using an earlier version of Microsoft Developer
  104  * Studio to define a function in a Win16 Cryptoki .dll, it
  105  * might be defined by:
  106  *
  107  * #define CK_DEFINE_FUNCTION(returnType, name) \
  108  *   returnType __export _far _pascal name
  109  *
  110  * In a UNIX environment, it might be defined by:
  111  *
  112  * #define CK_DEFINE_FUNCTION(returnType, name) \
  113  *   returnType name
  114  *
  115  *
  116  * 3. CK_DECLARE_FUNCTION(returnType, name): A macro which makes
  117  * an importable Cryptoki library function declaration out of a
  118  * return type and a function name.  It should be used in the
  119  * following fashion:
  120  *
  121  * extern CK_DECLARE_FUNCTION(CK_RV, C_Initialize)(
  122  *   CK_VOID_PTR pReserved
  123  * );
  124  *
  125  * If you're using Microsoft Developer Studio 5.0 to declare a
  126  * function in a Win32 Cryptoki .dll, it might be defined by:
  127  *
  128  * #define CK_DECLARE_FUNCTION(returnType, name) \
  129  *   returnType __declspec(dllimport) name
  130  *
  131  * If you're using an earlier version of Microsoft Developer
  132  * Studio to declare a function in a Win16 Cryptoki .dll, it
  133  * might be defined by:
  134  *
  135  * #define CK_DECLARE_FUNCTION(returnType, name) \
  136  *   returnType __export _far _pascal name
  137  *
  138  * In a UNIX environment, it might be defined by:
  139  *
  140  * #define CK_DECLARE_FUNCTION(returnType, name) \
  141  *   returnType name
  142  *
  143  *
  144  * 4. CK_DECLARE_FUNCTION_POINTER(returnType, name): A macro
  145  * which makes a Cryptoki API function pointer declaration or
  146  * function pointer type declaration out of a return type and a
  147  * function name.  It should be used in the following fashion:
  148  *
  149  * // Define funcPtr to be a pointer to a Cryptoki API function
  150  * // taking arguments args and returning CK_RV.
  151  * CK_DECLARE_FUNCTION_POINTER(CK_RV, funcPtr)(args);
  152  *
  153  * or
  154  *
  155  * // Define funcPtrType to be the type of a pointer to a
  156  * // Cryptoki API function taking arguments args and returning
  157  * // CK_RV, and then define funcPtr to be a variable of type
  158  * // funcPtrType.
  159  * typedef CK_DECLARE_FUNCTION_POINTER(CK_RV, funcPtrType)(args);
  160  * funcPtrType funcPtr;
  161  *
  162  * If you're using Microsoft Developer Studio 5.0 to access
  163  * functions in a Win32 Cryptoki .dll, in might be defined by:
  164  *
  165  * #define CK_DECLARE_FUNCTION_POINTER(returnType, name) \
  166  *   returnType __declspec(dllimport) (* name)
  167  *
  168  * If you're using an earlier version of Microsoft Developer
  169  * Studio to access functions in a Win16 Cryptoki .dll, it might
  170  * be defined by:
  171  *
  172  * #define CK_DECLARE_FUNCTION_POINTER(returnType, name) \
  173  *   returnType __export _far _pascal (* name)
  174  *
  175  * In a UNIX environment, it might be defined by:
  176  *
  177  * #define CK_DECLARE_FUNCTION_POINTER(returnType, name) \
  178  *   returnType (* name)
  179  *
  180  *
  181  * 5. CK_CALLBACK_FUNCTION(returnType, name): A macro which makes
  182  * a function pointer type for an application callback out of
  183  * a return type for the callback and a name for the callback.
  184  * It should be used in the following fashion:
  185  *
  186  * CK_CALLBACK_FUNCTION(CK_RV, myCallback)(args);
  187  *
  188  * to declare a function pointer, myCallback, to a callback
  189  * which takes arguments args and returns a CK_RV.  It can also
  190  * be used like this:
  191  *
  192  * typedef CK_CALLBACK_FUNCTION(CK_RV, myCallbackType)(args);
  193  * myCallbackType myCallback;
  194  *
  195  * If you're using Microsoft Developer Studio 5.0 to do Win32
  196  * Cryptoki development, it might be defined by:
  197  *
  198  * #define CK_CALLBACK_FUNCTION(returnType, name) \
  199  *   returnType (* name)
  200  *
  201  * If you're using an earlier version of Microsoft Developer
  202  * Studio to do Win16 development, it might be defined by:
  203  *
  204  * #define CK_CALLBACK_FUNCTION(returnType, name) \
  205  *   returnType _far _pascal (* name)
  206  *
  207  * In a UNIX environment, it might be defined by:
  208  *
  209  * #define CK_CALLBACK_FUNCTION(returnType, name) \
  210  *   returnType (* name)
  211  *
  212  *
  213  * 6. NULL_PTR: This macro is the value of a NULL pointer.
  214  *
  215  * In any ANSI/ISO C environment (and in many others as well),
  216  * this should best be defined by
  217  *
  218  * #ifndef NULL_PTR
  219  * #define NULL_PTR 0
  220  * #endif
  221  */
  222 
  223 
  224 /* All the various Cryptoki types and #define'd values are in the
  225  * file pkcs11t.h. */
  226 #include "pkcs11t.h"
  227 
  228 #define __PASTE(x,y)      x##y
  229 
  230 
  231 /* ==============================================================
  232  * Define the "extern" form of all the entry points.
  233  * ==============================================================
  234  */
  235 
  236 #define CK_NEED_ARG_LIST  1
  237 #define CK_PKCS11_FUNCTION_INFO(name) \
  238   extern CK_DECLARE_FUNCTION(CK_RV, name)
  239 
  240 /* pkcs11f.h has all the information about the Cryptoki
  241  * function prototypes. */
  242 #include "pkcs11f.h"
  243 
  244 #undef CK_NEED_ARG_LIST
  245 #undef CK_PKCS11_FUNCTION_INFO
  246 
  247 
  248 /* ==============================================================
  249  * Define the typedef form of all the entry points.  That is, for
  250  * each Cryptoki function C_XXX, define a type CK_C_XXX which is
  251  * a pointer to that kind of function.
  252  * ==============================================================
  253  */
  254 
  255 #define CK_NEED_ARG_LIST  1
  256 #define CK_PKCS11_FUNCTION_INFO(name) \
  257   typedef CK_DECLARE_FUNCTION_POINTER(CK_RV, __PASTE(CK_,name))
  258 
  259 /* pkcs11f.h has all the information about the Cryptoki
  260  * function prototypes. */
  261 #include "pkcs11f.h"
  262 
  263 #undef CK_NEED_ARG_LIST
  264 #undef CK_PKCS11_FUNCTION_INFO
  265 
  266 
  267 /* ==============================================================
  268  * Define structed vector of entry points.  A CK_FUNCTION_LIST
  269  * contains a CK_VERSION indicating a library's Cryptoki version
  270  * and then a whole slew of function pointers to the routines in
  271  * the library.  This type was declared, but not defined, in
  272  * pkcs11t.h.
  273  * ==============================================================
  274  */
  275 
  276 #define CK_PKCS11_FUNCTION_INFO(name) \
  277   __PASTE(CK_,name) name;
  278 
  279 struct CK_FUNCTION_LIST {
  280 
  281   CK_VERSION    version;  /* Cryptoki version */
  282 
  283 /* Pile all the function pointers into the CK_FUNCTION_LIST. */
  284 /* pkcs11f.h has all the information about the Cryptoki
  285  * function prototypes. */
  286 #include "pkcs11f.h"
  287 
  288 };
  289 
  290 #undef CK_PKCS11_FUNCTION_INFO
  291 
  292 
  293 #undef __PASTE
  294 
  295 #ifdef __cplusplus
  296 }
  297 #endif
  298 
  299 #endif