home *** CD-ROM | disk | FTP | other *** search
/ ftp.rsa.com / 2014.05.ftp.rsa.com.tar / ftp.rsa.com / pub / pkcs / pkcs-11 / v2.01 / pkcs11.h next >
C/C++ Source or Header  |  2014-05-02  |  8KB  |  282 lines

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