pkcs11.h
上传用户:lyxiangda
上传日期:2007-01-12
资源大小:3042k
文件大小:10k
源码类别:

CA认证

开发平台:

WINDOWS

  1. /*
  2.  * The contents of this file are subject to the Mozilla Public
  3.  * License Version 1.1 (the "License"); you may not use this file
  4.  * except in compliance with the License. You may obtain a copy of
  5.  * the License at http://www.mozilla.org/MPL/
  6.  * 
  7.  * Software distributed under the License is distributed on an "AS
  8.  * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
  9.  * implied. See the License for the specific language governing
  10.  * rights and limitations under the License.
  11.  * 
  12.  * The Original Code is the Netscape security libraries.
  13.  * 
  14.  * The Initial Developer of the Original Code is Netscape
  15.  * Communications Corporation.  Portions created by Netscape are 
  16.  * Copyright (C) 1994-2000 Netscape Communications Corporation.  All
  17.  * Rights Reserved.
  18.  * 
  19.  * Contributor(s):
  20.  * 
  21.  * Alternatively, the contents of this file may be used under the
  22.  * terms of the GNU General Public License Version 2 or later (the
  23.  * "GPL"), in which case the provisions of the GPL are applicable 
  24.  * instead of those above.  If you wish to allow use of your 
  25.  * version of this file only under the terms of the GPL and not to
  26.  * allow others to use your version of this file under the MPL,
  27.  * indicate your decision by deleting the provisions above and
  28.  * replace them with the notice and other provisions required by
  29.  * the GPL.  If you do not delete the provisions above, a recipient
  30.  * may use your version of this file under either the MPL or the
  31.  * GPL.
  32.  */
  33. /*
  34.  * Copyright (C) 1994-1999 RSA Security Inc. Licence to copy this document
  35.  * is granted provided that it is identified as "RSA Security In.c Public-Key
  36.  * Cryptography Standards (PKCS)" in all material mentioning or referencing
  37.  * this document.
  38.  */
  39. #ifndef _PKCS11_H_
  40. #define _PKCS11_H_ 1
  41. #ifdef __cplusplus
  42. extern "C" {
  43. #endif
  44. /* Before including this file (pkcs11.h) (or pkcs11t.h by
  45.  * itself), 6 platform-specific macros must be defined.  These
  46.  * macros are described below, and typical definitions for them
  47.  * are also given.  Be advised that these definitions can depend
  48.  * on both the platform and the compiler used (and possibly also
  49.  * on whether a PKCS #11 library is linked statically or
  50.  * dynamically).
  51.  *
  52.  * In addition to defining these 6 macros, the packing convention
  53.  * for PKCS #11 structures should be set.  The PKCS #11
  54.  * convention on packing is that structures should be 1-byte
  55.  * aligned.
  56.  *
  57.  * In a Win32 environment, this might be done by using the
  58.  * following preprocessor directive before including pkcs11.h
  59.  * or pkcs11t.h:
  60.  *
  61.  * #pragma pack(push, cryptoki, 1)
  62.  *
  63.  * and using the following preprocessor directive after including
  64.  * pkcs11.h or pkcs11t.h:
  65.  *
  66.  * #pragma pack(pop, cryptoki)
  67.  *
  68.  * In a Win16 environment, this might be done by using the
  69.  * following preprocessor directive before including pkcs11.h
  70.  * or pkcs11t.h:
  71.  *
  72.  * #pragma pack(1)
  73.  *
  74.  * In a UNIX environment, you're on your own here.  You might
  75.  * not need to do anything.
  76.  *
  77.  *
  78.  * Now for the macros:
  79.  *
  80.  *
  81.  * 1. CK_PTR: The indirection string for making a pointer to an
  82.  * object.  It can be used like this:
  83.  *
  84.  * typedef CK_BYTE CK_PTR CK_BYTE_PTR;
  85.  *
  86.  * In a Win32 environment, it might be defined by
  87.  *
  88.  * #define CK_PTR *
  89.  *
  90.  * In a Win16 environment, it might be defined by
  91.  *
  92.  * #define CK_PTR far *
  93.  *
  94.  * In a UNIX environment, it might be defined by
  95.  *
  96.  * #define CK_PTR *
  97.  *
  98.  *
  99.  * 2. CK_DEFINE_FUNCTION(returnType, name): A macro which makes
  100.  * an exportable PKCS #11 library function definition out of a
  101.  * return type and a function name.  It should be used in the
  102.  * following fashion to define the exposed PKCS #11 functions in
  103.  * a PKCS #11 library:
  104.  *
  105.  * CK_DEFINE_FUNCTION(CK_RV, C_Initialize)(
  106.  *   CK_VOID_PTR pReserved
  107.  * )
  108.  * {
  109.  *   ...
  110.  * }
  111.  *
  112.  * For defining a function in a Win32 PKCS #11 .dll, it might be
  113.  * defined by
  114.  *
  115.  * #define CK_DEFINE_FUNCTION(returnType, name) 
  116.  *   returnType __declspec(dllexport) name
  117.  *
  118.  * For defining a function in a Win16 PKCS #11 .dll, it might be
  119.  * defined by
  120.  *
  121.  * #define CK_DEFINE_FUNCTION(returnType, name) 
  122.  *   returnType __export _far _pascal name
  123.  *
  124.  * In a UNIX environment, it might be defined by
  125.  *
  126.  * #define CK_DEFINE_FUNCTION(returnType, name) 
  127.  *   returnType name
  128.  *
  129.  *
  130.  * 3. CK_DECLARE_FUNCTION(returnType, name): A macro which makes
  131.  * an importable PKCS #11 library function declaration out of a
  132.  * return type and a function name.  It should be used in the
  133.  * following fashion:
  134.  *
  135.  * extern CK_DECLARE_FUNCTION(CK_RV, C_Initialize)(
  136.  *   CK_VOID_PTR pReserved
  137.  * );
  138.  *
  139.  * For declaring a function in a Win32 PKCS #11 .dll, it might
  140.  * be defined by
  141.  *
  142.  * #define CK_DECLARE_FUNCTION(returnType, name) 
  143.  *   returnType __declspec(dllimport) name
  144.  *
  145.  * For declaring a function in a Win16 PKCS #11 .dll, it might
  146.  * be defined by
  147.  *
  148.  * #define CK_DECLARE_FUNCTION(returnType, name) 
  149.  *   returnType __export _far _pascal name
  150.  *
  151.  * In a UNIX environment, it might be defined by
  152.  *
  153.  * #define CK_DECLARE_FUNCTION(returnType, name) 
  154.  *   returnType name
  155.  *
  156.  *
  157.  * 4. CK_DECLARE_FUNCTION_POINTER(returnType, name): A macro
  158.  * which makes a PKCS #11 API function pointer declaration or
  159.  * function pointer type declaration out of a return type and a
  160.  * function name.  It should be used in the following fashion:
  161.  *
  162.  * // Define funcPtr to be a pointer to a PKCS #11 API function
  163.  * // taking arguments args and returning CK_RV.
  164.  * CK_DECLARE_FUNCTION_POINTER(CK_RV, funcPtr)(args);
  165.  *
  166.  * or
  167.  *
  168.  * // Define funcPtrType to be the type of a pointer to a
  169.  * // PKCS #11 API function taking arguments args and returning
  170.  * // CK_RV, and then define funcPtr to be a variable of type
  171.  * // funcPtrType.
  172.  * typedef CK_DECLARE_FUNCTION_POINTER(CK_RV, funcPtrType)(args);
  173.  * funcPtrType funcPtr;
  174.  *
  175.  * For accessing functions in a Win32 PKCS #11 .dll, in might be
  176.  * defined by
  177.  *
  178.  * #define CK_DECLARE_FUNCTION_POINTER(returnType, name) 
  179.  *   returnType __declspec(dllimport) (* name)
  180.  *
  181.  * For accessing functions in a Win16 PKCS #11 .dll, it might be
  182.  * defined by
  183.  *
  184.  * #define CK_DECLARE_FUNCTION_POINTER(returnType, name) 
  185.  *   returnType __export _far _pascal (* name)
  186.  *
  187.  * In a UNIX environment, it might be defined by
  188.  *
  189.  * #define CK_DECLARE_FUNCTION_POINTER(returnType, name) 
  190.  *   returnType (* name)
  191.  *
  192.  *
  193.  * 5. CK_CALLBACK_FUNCTION(returnType, name): A macro which makes
  194.  * a function pointer type for an application callback out of
  195.  * a return type for the callback and a name for the callback.
  196.  * It should be used in the following fashion:
  197.  *
  198.  * CK_CALLBACK_FUNCTION(CK_RV, myCallback)(args);
  199.  *
  200.  * to declare a function pointer, myCallback, to a callback
  201.  * which takes arguments args and returns a CK_RV.  It can also
  202.  * be used like this:
  203.  *
  204.  * typedef CK_CALLBACK_FUNCTION(CK_RV, myCallbackType)(args);
  205.  * myCallbackType myCallback;
  206.  *
  207.  * In a Win32 environment, it might be defined by
  208.  *
  209.  * #define CK_CALLBACK_FUNCTION(returnType, name) 
  210.  *   returnType (* name)
  211.  *
  212.  * In a Win16 environment, it might be defined by
  213.  *
  214.  * #define CK_CALLBACK_FUNCTION(returnType, name) 
  215.  *   returnType _far _pascal (* name)
  216.  *
  217.  * In a UNIX environment, it might be defined by
  218.  *
  219.  * #define CK_CALLBACK_FUNCTION(returnType, name) 
  220.  *   returnType (* name)
  221.  *
  222.  *
  223.  * 6. NULL_PTR: This macro is the value of a NULL pointer.
  224.  *
  225.  * In any ANSI/ISO C environment (and in many others as well),
  226.  * this should be defined by
  227.  *
  228.  * #ifndef NULL_PTR
  229.  * #define NULL_PTR 0
  230.  * #endif
  231.  */
  232. /* All the various PKCS #11 types and #define'd values are in the
  233.  * file pkcs11t.h. */
  234. #include "pkcs11t.h"
  235. #define __PASTE(x,y)      x##y
  236. /* packing defines */
  237. #include "pkcs11p.h"
  238. /* ==============================================================
  239.  * Define the "extern" form of all the entry points.
  240.  * ==============================================================
  241.  */
  242. #define CK_NEED_ARG_LIST  1
  243. #define CK_PKCS11_FUNCTION_INFO(name) 
  244.   CK_DECLARE_FUNCTION(CK_RV, name)
  245. /* pkcs11f.h has all the information about the PKCS #11
  246.  * function prototypes. */
  247. #include "pkcs11f.h"
  248. #undef CK_NEED_ARG_LIST
  249. #undef CK_PKCS11_FUNCTION_INFO
  250. /* ==============================================================
  251.  * Define the typedef form of all the entry points.  That is, for
  252.  * each PKCS #11 function C_XXX, define a type CK_C_XXX which is
  253.  * a pointer to that kind of function.
  254.  * ==============================================================
  255.  */
  256. #define CK_NEED_ARG_LIST  1
  257. #define CK_PKCS11_FUNCTION_INFO(name) 
  258.   typedef CK_DECLARE_FUNCTION_POINTER(CK_RV, __PASTE(CK_,name))
  259. /* pkcs11f.h has all the information about the PKCS #11
  260.  * function prototypes. */
  261. #include "pkcs11f.h"
  262. #undef CK_NEED_ARG_LIST
  263. #undef CK_PKCS11_FUNCTION_INFO
  264. /* ==============================================================
  265.  * Define structed vector of entry points.  A CK_FUNCTION_LIST
  266.  * contains a CK_VERSION indicating a library's PKCS #11 version
  267.  * and then a whole slew of function pointers to the routines in
  268.  * the library.  This type was declared, but not defined, in
  269.  * pkcs11t.h.
  270.  * ==============================================================
  271.  */
  272. #define CK_PKCS11_FUNCTION_INFO(name) 
  273.   __PASTE(CK_,name) name;
  274.   
  275. struct CK_FUNCTION_LIST {
  276.   CK_VERSION    version;  /* PKCS #11 version */
  277. /* Pile all the function pointers into the CK_FUNCTION_LIST. */
  278. /* pkcs11f.h has all the information about the PKCS #11
  279.  * function prototypes. */
  280. #include "pkcs11f.h" 
  281. };
  282. #undef CK_PKCS11_FUNCTION_INFO
  283. #undef __PASTE
  284. /* unpack */
  285. #include "pkcs11u.h"
  286. #ifdef __cplusplus
  287. }
  288. #endif
  289. /* 
  290. ** Functions called directly by applications to configure the FIPS token.
  291. */
  292. extern void PK11_ConfigurePKCS11(char *man, char *libdes, char *tokdes, 
  293. char *ptokdes, char *slotdes, char *pslotdes, char *fslotdes, 
  294. char *fpslotdes, int minPwd, int pwdRequired);
  295. extern void PK11_ConfigureFIPS(char *slotdes, char *pslotdes);
  296. #endif