security/nss/lib/util/pkcs11.h

Thu, 22 Jan 2015 13:21:57 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Thu, 22 Jan 2015 13:21:57 +0100
branch
TOR_BUG_9701
changeset 15
b8a032363ba2
permissions
-rw-r--r--

Incorporate requested changes from Mozilla in review:
https://bugzilla.mozilla.org/show_bug.cgi?id=1123480#c6

     1 /* This Source Code Form is subject to the terms of the Mozilla Public
     2  * License, v. 2.0. If a copy of the MPL was not distributed with this
     3  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
     4 /*
     5  * Copyright (C) 1994-1999 RSA Security Inc. Licence to copy this document
     6  * is granted provided that it is identified as "RSA Security In.c Public-Key
     7  * Cryptography Standards (PKCS)" in all material mentioning or referencing
     8  * this document.
     9  *
    10  * The latest version of this header can be found at:
    11  *    http://www.rsalabs.com/pkcs/pkcs-11/index.html
    12  */
    13 #ifndef _PKCS11_H_
    14 #define _PKCS11_H_ 1
    16 #ifdef __cplusplus
    17 extern "C" {
    18 #endif
    20 /* Before including this file (pkcs11.h) (or pkcs11t.h by
    21  * itself), 6 platform-specific macros must be defined.  These
    22  * macros are described below, and typical definitions for them
    23  * are also given.  Be advised that these definitions can depend
    24  * on both the platform and the compiler used (and possibly also
    25  * on whether a PKCS #11 library is linked statically or
    26  * dynamically).
    27  *
    28  * In addition to defining these 6 macros, the packing convention
    29  * for PKCS #11 structures should be set.  The PKCS #11
    30  * convention on packing is that structures should be 1-byte
    31  * aligned.
    32  *
    33  * In a Win32 environment, this might be done by using the
    34  * following preprocessor directive before including pkcs11.h
    35  * or pkcs11t.h:
    36  *
    37  * #pragma pack(push, cryptoki, 1)
    38  *
    39  * and using the following preprocessor directive after including
    40  * pkcs11.h or pkcs11t.h:
    41  *
    42  * #pragma pack(pop, cryptoki)
    43  *
    44  * In a UNIX environment, you're on your own here.  You might
    45  * not need to do anything.
    46  *
    47  *
    48  * Now for the macros:
    49  *
    50  *
    51  * 1. CK_PTR: The indirection string for making a pointer to an
    52  * object.  It can be used like this:
    53  *
    54  * typedef CK_BYTE CK_PTR CK_BYTE_PTR;
    55  *
    56  * In a Win32 environment, it might be defined by
    57  *
    58  * #define CK_PTR *
    59  *
    60  * In a UNIX environment, it might be defined by
    61  *
    62  * #define CK_PTR *
    63  *
    64  *
    65  * 2. CK_DEFINE_FUNCTION(returnType, name): A macro which makes
    66  * an exportable PKCS #11 library function definition out of a
    67  * return type and a function name.  It should be used in the
    68  * following fashion to define the exposed PKCS #11 functions in
    69  * a PKCS #11 library:
    70  *
    71  * CK_DEFINE_FUNCTION(CK_RV, C_Initialize)(
    72  *   CK_VOID_PTR pReserved
    73  * )
    74  * {
    75  *   ...
    76  * }
    77  *
    78  * For defining a function in a Win32 PKCS #11 .dll, it might be
    79  * defined by
    80  *
    81  * #define CK_DEFINE_FUNCTION(returnType, name) \
    82  *   returnType __declspec(dllexport) name
    83  *
    84  * In a UNIX environment, it might be defined by
    85  *
    86  * #define CK_DEFINE_FUNCTION(returnType, name) \
    87  *   returnType name
    88  *
    89  *
    90  * 3. CK_DECLARE_FUNCTION(returnType, name): A macro which makes
    91  * an importable PKCS #11 library function declaration out of a
    92  * return type and a function name.  It should be used in the
    93  * following fashion:
    94  *
    95  * extern CK_DECLARE_FUNCTION(CK_RV, C_Initialize)(
    96  *   CK_VOID_PTR pReserved
    97  * );
    98  *
    99  * For declaring a function in a Win32 PKCS #11 .dll, it might
   100  * be defined by
   101  *
   102  * #define CK_DECLARE_FUNCTION(returnType, name) \
   103  *   returnType __declspec(dllimport) name
   104  *
   105  * In a UNIX environment, it might be defined by
   106  *
   107  * #define CK_DECLARE_FUNCTION(returnType, name) \
   108  *   returnType name
   109  *
   110  *
   111  * 4. CK_DECLARE_FUNCTION_POINTER(returnType, name): A macro
   112  * which makes a PKCS #11 API function pointer declaration or
   113  * function pointer type declaration out of a return type and a
   114  * function name.  It should be used in the following fashion:
   115  *
   116  * // Define funcPtr to be a pointer to a PKCS #11 API function
   117  * // taking arguments args and returning CK_RV.
   118  * CK_DECLARE_FUNCTION_POINTER(CK_RV, funcPtr)(args);
   119  *
   120  * or
   121  *
   122  * // Define funcPtrType to be the type of a pointer to a
   123  * // PKCS #11 API function taking arguments args and returning
   124  * // CK_RV, and then define funcPtr to be a variable of type
   125  * // funcPtrType.
   126  * typedef CK_DECLARE_FUNCTION_POINTER(CK_RV, funcPtrType)(args);
   127  * funcPtrType funcPtr;
   128  *
   129  * For accessing functions in a Win32 PKCS #11 .dll, in might be
   130  * defined by
   131  *
   132  * #define CK_DECLARE_FUNCTION_POINTER(returnType, name) \
   133  *   returnType __declspec(dllimport) (* name)
   134  *
   135  * In a UNIX environment, it might be defined by
   136  *
   137  * #define CK_DECLARE_FUNCTION_POINTER(returnType, name) \
   138  *   returnType (* name)
   139  *
   140  *
   141  * 5. CK_CALLBACK_FUNCTION(returnType, name): A macro which makes
   142  * a function pointer type for an application callback out of
   143  * a return type for the callback and a name for the callback.
   144  * It should be used in the following fashion:
   145  *
   146  * CK_CALLBACK_FUNCTION(CK_RV, myCallback)(args);
   147  *
   148  * to declare a function pointer, myCallback, to a callback
   149  * which takes arguments args and returns a CK_RV.  It can also
   150  * be used like this:
   151  *
   152  * typedef CK_CALLBACK_FUNCTION(CK_RV, myCallbackType)(args);
   153  * myCallbackType myCallback;
   154  *
   155  * In a Win32 environment, it might be defined by
   156  *
   157  * #define CK_CALLBACK_FUNCTION(returnType, name) \
   158  *   returnType (* name)
   159  *
   160  * In a UNIX environment, it might be defined by
   161  *
   162  * #define CK_CALLBACK_FUNCTION(returnType, name) \
   163  *   returnType (* name)
   164  *
   165  *
   166  * 6. NULL_PTR: This macro is the value of a NULL pointer.
   167  *
   168  * In any ANSI/ISO C environment (and in many others as well),
   169  * this should be defined by
   170  *
   171  * #ifndef NULL_PTR
   172  * #define NULL_PTR 0
   173  * #endif
   174  */
   177 /* All the various PKCS #11 types and #define'd values are in the
   178  * file pkcs11t.h. */
   179 #include "pkcs11t.h"
   181 #define __PASTE(x,y)      x##y
   184 /* packing defines */
   185 #include "pkcs11p.h"
   186 /* ==============================================================
   187  * Define the "extern" form of all the entry points.
   188  * ==============================================================
   189  */
   191 #define CK_NEED_ARG_LIST  1
   192 #define CK_PKCS11_FUNCTION_INFO(name) \
   193   CK_DECLARE_FUNCTION(CK_RV, name)
   195 /* pkcs11f.h has all the information about the PKCS #11
   196  * function prototypes. */
   197 #include "pkcs11f.h"
   199 #undef CK_NEED_ARG_LIST
   200 #undef CK_PKCS11_FUNCTION_INFO
   203 /* ==============================================================
   204  * Define the typedef form of all the entry points.  That is, for
   205  * each PKCS #11 function C_XXX, define a type CK_C_XXX which is
   206  * a pointer to that kind of function.
   207  * ==============================================================
   208  */
   210 #define CK_NEED_ARG_LIST  1
   211 #define CK_PKCS11_FUNCTION_INFO(name) \
   212   typedef CK_DECLARE_FUNCTION_POINTER(CK_RV, __PASTE(CK_,name))
   214 /* pkcs11f.h has all the information about the PKCS #11
   215  * function prototypes. */
   216 #include "pkcs11f.h"
   218 #undef CK_NEED_ARG_LIST
   219 #undef CK_PKCS11_FUNCTION_INFO
   222 /* ==============================================================
   223  * Define structed vector of entry points.  A CK_FUNCTION_LIST
   224  * contains a CK_VERSION indicating a library's PKCS #11 version
   225  * and then a whole slew of function pointers to the routines in
   226  * the library.  This type was declared, but not defined, in
   227  * pkcs11t.h.
   228  * ==============================================================
   229  */
   231 #define CK_PKCS11_FUNCTION_INFO(name) \
   232   __PASTE(CK_,name) name;
   234 struct CK_FUNCTION_LIST {
   236   CK_VERSION    version;  /* PKCS #11 version */
   238 /* Pile all the function pointers into the CK_FUNCTION_LIST. */
   239 /* pkcs11f.h has all the information about the PKCS #11
   240  * function prototypes. */
   241 #include "pkcs11f.h" 
   243 };
   245 #undef CK_PKCS11_FUNCTION_INFO
   248 #undef __PASTE
   250 /* unpack */
   251 #include "pkcs11u.h"
   253 #ifdef __cplusplus
   254 }
   255 #endif
   257 #endif

mercurial