pkcs11t.h 87 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592
  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. /* 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. * License is also granted to make and use derivative works provided that
  8. * such works are identified as "derived from the RSA Security Inc. PKCS #11
  9. * Cryptographic Token Interface (Cryptoki)" in all material mentioning or
  10. * referencing the derived work.
  11. * RSA Security Inc. makes no representations concerning either the
  12. * merchantability of this software or the suitability of this software for
  13. * any particular purpose. It is provided "as is" without express or implied
  14. * warranty of any kind.
  15. */
  16. #ifndef _PKCS11T_H_
  17. #define _PKCS11T_H_ 1
  18. #define CK_TRUE 1
  19. #define CK_FALSE 0
  20. #include "prtypes.h"
  21. #define CK_PTR *
  22. #define CK_NULL_PTR 0
  23. #define CK_CALLBACK_FUNCTION(rtype, func) rtype(PR_CALLBACK *func)
  24. #define CK_DECLARE_FUNCTION(rtype, func) extern rtype func
  25. #define CK_DECLARE_FUNCTION_POINTER(rtype, func) rtype(PR_CALLBACK *func)
  26. #ifdef NSS_PCKS11_2_0_COMPAT
  27. #define prfHashMechanism prfMechanism
  28. #endif
  29. #define CRYPTOKI_VERSION_MAJOR 3
  30. #define CRYPTOKI_VERSION_MINOR 0
  31. #define CRYPTOKI_VERSION_AMENDMENT 0
  32. /* an unsigned 8-bit value */
  33. typedef unsigned char CK_BYTE;
  34. /* an unsigned 8-bit character */
  35. typedef CK_BYTE CK_CHAR;
  36. /* an 8-bit UTF-8 character */
  37. typedef CK_BYTE CK_UTF8CHAR;
  38. /* a BYTE-sized Boolean flag */
  39. typedef CK_BYTE CK_BBOOL;
  40. /* an unsigned value, at least 32 bits long */
  41. typedef unsigned long int CK_ULONG;
  42. /* a signed value, the same size as a CK_ULONG */
  43. /* CK_LONG is new for v2.0 */
  44. typedef long int CK_LONG;
  45. /* at least 32 bits; each bit is a Boolean flag */
  46. typedef CK_ULONG CK_FLAGS;
  47. /* some special values for certain CK_ULONG variables */
  48. #define CK_UNAVAILABLE_INFORMATION (~0UL)
  49. #define CK_EFFECTIVELY_INFINITE 0
  50. typedef CK_BYTE CK_PTR CK_BYTE_PTR;
  51. typedef CK_CHAR CK_PTR CK_CHAR_PTR;
  52. typedef CK_UTF8CHAR CK_PTR CK_UTF8CHAR_PTR;
  53. typedef CK_ULONG CK_PTR CK_ULONG_PTR;
  54. typedef void CK_PTR CK_VOID_PTR;
  55. /* Pointer to a CK_VOID_PTR-- i.e., pointer to pointer to void */
  56. typedef CK_VOID_PTR CK_PTR CK_VOID_PTR_PTR;
  57. /* The following value is always invalid if used as a session */
  58. /* handle or object handle */
  59. #define CK_INVALID_HANDLE 0
  60. /* pack */
  61. #include "pkcs11p.h"
  62. typedef struct CK_VERSION {
  63. CK_BYTE major; /* integer portion of version number */
  64. CK_BYTE minor; /* 1/100ths portion of version number */
  65. } CK_VERSION;
  66. typedef CK_VERSION CK_PTR CK_VERSION_PTR;
  67. typedef struct CK_INFO {
  68. /* manufacturerID and libraryDecription have been changed from
  69. * CK_CHAR to CK_UTF8CHAR for v2.10 */
  70. CK_VERSION cryptokiVersion; /* PKCS #11 interface ver */
  71. CK_UTF8CHAR manufacturerID[32]; /* blank padded */
  72. CK_FLAGS flags; /* must be zero */
  73. /* libraryDescription and libraryVersion are new for v2.0 */
  74. CK_UTF8CHAR libraryDescription[32]; /* blank padded */
  75. CK_VERSION libraryVersion; /* version of library */
  76. } CK_INFO;
  77. typedef CK_INFO CK_PTR CK_INFO_PTR;
  78. /* CK_NOTIFICATION enumerates the types of notifications that
  79. * PKCS #11 provides to an application */
  80. /* CK_NOTIFICATION has been changed from an enum to a CK_ULONG
  81. * for v2.0 */
  82. typedef CK_ULONG CK_NOTIFICATION;
  83. #define CKN_SURRENDER 0
  84. typedef CK_ULONG CK_SLOT_ID;
  85. typedef CK_SLOT_ID CK_PTR CK_SLOT_ID_PTR;
  86. /* CK_SLOT_INFO provides information about a slot */
  87. typedef struct CK_SLOT_INFO {
  88. /* slotDescription and manufacturerID have been changed from
  89. * CK_CHAR to CK_UTF8CHAR for v2.10 */
  90. CK_UTF8CHAR slotDescription[64]; /* blank padded */
  91. CK_UTF8CHAR manufacturerID[32]; /* blank padded */
  92. CK_FLAGS flags;
  93. /* hardwareVersion and firmwareVersion are new for v2.0 */
  94. CK_VERSION hardwareVersion; /* version of hardware */
  95. CK_VERSION firmwareVersion; /* version of firmware */
  96. } CK_SLOT_INFO;
  97. /* flags: bit flags that provide capabilities of the slot
  98. * Bit Flag Mask Meaning
  99. */
  100. #define CKF_TOKEN_PRESENT 0x00000001UL /* a token is there */
  101. #define CKF_REMOVABLE_DEVICE 0x00000002UL /* removable devices*/
  102. #define CKF_HW_SLOT 0x00000004UL /* hardware slot */
  103. typedef CK_SLOT_INFO CK_PTR CK_SLOT_INFO_PTR;
  104. /* CK_TOKEN_INFO provides information about a token */
  105. typedef struct CK_TOKEN_INFO {
  106. /* label, manufacturerID, and model have been changed from
  107. * CK_CHAR to CK_UTF8CHAR for v2.10 */
  108. CK_UTF8CHAR label[32]; /* blank padded */
  109. CK_UTF8CHAR manufacturerID[32]; /* blank padded */
  110. CK_UTF8CHAR model[16]; /* blank padded */
  111. CK_CHAR serialNumber[16]; /* blank padded */
  112. CK_FLAGS flags; /* see below */
  113. /* ulMaxSessionCount, ulSessionCount, ulMaxRwSessionCount,
  114. * ulRwSessionCount, ulMaxPinLen, and ulMinPinLen have all been
  115. * changed from CK_USHORT to CK_ULONG for v2.0 */
  116. CK_ULONG ulMaxSessionCount; /* max open sessions */
  117. CK_ULONG ulSessionCount; /* sess. now open */
  118. CK_ULONG ulMaxRwSessionCount; /* max R/W sessions */
  119. CK_ULONG ulRwSessionCount; /* R/W sess. now open */
  120. CK_ULONG ulMaxPinLen; /* in bytes */
  121. CK_ULONG ulMinPinLen; /* in bytes */
  122. CK_ULONG ulTotalPublicMemory; /* in bytes */
  123. CK_ULONG ulFreePublicMemory; /* in bytes */
  124. CK_ULONG ulTotalPrivateMemory; /* in bytes */
  125. CK_ULONG ulFreePrivateMemory; /* in bytes */
  126. /* hardwareVersion, firmwareVersion, and time are new for
  127. * v2.0 */
  128. CK_VERSION hardwareVersion; /* version of hardware */
  129. CK_VERSION firmwareVersion; /* version of firmware */
  130. CK_CHAR utcTime[16]; /* time */
  131. } CK_TOKEN_INFO;
  132. /* The flags parameter is defined as follows:
  133. * Bit Flag Mask Meaning
  134. */
  135. #define CKF_RNG 0x00000001UL /* has random # \
  136. * generator */
  137. #define CKF_WRITE_PROTECTED 0x00000002UL /* token is \
  138. * write- \
  139. * protected */
  140. #define CKF_LOGIN_REQUIRED 0x00000004UL /* user must \
  141. * login */
  142. #define CKF_USER_PIN_INITIALIZED 0x00000008UL /* normal user's \
  143. * PIN is set */
  144. /* CKF_RESTORE_KEY_NOT_NEEDED is new for v2.0. If it is set,
  145. * that means that *every* time the state of cryptographic
  146. * operations of a session is successfully saved, all keys
  147. * needed to continue those operations are stored in the state */
  148. #define CKF_RESTORE_KEY_NOT_NEEDED 0x00000020UL
  149. /* CKF_CLOCK_ON_TOKEN is new for v2.0. If it is set, that means
  150. * that the token has some sort of clock. The time on that
  151. * clock is returned in the token info structure */
  152. #define CKF_CLOCK_ON_TOKEN 0x00000040UL
  153. /* CKF_PROTECTED_AUTHENTICATION_PATH is new for v2.0. If it is
  154. * set, that means that there is some way for the user to login
  155. * without sending a PIN through the PKCS #11 library itself */
  156. #define CKF_PROTECTED_AUTHENTICATION_PATH 0x00000100UL
  157. /* CKF_DUAL_CRYPTO_OPERATIONS is new for v2.0. If it is true,
  158. * that means that a single session with the token can perform
  159. * dual simultaneous cryptographic operations (digest and
  160. * encrypt; decrypt and digest; sign and encrypt; and decrypt
  161. * and sign) */
  162. #define CKF_DUAL_CRYPTO_OPERATIONS 0x00000200UL
  163. /* CKF_TOKEN_INITIALIZED if new for v2.10. If it is true, the
  164. * token has been initialized using C_InitializeToken or an
  165. * equivalent mechanism outside the scope of PKCS #11.
  166. * Calling C_InitializeToken when this flag is set will cause
  167. * the token to be reinitialized. */
  168. #define CKF_TOKEN_INITIALIZED 0x00000400UL
  169. /* CKF_SECONDARY_AUTHENTICATION if new for v2.10. If it is
  170. * true, the token supports secondary authentication for
  171. * private key objects. This flag is deprecated in v2.11 and
  172. onwards. */
  173. #define CKF_SECONDARY_AUTHENTICATION 0x00000800UL
  174. /* CKF_USER_PIN_COUNT_LOW if new for v2.10. If it is true, an
  175. * incorrect user login PIN has been entered at least once
  176. * since the last successful authentication. */
  177. #define CKF_USER_PIN_COUNT_LOW 0x00010000UL
  178. /* CKF_USER_PIN_FINAL_TRY if new for v2.10. If it is true,
  179. * supplying an incorrect user PIN will it to become locked. */
  180. #define CKF_USER_PIN_FINAL_TRY 0x00020000UL
  181. /* CKF_USER_PIN_LOCKED if new for v2.10. If it is true, the
  182. * user PIN has been locked. User login to the token is not
  183. * possible. */
  184. #define CKF_USER_PIN_LOCKED 0x00040000UL
  185. /* CKF_USER_PIN_TO_BE_CHANGED if new for v2.10. If it is true,
  186. * the user PIN value is the default value set by token
  187. * initialization or manufacturing, or the PIN has been
  188. * expired by the card. */
  189. #define CKF_USER_PIN_TO_BE_CHANGED 0x00080000UL
  190. /* CKF_SO_PIN_COUNT_LOW if new for v2.10. If it is true, an
  191. * incorrect SO login PIN has been entered at least once since
  192. * the last successful authentication. */
  193. #define CKF_SO_PIN_COUNT_LOW 0x00100000UL
  194. /* CKF_SO_PIN_FINAL_TRY if new for v2.10. If it is true,
  195. * supplying an incorrect SO PIN will it to become locked. */
  196. #define CKF_SO_PIN_FINAL_TRY 0x00200000UL
  197. /* CKF_SO_PIN_LOCKED if new for v2.10. If it is true, the SO
  198. * PIN has been locked. SO login to the token is not possible.
  199. */
  200. #define CKF_SO_PIN_LOCKED 0x00400000UL
  201. /* CKF_SO_PIN_TO_BE_CHANGED if new for v2.10. If it is true,
  202. * the SO PIN value is the default value set by token
  203. * initialization or manufacturing, or the PIN has been
  204. * expired by the card. */
  205. #define CKF_SO_PIN_TO_BE_CHANGED 0x00800000UL
  206. #define CKF_ERROR_STATE 0x01000000UL
  207. typedef CK_TOKEN_INFO CK_PTR CK_TOKEN_INFO_PTR;
  208. /* CK_SESSION_HANDLE is a PKCS #11-assigned value that
  209. * identifies a session */
  210. typedef CK_ULONG CK_SESSION_HANDLE;
  211. typedef CK_SESSION_HANDLE CK_PTR CK_SESSION_HANDLE_PTR;
  212. /* CK_USER_TYPE enumerates the types of PKCS #11 users */
  213. /* CK_USER_TYPE has been changed from an enum to a CK_ULONG for
  214. * v2.0 */
  215. typedef CK_ULONG CK_USER_TYPE;
  216. /* Security Officer */
  217. #define CKU_SO 0
  218. /* Normal user */
  219. #define CKU_USER 1
  220. /* Context specific (added in v2.20) */
  221. #define CKU_CONTEXT_SPECIFIC 2
  222. /* CK_STATE enumerates the session states */
  223. /* CK_STATE has been changed from an enum to a CK_ULONG for
  224. * v2.0 */
  225. typedef CK_ULONG CK_STATE;
  226. #define CKS_RO_PUBLIC_SESSION 0
  227. #define CKS_RO_USER_FUNCTIONS 1
  228. #define CKS_RW_PUBLIC_SESSION 2
  229. #define CKS_RW_USER_FUNCTIONS 3
  230. #define CKS_RW_SO_FUNCTIONS 4
  231. /* CK_SESSION_INFO provides information about a session */
  232. typedef struct CK_SESSION_INFO {
  233. CK_SLOT_ID slotID;
  234. CK_STATE state;
  235. CK_FLAGS flags; /* see below */
  236. /* ulDeviceError was changed from CK_USHORT to CK_ULONG for
  237. * v2.0 */
  238. CK_ULONG ulDeviceError; /* device-dependent error code */
  239. } CK_SESSION_INFO;
  240. /* The flags are defined in the following table:
  241. * Bit Flag Mask Meaning
  242. */
  243. #define CKF_RW_SESSION 0x00000002UL /* session is r/w */
  244. #define CKF_SERIAL_SESSION 0x00000004UL /* no parallel */
  245. typedef CK_SESSION_INFO CK_PTR CK_SESSION_INFO_PTR;
  246. /* CK_OBJECT_HANDLE is a token-specific identifier for an
  247. * object */
  248. typedef CK_ULONG CK_OBJECT_HANDLE;
  249. typedef CK_OBJECT_HANDLE CK_PTR CK_OBJECT_HANDLE_PTR;
  250. /* CK_OBJECT_CLASS is a value that identifies the classes (or
  251. * types) of objects that PKCS #11 recognizes. It is defined
  252. * as follows: */
  253. /* CK_OBJECT_CLASS was changed from CK_USHORT to CK_ULONG for
  254. * v2.0 */
  255. typedef CK_ULONG CK_OBJECT_CLASS;
  256. /* The following classes of objects are defined: */
  257. /* CKO_HW_FEATURE is new for v2.10 */
  258. /* CKO_DOMAIN_PARAMETERS is new for v2.11 */
  259. /* CKO_MECHANISM is new for v2.20 */
  260. /* CKO_PROFILE is new for v3.00 */
  261. #define CKO_DATA 0x00000000UL
  262. #define CKO_CERTIFICATE 0x00000001UL
  263. #define CKO_PUBLIC_KEY 0x00000002UL
  264. #define CKO_PRIVATE_KEY 0x00000003UL
  265. #define CKO_SECRET_KEY 0x00000004UL
  266. #define CKO_HW_FEATURE 0x00000005UL
  267. #define CKO_DOMAIN_PARAMETERS 0x00000006UL
  268. #define CKO_MECHANISM 0x00000007UL
  269. #define CKO_PROFILE 0x00000009UL
  270. #define CKO_VENDOR_DEFINED 0x80000000UL
  271. typedef CK_OBJECT_CLASS CK_PTR CK_OBJECT_CLASS_PTR;
  272. /* CK_PROFILE_ID is new for v3.00. CK_PROFILE_ID is a value that
  273. * identifies the profile that the token supports. */
  274. typedef CK_ULONG CK_PROFILE_ID;
  275. /* Profile ID's */
  276. #define CKP_INVALID_ID 0x00000000UL
  277. #define CKP_BASELINE_PROVIDER 0x00000001UL
  278. #define CKP_EXTENDED_PROVIDER 0x00000002UL
  279. #define CKP_AUTHENTICATION_TOKEN 0x00000003UL
  280. #define CKP_PUBLIC_CERTIFICATES_TOKEN 0x00000004UL
  281. #define CKP_VENDOR_DEFINED 0x80000000UL
  282. /* CK_HW_FEATURE_TYPE is new for v2.10. CK_HW_FEATURE_TYPE is a
  283. * value that identifies the hardware feature type of an object
  284. * with CK_OBJECT_CLASS equal to CKO_HW_FEATURE. */
  285. typedef CK_ULONG CK_HW_FEATURE_TYPE;
  286. /* The following hardware feature types are defined */
  287. /* CKH_USER_INTERFACE is new for v2.20 */
  288. #define CKH_MONOTONIC_COUNTER 0x00000001UL
  289. #define CKH_CLOCK 0x00000002UL
  290. #define CKH_USER_INTERFACE 0x00000003UL
  291. #define CKH_VENDOR_DEFINED 0x80000000UL
  292. /* CK_KEY_TYPE is a value that identifies a key type */
  293. /* CK_KEY_TYPE was changed from CK_USHORT to CK_ULONG for v2.0 */
  294. typedef CK_ULONG CK_KEY_TYPE;
  295. /* the following key types are defined: */
  296. #define CKK_RSA 0x00000000UL
  297. #define CKK_DSA 0x00000001UL
  298. #define CKK_DH 0x00000002UL
  299. /* CKK_ECDSA and CKK_KEA are new for v2.0 */
  300. /* CKK_ECDSA is deprecated in v2.11, CKK_EC is preferred. */
  301. #define CKK_ECDSA 0x00000003UL
  302. #define CKK_EC 0x00000003UL
  303. #define CKK_X9_42_DH 0x00000004UL
  304. #define CKK_KEA 0x00000005UL
  305. #define CKK_GENERIC_SECRET 0x00000010UL
  306. #define CKK_RC2 0x00000011UL
  307. #define CKK_RC4 0x00000012UL
  308. #define CKK_DES 0x00000013UL
  309. #define CKK_DES2 0x00000014UL
  310. #define CKK_DES3 0x00000015UL
  311. /* all these key types are new for v2.0 */
  312. #define CKK_CAST 0x00000016UL
  313. #define CKK_CAST3 0x00000017UL
  314. /* CKK_CAST5 is deprecated in v2.11, CKK_CAST128 is preferred. */
  315. #define CKK_CAST5 0x00000018UL
  316. #define CKK_CAST128 0x00000018UL
  317. #define CKK_RC5 0x00000019UL
  318. #define CKK_IDEA 0x0000001AUL
  319. #define CKK_SKIPJACK 0x0000001BUL
  320. #define CKK_BATON 0x0000001CUL
  321. #define CKK_JUNIPER 0x0000001DUL
  322. #define CKK_CDMF 0x0000001EUL
  323. #define CKK_AES 0x0000001FUL
  324. /* BlowFish and TwoFish are new for v2.20 */
  325. #define CKK_BLOWFISH 0x00000020UL
  326. #define CKK_TWOFISH 0x00000021UL
  327. /* Camellia is proposed for v2.20 Amendment 3 */
  328. #define CKK_CAMELLIA 0x00000025UL
  329. #define CKK_SEED 0x0000002FUL /* was 2A */
  330. /* added in v2.30 */
  331. #define CKK_ARIA 0x00000026UL
  332. /* added in 2.40 */
  333. #define CKK_MD5_HMAC 0x00000027UL
  334. #define CKK_SHA_1_HMAC 0x00000028UL
  335. #define CKK_RIPEMD128_HMAC 0x00000029UL
  336. #define CKK_RIPEMD160_HMAC 0x0000002AUL
  337. #define CKK_SHA256_HMAC 0x0000002BUL
  338. #define CKK_SHA384_HMAC 0x0000002CUL
  339. #define CKK_SHA512_HMAC 0x0000002DUL
  340. #define CKK_SHA224_HMAC 0x0000002EUL
  341. #define CKK_GOSTR3410 0x00000030UL
  342. #define CKK_GOSTR3411 0x00000031UL
  343. #define CKK_GOST28147 0x00000032UL
  344. #define CKK_CHACHA20 0x00000033UL
  345. #define CKK_POLY1305 0x00000034UL
  346. #define CKK_AES_XTS 0x00000035UL
  347. #define CKK_SHA3_224_HMAC 0x00000036UL
  348. #define CKK_SHA3_256_HMAC 0x00000037UL
  349. #define CKK_SHA3_384_HMAC 0x00000038UL
  350. #define CKK_SHA3_512_HMAC 0x00000039UL
  351. /* added in 3.0 */
  352. #define CKK_BLAKE2B_160_HMAC 0x0000003aUL
  353. #define CKK_BLAKE2B_256_HMAC 0x0000003bUL
  354. #define CKK_BLAKE2B_384_HMAC 0x0000003cUL
  355. #define CKK_BLAKE2B_512_HMAC 0x0000003dUL
  356. #define CKK_SALSA20 0x0000003eUL
  357. #define CKK_X2RATCHET 0x0000003fUL
  358. #define CKK_EC_EDWARDS 0x00000040UL
  359. #define CKK_EC_MONTGOMERY 0x00000041UL
  360. #define CKK_HKDF 0x00000042UL
  361. #define CKK_SHA512_224_HMAC 0x00000043UL
  362. #define CKK_SHA512_256_HMAC 0x00000044UL
  363. #define CKK_SHA512_T_HMAC 0x00000045UL
  364. #define CKK_VENDOR_DEFINED 0x80000000UL
  365. /* CK_CERTIFICATE_TYPE is a value that identifies a certificate
  366. * type */
  367. /* CK_CERTIFICATE_TYPE was changed from CK_USHORT to CK_ULONG
  368. * for v2.0 */
  369. typedef CK_ULONG CK_CERTIFICATE_TYPE;
  370. /* The following certificate types are defined: */
  371. /* CKC_X_509_ATTR_CERT is new for v2.10 */
  372. /* CKC_WTLS is new for v2.20 */
  373. #define CKC_X_509 0x00000000UL
  374. #define CKC_X_509_ATTR_CERT 0x00000001UL
  375. #define CKC_WTLS 0x00000002UL
  376. #define CKC_VENDOR_DEFINED 0x80000000UL
  377. /* CK_ATTRIBUTE_TYPE is a value that identifies an attribute
  378. * type */
  379. /* CK_ATTRIBUTE_TYPE was changed from CK_USHORT to CK_ULONG for
  380. * v2.0 */
  381. typedef CK_ULONG CK_ATTRIBUTE_TYPE;
  382. /* values for CKA_CERTIFICATE_CATEGORY v2.20 */
  383. typedef CK_ULONG CK_CERTIFICATE_CATEGORY;
  384. #define CK_CERTIFICATE_CATEGORY_UNSPECIFIED 0UL
  385. #define CK_CERTIFICATE_CATEGORY_TOKEN_USER 1UL
  386. #define CK_CERTIFICATE_CATEGORY_AUTHORITY 2UL
  387. #define CK_CERTIFICATE_CATEGORY_OTHER_ENTITY 3UL
  388. /* values for CKA_JAVA_MIDP_SECURITY_DOMAIN v2.20 */
  389. typedef CK_ULONG CK_JAVA_MIDP_SECURITY_DOMAIN;
  390. #define CK_SECURITY_DOMAIN_UNSPECIFIED 0UL
  391. #define CK_SECURITY_DOMAIN_MANUFACTURER 1UL
  392. #define CK_SECURITY_DOMAIN_OPERATOR 2UL
  393. #define CK_SECURITY_DOMAIN_THIRD_PARTY 3UL
  394. /* values for CKA_OTP_FORMAT */
  395. #define CK_OTP_FORMAT_DECIMAL 0UL
  396. #define CK_OTP_FORMAT_HEXADECIMAL 1UL
  397. #define CK_OTP_FORMAT_ALPHANUMERIC 2UL
  398. #define CK_OTP_FORMAT_BINARY 3UL
  399. /* values for CKA_OTP_CHALLENGE_REQUIREMENT, CKA_OTP_TIME_REQUIREMENT,
  400. * CKA_OTP_COUNTER_REQUIREMENT, CKA_OTP_PIN_REQUIREMENT */
  401. #define CK_OTP_PARAM_IGNORED 0UL
  402. #define CK_OTP_PARAM_OPTIONAL 1UL
  403. #define CK_OTP_PARAM_MANDATORY 2UL
  404. /* The CKF_ARRAY_ATTRIBUTE flag identifies an attribute which
  405. consists of an array of values. */
  406. #define CKF_ARRAY_ATTRIBUTE 0x40000000UL
  407. /* The following attribute types are defined: */
  408. #define CKA_CLASS 0x00000000UL
  409. #define CKA_TOKEN 0x00000001UL
  410. #define CKA_PRIVATE 0x00000002UL
  411. #define CKA_LABEL 0x00000003UL
  412. #define CKA_APPLICATION 0x00000010UL
  413. #define CKA_VALUE 0x00000011UL
  414. /* CKA_OBJECT_ID is new for v2.10 */
  415. #define CKA_OBJECT_ID 0x00000012UL
  416. #define CKA_CERTIFICATE_TYPE 0x00000080UL
  417. #define CKA_ISSUER 0x00000081UL
  418. #define CKA_SERIAL_NUMBER 0x00000082UL
  419. /* CKA_AC_ISSUER, CKA_OWNER, and CKA_ATTR_TYPES are new
  420. * for v2.10 */
  421. #define CKA_AC_ISSUER 0x00000083UL
  422. #define CKA_OWNER 0x00000084UL
  423. #define CKA_ATTR_TYPES 0x00000085UL
  424. /* CKA_TRUSTED is new for v2.11 */
  425. #define CKA_TRUSTED 0x00000086UL
  426. /* CKA_CERTIFICATE_CATEGORY ...
  427. * CKA_CHECK_VALUE are new for v2.20 */
  428. #define CKA_CERTIFICATE_CATEGORY 0x00000087UL
  429. #define CKA_JAVA_MIDP_SECURITY_DOMAIN 0x00000088UL
  430. #define CKA_URL 0x00000089UL
  431. #define CKA_HASH_OF_SUBJECT_PUBLIC_KEY 0x0000008AUL
  432. #define CKA_HASH_OF_ISSUER_PUBLIC_KEY 0x0000008BUL
  433. #define CKA_CHECK_VALUE 0x00000090UL
  434. #define CKA_KEY_TYPE 0x00000100UL
  435. #define CKA_SUBJECT 0x00000101UL
  436. #define CKA_ID 0x00000102UL
  437. #define CKA_SENSITIVE 0x00000103UL
  438. #define CKA_ENCRYPT 0x00000104UL
  439. #define CKA_DECRYPT 0x00000105UL
  440. #define CKA_WRAP 0x00000106UL
  441. #define CKA_UNWRAP 0x00000107UL
  442. #define CKA_SIGN 0x00000108UL
  443. #define CKA_SIGN_RECOVER 0x00000109UL
  444. #define CKA_VERIFY 0x0000010AUL
  445. #define CKA_VERIFY_RECOVER 0x0000010BUL
  446. #define CKA_DERIVE 0x0000010CUL
  447. #define CKA_START_DATE 0x00000110UL
  448. #define CKA_END_DATE 0x00000111UL
  449. #define CKA_MODULUS 0x00000120UL
  450. #define CKA_MODULUS_BITS 0x00000121UL
  451. #define CKA_PUBLIC_EXPONENT 0x00000122UL
  452. #define CKA_PRIVATE_EXPONENT 0x00000123UL
  453. #define CKA_PRIME_1 0x00000124UL
  454. #define CKA_PRIME_2 0x00000125UL
  455. #define CKA_EXPONENT_1 0x00000126UL
  456. #define CKA_EXPONENT_2 0x00000127UL
  457. #define CKA_COEFFICIENT 0x00000128UL
  458. /* CKA_PUBLIC_KEY_INFO is new for v2.40 */
  459. #define CKA_PUBLIC_KEY_INFO 0x00000129UL
  460. #define CKA_PRIME 0x00000130UL
  461. #define CKA_SUBPRIME 0x00000131UL
  462. #define CKA_BASE 0x00000132UL
  463. /* CKA_PRIME_BITS and CKA_SUB_PRIME_BITS are new for v2.11 */
  464. #define CKA_PRIME_BITS 0x00000133UL
  465. #define CKA_SUBPRIME_BITS 0x00000134UL
  466. #define CKA_SUB_PRIME_BITS CKA_SUBPRIME_BITS
  467. /* (To retain backwards-compatibility) */
  468. #define CKA_VALUE_BITS 0x00000160UL
  469. #define CKA_VALUE_LEN 0x00000161UL
  470. /* CKA_EXTRACTABLE, CKA_LOCAL, CKA_NEVER_EXTRACTABLE,
  471. * CKA_ALWAYS_SENSITIVE, CKA_MODIFIABLE, CKA_ECDSA_PARAMS,
  472. * and CKA_EC_POINT are new for v2.0 */
  473. #define CKA_EXTRACTABLE 0x00000162UL
  474. #define CKA_LOCAL 0x00000163UL
  475. #define CKA_NEVER_EXTRACTABLE 0x00000164UL
  476. #define CKA_ALWAYS_SENSITIVE 0x00000165UL
  477. /* CKA_KEY_GEN_MECHANISM is new for v2.11 */
  478. #define CKA_KEY_GEN_MECHANISM 0x00000166UL
  479. #define CKA_MODIFIABLE 0x00000170UL
  480. /* New for 2.40 */
  481. #define CKA_COPYABLE 0x00000171UL
  482. #define CKA_DESTROYABLE 0x00000172UL
  483. /* CKA_ECDSA_PARAMS is deprecated in v2.11,
  484. * CKA_EC_PARAMS is preferred. */
  485. #define CKA_ECDSA_PARAMS 0x00000180UL
  486. #define CKA_EC_PARAMS 0x00000180UL
  487. #define CKA_EC_POINT 0x00000181UL
  488. /* CKA_SECONDARY_AUTH, CKA_AUTH_PIN_FLAGS,
  489. * are new for v2.10. Deprecated in v2.11 and onwards. */
  490. #define CKA_SECONDARY_AUTH 0x00000200UL
  491. #define CKA_AUTH_PIN_FLAGS 0x00000201UL
  492. /* CKA_ALWAYS_AUTHENTICATE ...
  493. * CKA_UNWRAP_TEMPLATE are new for v2.20 */
  494. #define CKA_ALWAYS_AUTHENTICATE 0x00000202UL
  495. #define CKA_WRAP_WITH_TRUSTED 0x00000210UL
  496. #define CKA_WRAP_TEMPLATE (CKF_ARRAY_ATTRIBUTE | 0x00000211UL)
  497. #define CKA_UNWRAP_TEMPLATE (CKF_ARRAY_ATTRIBUTE | 0x00000212UL)
  498. /* new for 2.40 */
  499. #define CKA_DERIVE_TEMPLATE (CKF_ARRAY_ATTRIBUTE | 0x00000213UL)
  500. #define CKA_OTP_FORMAT 0x00000220UL
  501. #define CKA_OTP_LENGTH 0x00000221UL
  502. #define CKA_OTP_TIME_INTERVAL 0x00000222UL
  503. #define CKA_OTP_USER_FRIENDLY_MODE 0x00000223UL
  504. #define CKA_OTP_CHALLENGE_REQUIREMENT 0x00000224UL
  505. #define CKA_OTP_TIME_REQUIREMENT 0x00000225UL
  506. #define CKA_OTP_COUNTER_REQUIREMENT 0x00000226UL
  507. #define CKA_OTP_PIN_REQUIREMENT 0x00000227UL
  508. #define CKA_OTP_COUNTER 0x0000022EUL
  509. #define CKA_OTP_TIME 0x0000022FUL
  510. #define CKA_OTP_USER_IDENTIFIER 0x0000022AUL
  511. #define CKA_OTP_SERVICE_IDENTIFIER 0x0000022BUL
  512. #define CKA_OTP_SERVICE_LOGO 0x0000022CUL
  513. #define CKA_OTP_SERVICE_LOGO_TYPE 0x0000022DUL
  514. #define CKA_GOSTR3410_PARAMS 0x00000250UL
  515. #define CKA_GOSTR3411_PARAMS 0x00000251UL
  516. #define CKA_GOST28147_PARAMS 0x00000252UL
  517. /* CKA_HW_FEATURE_TYPE, CKA_RESET_ON_INIT, and CKA_HAS_RESET
  518. * are new for v2.10 */
  519. #define CKA_HW_FEATURE_TYPE 0x00000300UL
  520. #define CKA_RESET_ON_INIT 0x00000301UL
  521. #define CKA_HAS_RESET 0x00000302UL
  522. /* The following attributes are new for v2.20 */
  523. #define CKA_PIXEL_X 0x00000400UL
  524. #define CKA_PIXEL_Y 0x00000401UL
  525. #define CKA_RESOLUTION 0x00000402UL
  526. #define CKA_CHAR_ROWS 0x00000403UL
  527. #define CKA_CHAR_COLUMNS 0x00000404UL
  528. #define CKA_COLOR 0x00000405UL
  529. #define CKA_BITS_PER_PIXEL 0x00000406UL
  530. #define CKA_CHAR_SETS 0x00000480UL
  531. #define CKA_ENCODING_METHODS 0x00000481UL
  532. #define CKA_MIME_TYPES 0x00000482UL
  533. #define CKA_MECHANISM_TYPE 0x00000500UL
  534. #define CKA_REQUIRED_CMS_ATTRIBUTES 0x00000501UL
  535. #define CKA_DEFAULT_CMS_ATTRIBUTES 0x00000502UL
  536. #define CKA_SUPPORTED_CMS_ATTRIBUTES 0x00000503UL
  537. #define CKA_ALLOWED_MECHANISMS (CKF_ARRAY_ATTRIBUTE | 0x00000600UL)
  538. /* new for v3.0 */
  539. #define CKA_PROFILE_ID 0x00000601UL
  540. #define CKA_X2RATCHET_BAG 0x00000602UL
  541. #define CKA_X2RATCHET_BAGSIZE 0x00000603UL
  542. #define CKA_X2RATCHET_BOBS1STMSG 0x00000604UL
  543. #define CKA_X2RATCHET_CKR 0x00000605UL
  544. #define CKA_X2RATCHET_CKS 0x00000606UL
  545. #define CKA_X2RATCHET_DHP 0x00000607UL
  546. #define CKA_X2RATCHET_DHR 0x00000608UL
  547. #define CKA_X2RATCHET_DHS 0x00000609UL
  548. #define CKA_X2RATCHET_HKR 0x0000060aUL
  549. #define CKA_X2RATCHET_HKS 0x0000060bUL
  550. #define CKA_X2RATCHET_ISALICE 0x0000060cUL
  551. #define CKA_X2RATCHET_NHKR 0x0000060dUL
  552. #define CKA_X2RATCHET_NHKS 0x0000060eUL
  553. #define CKA_X2RATCHET_NR 0x0000060fUL
  554. #define CKA_X2RATCHET_NS 0x00000610UL
  555. #define CKA_X2RATCHET_PNS 0x00000611UL
  556. #define CKA_X2RATCHET_RK 0x00000612UL
  557. #define CKA_VENDOR_DEFINED 0x80000000UL
  558. /* CK_ATTRIBUTE is a structure that includes the type, length
  559. * and value of an attribute */
  560. typedef struct CK_ATTRIBUTE {
  561. CK_ATTRIBUTE_TYPE type;
  562. CK_VOID_PTR pValue;
  563. /* ulValueLen went from CK_USHORT to CK_ULONG for v2.0 */
  564. CK_ULONG ulValueLen; /* in bytes */
  565. } CK_ATTRIBUTE;
  566. typedef CK_ATTRIBUTE CK_PTR CK_ATTRIBUTE_PTR;
  567. /* CK_DATE is a structure that defines a date */
  568. typedef struct CK_DATE {
  569. CK_CHAR year[4]; /* the year ("1900" - "9999") */
  570. CK_CHAR month[2]; /* the month ("01" - "12") */
  571. CK_CHAR day[2]; /* the day ("01" - "31") */
  572. } CK_DATE;
  573. /* CK_MECHANISM_TYPE is a value that identifies a mechanism
  574. * type */
  575. /* CK_MECHANISM_TYPE was changed from CK_USHORT to CK_ULONG for
  576. * v2.0 */
  577. typedef CK_ULONG CK_MECHANISM_TYPE;
  578. /* the following mechanism types are defined: */
  579. #define CKM_RSA_PKCS_KEY_PAIR_GEN 0x00000000UL
  580. #define CKM_RSA_PKCS 0x00000001UL
  581. #define CKM_RSA_9796 0x00000002UL
  582. #define CKM_RSA_X_509 0x00000003UL
  583. /* CKM_MD2_RSA_PKCS, CKM_MD5_RSA_PKCS, and CKM_SHA1_RSA_PKCS
  584. * are new for v2.0. They are mechanisms which hash and sign */
  585. #define CKM_MD2_RSA_PKCS 0x00000004UL
  586. #define CKM_MD5_RSA_PKCS 0x00000005UL
  587. #define CKM_SHA1_RSA_PKCS 0x00000006UL
  588. /* CKM_RIPEMD128_RSA_PKCS, CKM_RIPEMD160_RSA_PKCS, and
  589. * CKM_RSA_PKCS_OAEP are new for v2.10 */
  590. #define CKM_RIPEMD128_RSA_PKCS 0x00000007UL
  591. #define CKM_RIPEMD160_RSA_PKCS 0x00000008UL
  592. #define CKM_RSA_PKCS_OAEP 0x00000009UL
  593. /* CKM_RSA_X9_31_KEY_PAIR_GEN, CKM_RSA_X9_31, CKM_SHA1_RSA_X9_31,
  594. * CKM_RSA_PKCS_PSS, and CKM_SHA1_RSA_PKCS_PSS are new for v2.11 */
  595. #define CKM_RSA_X9_31_KEY_PAIR_GEN 0x0000000AUL
  596. #define CKM_RSA_X9_31 0x0000000BUL
  597. #define CKM_SHA1_RSA_X9_31 0x0000000CUL
  598. #define CKM_RSA_PKCS_PSS 0x0000000DUL
  599. #define CKM_SHA1_RSA_PKCS_PSS 0x0000000EUL
  600. #define CKM_DSA_KEY_PAIR_GEN 0x00000010UL
  601. #define CKM_DSA 0x00000011UL
  602. #define CKM_DSA_SHA1 0x00000012UL
  603. /* new for v2.40 */
  604. #define CKM_DSA_SHA224 0x00000013UL
  605. #define CKM_DSA_SHA256 0x00000014UL
  606. #define CKM_DSA_SHA384 0x00000015UL
  607. #define CKM_DSA_SHA512 0x00000016UL
  608. #define CKM_DSA_SHA3_224 0x00000018UL
  609. #define CKM_DSA_SHA3_256 0x00000019UL
  610. #define CKM_DSA_SHA3_384 0x0000001AUL
  611. #define CKM_DSA_SHA3_512 0x0000001BUL
  612. #define CKM_DH_PKCS_KEY_PAIR_GEN 0x00000020UL
  613. #define CKM_DH_PKCS_DERIVE 0x00000021UL
  614. /* CKM_X9_42_DH_KEY_PAIR_GEN, CKM_X9_42_DH_DERIVE,
  615. * CKM_X9_42_DH_HYBRID_DERIVE, and CKM_X9_42_MQV_DERIVE are new for
  616. * v2.11 */
  617. #define CKM_X9_42_DH_KEY_PAIR_GEN 0x00000030UL
  618. #define CKM_X9_42_DH_DERIVE 0x00000031UL
  619. #define CKM_X9_42_DH_HYBRID_DERIVE 0x00000032UL
  620. #define CKM_X9_42_MQV_DERIVE 0x00000033UL
  621. /* CKM_SHA256/384/512 are new for v2.20 */
  622. #define CKM_SHA256_RSA_PKCS 0x00000040UL
  623. #define CKM_SHA384_RSA_PKCS 0x00000041UL
  624. #define CKM_SHA512_RSA_PKCS 0x00000042UL
  625. #define CKM_SHA256_RSA_PKCS_PSS 0x00000043UL
  626. #define CKM_SHA384_RSA_PKCS_PSS 0x00000044UL
  627. #define CKM_SHA512_RSA_PKCS_PSS 0x00000045UL
  628. /* CKM_SHA224 new for v2.20 amendment 3 */
  629. #define CKM_SHA224_RSA_PKCS 0x00000046UL
  630. #define CKM_SHA224_RSA_PKCS_PSS 0x00000047UL
  631. /* new for v2.40 */
  632. #define CKM_SHA512_224 0x00000048UL
  633. #define CKM_SHA512_224_HMAC 0x00000049UL
  634. #define CKM_SHA512_224_HMAC_GENERAL 0x0000004AUL
  635. #define CKM_SHA512_224_KEY_DERIVATION 0x0000004BUL
  636. #define CKM_SHA512_256 0x0000004CUL
  637. #define CKM_SHA512_256_HMAC 0x0000004DUL
  638. #define CKM_SHA512_256_HMAC_GENERAL 0x0000004EUL
  639. #define CKM_SHA512_256_KEY_DERIVATION 0x0000004FUL
  640. #define CKM_SHA512_T 0x00000050UL
  641. #define CKM_SHA512_T_HMAC 0x00000051UL
  642. #define CKM_SHA512_T_HMAC_GENERAL 0x00000052UL
  643. #define CKM_SHA512_T_KEY_DERIVATION 0x00000053UL
  644. #define CKM_SHA3_256_RSA_PKCS 0x00000060UL
  645. #define CKM_SHA3_384_RSA_PKCS 0x00000061UL
  646. #define CKM_SHA3_512_RSA_PKCS 0x00000062UL
  647. #define CKM_SHA3_256_RSA_PKCS_PSS 0x00000063UL
  648. #define CKM_SHA3_384_RSA_PKCS_PSS 0x00000064UL
  649. #define CKM_SHA3_512_RSA_PKCS_PSS 0x00000065UL
  650. #define CKM_SHA3_224_RSA_PKCS 0x00000066UL
  651. #define CKM_SHA3_224_RSA_PKCS_PSS 0x00000067UL
  652. #define CKM_RC2_KEY_GEN 0x00000100UL
  653. #define CKM_RC2_ECB 0x00000101UL
  654. #define CKM_RC2_CBC 0x00000102UL
  655. #define CKM_RC2_MAC 0x00000103UL
  656. /* CKM_RC2_MAC_GENERAL and CKM_RC2_CBC_PAD are new for v2.0 */
  657. #define CKM_RC2_MAC_GENERAL 0x00000104UL
  658. #define CKM_RC2_CBC_PAD 0x00000105UL
  659. #define CKM_RC4_KEY_GEN 0x00000110UL
  660. #define CKM_RC4 0x00000111UL
  661. #define CKM_DES_KEY_GEN 0x00000120UL
  662. #define CKM_DES_ECB 0x00000121UL
  663. #define CKM_DES_CBC 0x00000122UL
  664. #define CKM_DES_MAC 0x00000123UL
  665. /* CKM_DES_MAC_GENERAL and CKM_DES_CBC_PAD are new for v2.0 */
  666. #define CKM_DES_MAC_GENERAL 0x00000124UL
  667. #define CKM_DES_CBC_PAD 0x00000125UL
  668. #define CKM_DES2_KEY_GEN 0x00000130UL
  669. #define CKM_DES3_KEY_GEN 0x00000131UL
  670. #define CKM_DES3_ECB 0x00000132UL
  671. #define CKM_DES3_CBC 0x00000133UL
  672. #define CKM_DES3_MAC 0x00000134UL
  673. /* CKM_DES3_MAC_GENERAL, CKM_DES3_CBC_PAD, CKM_CDMF_KEY_GEN,
  674. * CKM_CDMF_ECB, CKM_CDMF_CBC, CKM_CDMF_MAC,
  675. * CKM_CDMF_MAC_GENERAL, and CKM_CDMF_CBC_PAD are new for v2.0 */
  676. #define CKM_DES3_MAC_GENERAL 0x00000135UL
  677. #define CKM_DES3_CBC_PAD 0x00000136UL
  678. #define CKM_CDMF_KEY_GEN 0x00000140UL
  679. #define CKM_CDMF_ECB 0x00000141UL
  680. #define CKM_CDMF_CBC 0x00000142UL
  681. #define CKM_CDMF_MAC 0x00000143UL
  682. #define CKM_CDMF_MAC_GENERAL 0x00000144UL
  683. #define CKM_CDMF_CBC_PAD 0x00000145UL
  684. /* the following four DES mechanisms are new for v2.20 */
  685. #define CKM_DES_OFB64 0x00000150UL
  686. #define CKM_DES_OFB8 0x00000151UL
  687. #define CKM_DES_CFB64 0x00000152UL
  688. #define CKM_DES_CFB8 0x00000153UL
  689. #define CKM_MD2 0x00000200UL
  690. /* CKM_MD2_HMAC and CKM_MD2_HMAC_GENERAL are new for v2.0 */
  691. #define CKM_MD2_HMAC 0x00000201UL
  692. #define CKM_MD2_HMAC_GENERAL 0x00000202UL
  693. #define CKM_MD5 0x00000210UL
  694. /* CKM_MD5_HMAC and CKM_MD5_HMAC_GENERAL are new for v2.0 */
  695. #define CKM_MD5_HMAC 0x00000211UL
  696. #define CKM_MD5_HMAC_GENERAL 0x00000212UL
  697. #define CKM_SHA_1 0x00000220UL
  698. /* CKM_SHA_1_HMAC and CKM_SHA_1_HMAC_GENERAL are new for v2.0 */
  699. #define CKM_SHA_1_HMAC 0x00000221UL
  700. #define CKM_SHA_1_HMAC_GENERAL 0x00000222UL
  701. /* CKM_RIPEMD128, CKM_RIPEMD128_HMAC,
  702. * CKM_RIPEMD128_HMAC_GENERAL, CKM_RIPEMD160, CKM_RIPEMD160_HMAC,
  703. * and CKM_RIPEMD160_HMAC_GENERAL are new for v2.10 */
  704. #define CKM_RIPEMD128 0x00000230UL
  705. #define CKM_RIPEMD128_HMAC 0x00000231UL
  706. #define CKM_RIPEMD128_HMAC_GENERAL 0x00000232UL
  707. #define CKM_RIPEMD160 0x00000240UL
  708. #define CKM_RIPEMD160_HMAC 0x00000241UL
  709. #define CKM_RIPEMD160_HMAC_GENERAL 0x00000242UL
  710. /* CKM_SHA256/384/512 are new for v2.20 */
  711. #define CKM_SHA256 0x00000250UL
  712. #define CKM_SHA256_HMAC 0x00000251UL
  713. #define CKM_SHA256_HMAC_GENERAL 0x00000252UL
  714. #define CKM_SHA384 0x00000260UL
  715. #define CKM_SHA384_HMAC 0x00000261UL
  716. #define CKM_SHA384_HMAC_GENERAL 0x00000262UL
  717. #define CKM_SHA512 0x00000270UL
  718. #define CKM_SHA512_HMAC 0x00000271UL
  719. #define CKM_SHA512_HMAC_GENERAL 0x00000272UL
  720. /* CKM_SHA224 new for v2.20 amendment 3 */
  721. #define CKM_SHA224 0x00000255UL
  722. #define CKM_SHA224_HMAC 0x00000256UL
  723. #define CKM_SHA224_HMAC_GENERAL 0x00000257UL
  724. /* new for v2.40 */
  725. #define CKM_SECURID_KEY_GEN 0x00000280UL
  726. #define CKM_SECURID 0x00000282UL
  727. #define CKM_HOTP_KEY_GEN 0x00000290UL
  728. #define CKM_HOTP 0x00000291UL
  729. #define CKM_ACTI 0x000002A0UL
  730. #define CKM_ACTI_KEY_GEN 0x000002A1UL
  731. #define CKM_SHA3_256 0x000002B0UL
  732. #define CKM_SHA3_256_HMAC 0x000002B1UL
  733. #define CKM_SHA3_256_HMAC_GENERAL 0x000002B2UL
  734. #define CKM_SHA3_256_KEY_GEN 0x000002B3UL
  735. #define CKM_SHA3_224 0x000002B5UL
  736. #define CKM_SHA3_224_HMAC 0x000002B6UL
  737. #define CKM_SHA3_224_HMAC_GENERAL 0x000002B7UL
  738. #define CKM_SHA3_224_KEY_GEN 0x000002B8UL
  739. #define CKM_SHA3_384 0x000002C0UL
  740. #define CKM_SHA3_384_HMAC 0x000002C1UL
  741. #define CKM_SHA3_384_HMAC_GENERAL 0x000002C2UL
  742. #define CKM_SHA3_384_KEY_GEN 0x000002C3UL
  743. #define CKM_SHA3_512 0x000002D0UL
  744. #define CKM_SHA3_512_HMAC 0x000002D1UL
  745. #define CKM_SHA3_512_HMAC_GENERAL 0x000002D2UL
  746. #define CKM_SHA3_512_KEY_GEN 0x000002D3UL
  747. /* All of the following mechanisms are new for v2.0 */
  748. /* Note that CAST128 and CAST5 are the same algorithm */
  749. #define CKM_CAST_KEY_GEN 0x00000300UL
  750. #define CKM_CAST_ECB 0x00000301UL
  751. #define CKM_CAST_CBC 0x00000302UL
  752. #define CKM_CAST_MAC 0x00000303UL
  753. #define CKM_CAST_MAC_GENERAL 0x00000304UL
  754. #define CKM_CAST_CBC_PAD 0x00000305UL
  755. #define CKM_CAST3_KEY_GEN 0x00000310UL
  756. #define CKM_CAST3_ECB 0x00000311UL
  757. #define CKM_CAST3_CBC 0x00000312UL
  758. #define CKM_CAST3_MAC 0x00000313UL
  759. #define CKM_CAST3_MAC_GENERAL 0x00000314UL
  760. #define CKM_CAST3_CBC_PAD 0x00000315UL
  761. #define CKM_CAST5_KEY_GEN 0x00000320UL
  762. #define CKM_CAST128_KEY_GEN 0x00000320UL
  763. #define CKM_CAST5_ECB 0x00000321UL
  764. #define CKM_CAST128_ECB 0x00000321UL
  765. #define CKM_CAST5_CBC 0x00000322UL
  766. #define CKM_CAST128_CBC 0x00000322UL
  767. #define CKM_CAST5_MAC 0x00000323UL
  768. #define CKM_CAST128_MAC 0x00000323UL
  769. #define CKM_CAST5_MAC_GENERAL 0x00000324UL
  770. #define CKM_CAST128_MAC_GENERAL 0x00000324UL
  771. #define CKM_CAST5_CBC_PAD 0x00000325UL
  772. #define CKM_CAST128_CBC_PAD 0x00000325UL
  773. #define CKM_RC5_KEY_GEN 0x00000330UL
  774. #define CKM_RC5_ECB 0x00000331UL
  775. #define CKM_RC5_CBC 0x00000332UL
  776. #define CKM_RC5_MAC 0x00000333UL
  777. #define CKM_RC5_MAC_GENERAL 0x00000334UL
  778. #define CKM_RC5_CBC_PAD 0x00000335UL
  779. #define CKM_IDEA_KEY_GEN 0x00000340UL
  780. #define CKM_IDEA_ECB 0x00000341UL
  781. #define CKM_IDEA_CBC 0x00000342UL
  782. #define CKM_IDEA_MAC 0x00000343UL
  783. #define CKM_IDEA_MAC_GENERAL 0x00000344UL
  784. #define CKM_IDEA_CBC_PAD 0x00000345UL
  785. #define CKM_GENERIC_SECRET_KEY_GEN 0x00000350UL
  786. #define CKM_CONCATENATE_BASE_AND_KEY 0x00000360UL
  787. #define CKM_CONCATENATE_BASE_AND_DATA 0x00000362UL
  788. #define CKM_CONCATENATE_DATA_AND_BASE 0x00000363UL
  789. #define CKM_XOR_BASE_AND_DATA 0x00000364UL
  790. #define CKM_EXTRACT_KEY_FROM_KEY 0x00000365UL
  791. #define CKM_SSL3_PRE_MASTER_KEY_GEN 0x00000370UL
  792. #define CKM_SSL3_MASTER_KEY_DERIVE 0x00000371UL
  793. #define CKM_SSL3_KEY_AND_MAC_DERIVE 0x00000372UL
  794. /* CKM_SSL3_MASTER_KEY_DERIVE_DH, CKM_TLS_PRE_MASTER_KEY_GEN,
  795. * CKM_TLS_MASTER_KEY_DERIVE, CKM_TLS_KEY_AND_MAC_DERIVE, and
  796. * CKM_TLS_MASTER_KEY_DERIVE_DH are new for v2.11 */
  797. #define CKM_SSL3_MASTER_KEY_DERIVE_DH 0x00000373UL
  798. #define CKM_TLS_PRE_MASTER_KEY_GEN 0x00000374UL
  799. #define CKM_TLS_MASTER_KEY_DERIVE 0x00000375UL
  800. #define CKM_TLS_KEY_AND_MAC_DERIVE 0x00000376UL
  801. #define CKM_TLS_MASTER_KEY_DERIVE_DH 0x00000377UL
  802. /* CKM_TLS_PRF is new for v2.20 */
  803. #define CKM_TLS_PRF 0x00000378UL
  804. #define CKM_SSL3_MD5_MAC 0x00000380UL
  805. #define CKM_SSL3_SHA1_MAC 0x00000381UL
  806. #define CKM_MD5_KEY_DERIVATION 0x00000390UL
  807. #define CKM_MD2_KEY_DERIVATION 0x00000391UL
  808. #define CKM_SHA1_KEY_DERIVATION 0x00000392UL
  809. /* CKM_SHA256/384/512 are new for v2.20 */
  810. #define CKM_SHA256_KEY_DERIVATION 0x00000393UL
  811. #define CKM_SHA384_KEY_DERIVATION 0x00000394UL
  812. #define CKM_SHA512_KEY_DERIVATION 0x00000395UL
  813. /* CKM_SHA224 new for v2.20 amendment 3 */
  814. #define CKM_SHA224_KEY_DERIVATION 0x00000396UL
  815. /* new for v2.40 */
  816. #define CKM_SHA3_256_KEY_DERIVATION 0x00000397UL
  817. #define CKM_SHA3_224_KEY_DERIVATION 0x00000398UL
  818. #define CKM_SHA3_384_KEY_DERIVATION 0x00000399UL
  819. #define CKM_SHA3_512_KEY_DERIVATION 0x0000039AUL
  820. #define CKM_SHAKE_128_KEY_DERIVATION 0x0000039BUL
  821. #define CKM_SHAKE_256_KEY_DERIVATION 0x0000039CUL
  822. #define CKM_PBE_MD2_DES_CBC 0x000003A0UL
  823. #define CKM_PBE_MD5_DES_CBC 0x000003A1UL
  824. #define CKM_PBE_MD5_CAST_CBC 0x000003A2UL
  825. #define CKM_PBE_MD5_CAST3_CBC 0x000003A3UL
  826. #define CKM_PBE_MD5_CAST5_CBC 0x000003A4UL
  827. #define CKM_PBE_MD5_CAST128_CBC 0x000003A4UL
  828. #define CKM_PBE_SHA1_CAST5_CBC 0x000003A5UL
  829. #define CKM_PBE_SHA1_CAST128_CBC 0x000003A5UL
  830. #define CKM_PBE_SHA1_RC4_128 0x000003A6UL
  831. #define CKM_PBE_SHA1_RC4_40 0x000003A7UL
  832. #define CKM_PBE_SHA1_DES3_EDE_CBC 0x000003A8UL
  833. #define CKM_PBE_SHA1_DES2_EDE_CBC 0x000003A9UL
  834. #define CKM_PBE_SHA1_RC2_128_CBC 0x000003AAUL
  835. #define CKM_PBE_SHA1_RC2_40_CBC 0x000003ABUL
  836. /* CKM_PKCS5_PBKD2 is new for v2.10 */
  837. #define CKM_PKCS5_PBKD2 0x000003B0UL
  838. #define CKM_PBA_SHA1_WITH_SHA1_HMAC 0x000003C0UL
  839. /* WTLS mechanisms are new for v2.20 */
  840. #define CKM_WTLS_PRE_MASTER_KEY_GEN 0x000003D0UL
  841. #define CKM_WTLS_MASTER_KEY_DERIVE 0x000003D1UL
  842. #define CKM_WTLS_MASTER_KEY_DERIVE_DH_ECC 0x000003D2UL
  843. #define CKM_WTLS_PRF 0x000003D3UL
  844. #define CKM_WTLS_SERVER_KEY_AND_MAC_DERIVE 0x000003D4UL
  845. #define CKM_WTLS_CLIENT_KEY_AND_MAC_DERIVE 0x000003D5UL
  846. /* TLS 1.2 mechanisms are new for v2.40 */
  847. #define CKM_TLS12_MASTER_KEY_DERIVE 0x000003E0UL
  848. #define CKM_TLS12_KEY_AND_MAC_DERIVE 0x000003E1UL
  849. #define CKM_TLS12_MASTER_KEY_DERIVE_DH 0x000003E2UL
  850. #define CKM_TLS12_KEY_SAFE_DERIVE 0x000003E3UL
  851. #define CKM_TLS12_MAC 0x000003D8UL
  852. #define CKM_TLS12_KDF 0x000003D9UL
  853. #define CKM_TLS_MAC 0x000003E4UL
  854. #define CKM_TLS_KDF 0x000003E5UL
  855. #define CKM_KEY_WRAP_LYNKS 0x00000400UL
  856. #define CKM_KEY_WRAP_SET_OAEP 0x00000401UL
  857. /* CKM_CMS_SIG is new for v2.20 */
  858. #define CKM_CMS_SIG 0x00000500UL
  859. /* new for 2.40 */
  860. #define CKM_KIP_DERIVE 0x00000510UL
  861. #define CKM_KIP_WRAP 0x00000511UL
  862. #define CKM_KIP_MAC 0x00000512UL
  863. /* Fortezza mechanisms */
  864. #define CKM_SKIPJACK_KEY_GEN 0x00001000UL
  865. #define CKM_SKIPJACK_ECB64 0x00001001UL
  866. #define CKM_SKIPJACK_CBC64 0x00001002UL
  867. #define CKM_SKIPJACK_OFB64 0x00001003UL
  868. #define CKM_SKIPJACK_CFB64 0x00001004UL
  869. #define CKM_SKIPJACK_CFB32 0x00001005UL
  870. #define CKM_SKIPJACK_CFB16 0x00001006UL
  871. #define CKM_SKIPJACK_CFB8 0x00001007UL
  872. #define CKM_SKIPJACK_WRAP 0x00001008UL
  873. #define CKM_SKIPJACK_PRIVATE_WRAP 0x00001009UL
  874. #define CKM_SKIPJACK_RELAYX 0x0000100aUL
  875. #define CKM_KEA_KEY_PAIR_GEN 0x00001010UL
  876. #define CKM_KEA_KEY_DERIVE 0x00001011UL
  877. #define CKM_FORTEZZA_TIMESTAMP 0x00001020UL
  878. #define CKM_BATON_KEY_GEN 0x00001030UL
  879. #define CKM_BATON_ECB128 0x00001031UL
  880. #define CKM_BATON_ECB96 0x00001032UL
  881. #define CKM_BATON_CBC128 0x00001033UL
  882. #define CKM_BATON_COUNTER 0x00001034UL
  883. #define CKM_BATON_SHUFFLE 0x00001035UL
  884. #define CKM_BATON_WRAP 0x00001036UL
  885. /* CKM_ECDSA_KEY_PAIR_GEN is deprecated in v2.11,
  886. * CKM_EC_KEY_PAIR_GEN is preferred */
  887. #define CKM_ECDSA_KEY_PAIR_GEN 0x00001040UL
  888. #define CKM_EC_KEY_PAIR_GEN 0x00001040UL
  889. #define CKM_ECDSA 0x00001041UL
  890. #define CKM_ECDSA_SHA1 0x00001042UL
  891. /* new for v2.40 */
  892. #define CKM_ECDSA_SHA224 0x00001043UL
  893. #define CKM_ECDSA_SHA256 0x00001044UL
  894. #define CKM_ECDSA_SHA384 0x00001045UL
  895. #define CKM_ECDSA_SHA512 0x00001046UL
  896. #define CKM_EC_KEY_PAIR_GEN_W_EXTRA_BITS 0x0000140BUL
  897. /* CKM_ECDH1_DERIVE, CKM_ECDH1_COFACTOR_DERIVE, and CKM_ECMQV_DERIVE
  898. * are new for v2.11 */
  899. #define CKM_ECDH1_DERIVE 0x00001050UL
  900. #define CKM_ECDH1_COFACTOR_DERIVE 0x00001051UL
  901. #define CKM_ECMQV_DERIVE 0x00001052UL
  902. /* new for v2.40 */
  903. #define CKM_ECDH_AES_KEY_WRAP 0x00001053UL
  904. #define CKM_RSA_AES_KEY_WRAP 0x00001054UL
  905. #define CKM_JUNIPER_KEY_GEN 0x00001060UL
  906. #define CKM_JUNIPER_ECB128 0x00001061UL
  907. #define CKM_JUNIPER_CBC128 0x00001062UL
  908. #define CKM_JUNIPER_COUNTER 0x00001063UL
  909. #define CKM_JUNIPER_SHUFFLE 0x00001064UL
  910. #define CKM_JUNIPER_WRAP 0x00001065UL
  911. #define CKM_FASTHASH 0x00001070UL
  912. /* CKM_AES_KEY_GEN, CKM_AES_ECB, CKM_AES_CBC, CKM_AES_MAC,
  913. * CKM_AES_MAC_GENERAL, CKM_AES_CBC_PAD, CKM_DSA_PARAMETER_GEN,
  914. * CKM_DH_PKCS_PARAMETER_GEN, and CKM_X9_42_DH_PARAMETER_GEN are
  915. * new for v2.11 */
  916. #define CKM_AES_KEY_GEN 0x00001080UL
  917. #define CKM_AES_ECB 0x00001081UL
  918. #define CKM_AES_CBC 0x00001082UL
  919. #define CKM_AES_MAC 0x00001083UL
  920. #define CKM_AES_MAC_GENERAL 0x00001084UL
  921. #define CKM_AES_CBC_PAD 0x00001085UL
  922. /* new for v2.20 amendment 3 */
  923. #define CKM_AES_CTR 0x00001086UL
  924. /* new for v2.30 */
  925. #define CKM_AES_GCM 0x00001087UL
  926. #define CKM_AES_CCM 0x00001088UL
  927. #define CKM_AES_CTS 0x00001089UL
  928. /* AES-CMAC values copied from v2.40 errata 1 header file */
  929. #define CKM_AES_CMAC 0x0000108AUL
  930. #define CKM_AES_CMAC_GENERAL 0x0000108BUL
  931. #define CKM_AES_XCBC_MAC 0x0000108CUL
  932. #define CKM_AES_XCBC_MAC_96 0x0000108DUL
  933. /* BlowFish and TwoFish are new for v2.20 */
  934. #define CKM_BLOWFISH_KEY_GEN 0x00001090UL
  935. #define CKM_BLOWFISH_CBC 0x00001091UL
  936. #define CKM_TWOFISH_KEY_GEN 0x00001092UL
  937. #define CKM_TWOFISH_CBC 0x00001093UL
  938. /* new for v2.40 */
  939. #define CKM_BLOWFISH_CBC_PAD 0x00001094UL
  940. #define CKM_TWOFISH_CBC_PAD 0x00001095UL
  941. /* Camellia is proposed for v2.20 Amendment 3 */
  942. #define CKM_CAMELLIA_KEY_GEN 0x00000550UL
  943. #define CKM_CAMELLIA_ECB 0x00000551UL
  944. #define CKM_CAMELLIA_CBC 0x00000552UL
  945. #define CKM_CAMELLIA_MAC 0x00000553UL
  946. #define CKM_CAMELLIA_MAC_GENERAL 0x00000554UL
  947. #define CKM_CAMELLIA_CBC_PAD 0x00000555UL
  948. #define CKM_CAMELLIA_ECB_ENCRYPT_DATA 0x00000556UL
  949. #define CKM_CAMELLIA_CBC_ENCRYPT_DATA 0x00000557UL
  950. /* new for v2.40 */
  951. #define CKM_ARIA_KEY_GEN 0x00000560UL
  952. #define CKM_ARIA_ECB 0x00000561UL
  953. #define CKM_ARIA_CBC 0x00000562UL
  954. #define CKM_ARIA_MAC 0x00000563UL
  955. #define CKM_ARIA_MAC_GENERAL 0x00000564UL
  956. #define CKM_ARIA_CBC_PAD 0x00000565UL
  957. #define CKM_ARIA_ECB_ENCRYPT_DATA 0x00000566UL
  958. #define CKM_ARIA_CBC_ENCRYPT_DATA 0x00000567UL
  959. #define CKM_SEED_KEY_GEN 0x00000650UL
  960. #define CKM_SEED_ECB 0x00000651UL
  961. #define CKM_SEED_CBC 0x00000652UL
  962. #define CKM_SEED_MAC 0x00000653UL
  963. #define CKM_SEED_MAC_GENERAL 0x00000654UL
  964. #define CKM_SEED_CBC_PAD 0x00000655UL
  965. #define CKM_SEED_ECB_ENCRYPT_DATA 0x00000656UL
  966. #define CKM_SEED_CBC_ENCRYPT_DATA 0x00000657UL
  967. /* new for v2.40 */
  968. #define CKM_ECDSA_SHA3_224 0x00001047UL
  969. #define CKM_ECDSA_SHA3_256 0x00001048UL
  970. #define CKM_ECDSA_SHA3_384 0x00001049UL
  971. #define CKM_ECDSA_SHA3_512 0x0000104aUL
  972. #define CKM_EC_EDWARDS_KEY_PAIR_GEN 0x00001055UL
  973. #define CKM_EC_MONTGOMERY_KEY_PAIR_GEN 0x00001056UL
  974. #define CKM_EDDSA 0x00001057UL
  975. /* CKM_xxx_ENCRYPT_DATA mechanisms are new for v2.20 */
  976. #define CKM_DES_ECB_ENCRYPT_DATA 0x00001100UL
  977. #define CKM_DES_CBC_ENCRYPT_DATA 0x00001101UL
  978. #define CKM_DES3_ECB_ENCRYPT_DATA 0x00001102UL
  979. #define CKM_DES3_CBC_ENCRYPT_DATA 0x00001103UL
  980. #define CKM_AES_ECB_ENCRYPT_DATA 0x00001104UL
  981. #define CKM_AES_CBC_ENCRYPT_DATA 0x00001105UL
  982. #define CKM_GOSTR3410_KEY_PAIR_GEN 0x00001200UL
  983. #define CKM_GOSTR3410 0x00001201UL
  984. #define CKM_GOSTR3410_WITH_GOSTR3411 0x00001202UL
  985. #define CKM_GOSTR3410_KEY_WRAP 0x00001203UL
  986. #define CKM_GOSTR3410_DERIVE 0x00001204UL
  987. #define CKM_GOSTR3411 0x00001210UL
  988. #define CKM_GOSTR3411_HMAC 0x00001211UL
  989. #define CKM_GOST28147_KEY_GEN 0x00001220UL
  990. #define CKM_GOST28147_ECB 0x00001221UL
  991. #define CKM_GOST28147 0x00001222UL
  992. #define CKM_GOST28147_MAC 0x00001223UL
  993. #define CKM_GOST28147_KEY_WRAP 0x00001224UL
  994. /* new for v2.40 */
  995. #define CKM_CHACHA20_KEY_GEN 0x00001225UL
  996. #define CKM_CHACHA20 0x00001226UL
  997. #define CKM_POLY1305_KEY_GEN 0x00001227UL
  998. #define CKM_POLY1305 0x00001228UL
  999. #define CKM_DSA_PARAMETER_GEN 0x00002000UL
  1000. #define CKM_DH_PKCS_PARAMETER_GEN 0x00002001UL
  1001. #define CKM_X9_42_DH_PARAMETER_GEN 0x00002002UL
  1002. /* new for v2.40 */
  1003. #define CKM_DSA_PROBABILISTIC_PARAMETER_GEN 0x00002003UL
  1004. #define CKM_DSA_SHAWE_TAYLOR_PARAMETER_GEN 0x00002004UL
  1005. #define CKM_DSA_FIPS_G_GEN 0x00002005UL
  1006. #define CKM_AES_CFB1 0x00002108UL
  1007. #define CKM_AES_KEY_WRAP 0x00002109UL
  1008. #define CKM_AES_KEY_WRAP_PAD 0x0000210AUL
  1009. #define CKM_AES_KEY_WRAP_KWP 0x0000210BUL
  1010. /* CKM_SP800_108_xxx_KDF are new for v3.0 */
  1011. #define CKM_SP800_108_COUNTER_KDF 0x000003acUL
  1012. #define CKM_SP800_108_FEEDBACK_KDF 0x000003adUL
  1013. #define CKM_SP800_108_DOUBLE_PIPELINE_KDF 0x000003aeUL
  1014. /* new for v2.4 */
  1015. #define CKM_RSA_PKCS_TPM_1_1 0x00004001UL
  1016. #define CKM_RSA_PKCS_OAEP_TPM_1_1 0x00004002UL
  1017. #define CKM_SHA_1_KEY_GEN 0x00004003UL
  1018. #define CKM_SHA224_KEY_GEN 0x00004004UL
  1019. #define CKM_SHA256_KEY_GEN 0x00004005UL
  1020. #define CKM_SHA384_KEY_GEN 0x00004006UL
  1021. #define CKM_SHA512_KEY_GEN 0x00004007UL
  1022. #define CKM_SHA512_224_KEY_GEN 0x00004008UL
  1023. #define CKM_SHA512_256_KEY_GEN 0x00004009UL
  1024. #define CKM_SHA512_T_KEY_GEN 0x0000400aUL
  1025. /* new for v3.0 */
  1026. #define CKM_NULL 0x0000400bUL
  1027. #define CKM_BLAKE2B_160 0x0000400cUL
  1028. #define CKM_BLAKE2B_160_HMAC 0x0000400dUL
  1029. #define CKM_BLAKE2B_160_HMAC_GENERAL 0x0000400eUL
  1030. #define CKM_BLAKE2B_160_KEY_DERIVE 0x0000400fUL
  1031. #define CKM_BLAKE2B_160_KEY_GEN 0x00004010UL
  1032. #define CKM_BLAKE2B_256 0x00004011UL
  1033. #define CKM_BLAKE2B_256_HMAC 0x00004012UL
  1034. #define CKM_BLAKE2B_256_HMAC_GENERAL 0x00004013UL
  1035. #define CKM_BLAKE2B_256_KEY_DERIVE 0x00004014UL
  1036. #define CKM_BLAKE2B_256_KEY_GEN 0x00004015UL
  1037. #define CKM_BLAKE2B_384 0x00004016UL
  1038. #define CKM_BLAKE2B_384_HMAC 0x00004017UL
  1039. #define CKM_BLAKE2B_384_HMAC_GENERAL 0x00004018UL
  1040. #define CKM_BLAKE2B_384_KEY_DERIVE 0x00004019UL
  1041. #define CKM_BLAKE2B_384_KEY_GEN 0x0000401aUL
  1042. #define CKM_BLAKE2B_512 0x0000401bUL
  1043. #define CKM_BLAKE2B_512_HMAC 0x0000401cUL
  1044. #define CKM_BLAKE2B_512_HMAC_GENERAL 0x0000401dUL
  1045. #define CKM_BLAKE2B_512_KEY_DERIVE 0x0000401eUL
  1046. #define CKM_BLAKE2B_512_KEY_GEN 0x0000401fUL
  1047. #define CKM_SALSA20 0x00004020UL
  1048. #define CKM_CHACHA20_POLY1305 0x00004021UL
  1049. #define CKM_SALSA20_POLY1305 0x00004022UL
  1050. #define CKM_X3DH_INITIALIZE 0x00004023UL
  1051. #define CKM_X3DH_RESPOND 0x00004024UL
  1052. #define CKM_X2RATCHET_INITIALIZE 0x00004025UL
  1053. #define CKM_X2RATCHET_RESPOND 0x00004026UL
  1054. #define CKM_X2RATCHET_ENCRYPT 0x00004027UL
  1055. #define CKM_X2RATCHET_DECRYPT 0x00004028UL
  1056. #define CKM_XEDDSA 0x00004029UL
  1057. #define CKM_HKDF_DERIVE 0x0000402aUL
  1058. #define CKM_HKDF_DATA 0x0000402bUL
  1059. #define CKM_HKDF_KEY_GEN 0x0000402cUL
  1060. #define CKM_SALSA20_KEY_GEN 0x0000402dUL
  1061. #define CKM_VENDOR_DEFINED 0x80000000UL
  1062. typedef CK_MECHANISM_TYPE CK_PTR CK_MECHANISM_TYPE_PTR;
  1063. /* CK_MECHANISM is a structure that specifies a particular
  1064. * mechanism */
  1065. typedef struct CK_MECHANISM {
  1066. CK_MECHANISM_TYPE mechanism;
  1067. CK_VOID_PTR pParameter;
  1068. /* ulParameterLen was changed from CK_USHORT to CK_ULONG for
  1069. * v2.0 */
  1070. CK_ULONG ulParameterLen; /* in bytes */
  1071. } CK_MECHANISM;
  1072. typedef CK_MECHANISM CK_PTR CK_MECHANISM_PTR;
  1073. /* CK_MECHANISM_INFO provides information about a particular
  1074. * mechanism */
  1075. typedef struct CK_MECHANISM_INFO {
  1076. CK_ULONG ulMinKeySize;
  1077. CK_ULONG ulMaxKeySize;
  1078. CK_FLAGS flags;
  1079. } CK_MECHANISM_INFO;
  1080. /* The flags are defined as follows:
  1081. * Bit Flag Mask Meaning */
  1082. #define CKF_HW 0x00000001UL /* performed by HW */
  1083. /* Message interface Flags, new for v3.0 */
  1084. #define CKF_MESSAGE_ENCRYPT 0x00000002UL
  1085. #define CKF_MESSAGE_DECRYPT 0x00000004UL
  1086. #define CKF_MESSAGE_SIGN 0x00000008UL
  1087. #define CKF_MESSAGE_VERIFY 0x00000010UL
  1088. #define CKF_MULTI_MESSAGE 0x00000020UL
  1089. /* FindObjects (not for CK_MECHANISM_INFO, but for C_CancelSession) v3.0 */
  1090. #define CKF_FIND_OBJECTS 0x00000040UL
  1091. /* The flags CKF_ENCRYPT, CKF_DECRYPT, CKF_DIGEST, CKF_SIGN,
  1092. * CKG_SIGN_RECOVER, CKF_VERIFY, CKF_VERIFY_RECOVER,
  1093. * CKF_GENERATE, CKF_GENERATE_KEY_PAIR, CKF_WRAP, CKF_UNWRAP,
  1094. * and CKF_DERIVE are new for v2.0. They specify whether or not
  1095. * a mechanism can be used for a particular task */
  1096. #define CKF_ENCRYPT 0x00000100UL
  1097. #define CKF_DECRYPT 0x00000200UL
  1098. #define CKF_DIGEST 0x00000400UL
  1099. #define CKF_SIGN 0x00000800UL
  1100. #define CKF_SIGN_RECOVER 0x00001000UL
  1101. #define CKF_VERIFY 0x00002000
  1102. #define CKF_VERIFY_RECOVER 0x00004000UL
  1103. #define CKF_GENERATE 0x00008000UL
  1104. #define CKF_GENERATE_KEY_PAIR 0x00010000UL
  1105. #define CKF_WRAP 0x00020000UL
  1106. #define CKF_UNWRAP 0x00040000UL
  1107. #define CKF_DERIVE 0x00080000UL
  1108. /* CKF_EC_F_P, CKF_EC_F_2M, CKF_EC_ECPARAMETERS, CKF_EC_NAMEDCURVE,
  1109. * CKF_EC_UNCOMPRESS, and CKF_EC_COMPRESS are new for v2.11. They
  1110. * describe a token's EC capabilities not available in mechanism
  1111. * information. */
  1112. #define CKF_EC_F_P 0x00100000UL
  1113. #define CKF_EC_F_2M 0x00200000UL
  1114. #define CKF_EC_ECPARAMETERS 0x00400000UL
  1115. #define CKF_EC_OID 0x00800000UL
  1116. #define CKF_EC_NAMEDCURVE CKF_EC_OID /* renamed in v3.0 */
  1117. #define CKF_EC_UNCOMPRESS 0x01000000UL
  1118. #define CKF_EC_COMPRESS 0x02000000UL
  1119. #define CKF_EXTENSION 0x80000000UL /* FALSE for this version */
  1120. typedef CK_MECHANISM_INFO CK_PTR CK_MECHANISM_INFO_PTR;
  1121. /* CK_RV is a value that identifies the return value of a
  1122. * PKCS #11 function */
  1123. /* CK_RV was changed from CK_USHORT to CK_ULONG for v2.0 */
  1124. typedef CK_ULONG CK_RV;
  1125. #define CKR_OK 0x00000000UL
  1126. #define CKR_CANCEL 0x00000001UL
  1127. #define CKR_HOST_MEMORY 0x00000002UL
  1128. #define CKR_SLOT_ID_INVALID 0x00000003UL
  1129. /* CKR_FLAGS_INVALID was removed for v2.0 */
  1130. /* CKR_GENERAL_ERROR and CKR_FUNCTION_FAILED are new for v2.0 */
  1131. #define CKR_GENERAL_ERROR 0x00000005UL
  1132. #define CKR_FUNCTION_FAILED 0x00000006UL
  1133. /* CKR_ARGUMENTS_BAD, CKR_NO_EVENT, CKR_NEED_TO_CREATE_THREADS,
  1134. * and CKR_CANT_LOCK are new for v2.01 */
  1135. #define CKR_ARGUMENTS_BAD 0x00000007UL
  1136. #define CKR_NO_EVENT 0x00000008UL
  1137. #define CKR_NEED_TO_CREATE_THREADS 0x00000009UL
  1138. #define CKR_CANT_LOCK 0x0000000AUL
  1139. #define CKR_ATTRIBUTE_READ_ONLY 0x00000010UL
  1140. #define CKR_ATTRIBUTE_SENSITIVE 0x00000011UL
  1141. #define CKR_ATTRIBUTE_TYPE_INVALID 0x00000012UL
  1142. #define CKR_ATTRIBUTE_VALUE_INVALID 0x00000013UL
  1143. /* new for v3.0 */
  1144. #define CKR_ACTION_PROHIBITED 0x0000001BUL
  1145. #define CKR_DATA_INVALID 0x00000020UL
  1146. #define CKR_DATA_LEN_RANGE 0x00000021UL
  1147. #define CKR_DEVICE_ERROR 0x00000030UL
  1148. #define CKR_DEVICE_MEMORY 0x00000031UL
  1149. #define CKR_DEVICE_REMOVED 0x00000032UL
  1150. #define CKR_ENCRYPTED_DATA_INVALID 0x00000040UL
  1151. #define CKR_ENCRYPTED_DATA_LEN_RANGE 0x00000041UL
  1152. #define CKR_FUNCTION_CANCELED 0x00000050UL
  1153. #define CKR_FUNCTION_NOT_PARALLEL 0x00000051UL
  1154. /* CKR_FUNCTION_NOT_SUPPORTED is new for v2.0 */
  1155. #define CKR_FUNCTION_NOT_SUPPORTED 0x00000054UL
  1156. #define CKR_KEY_HANDLE_INVALID 0x00000060UL
  1157. /* CKR_KEY_SENSITIVE was removed for v2.0 */
  1158. #define CKR_KEY_SIZE_RANGE 0x00000062UL
  1159. #define CKR_KEY_TYPE_INCONSISTENT 0x00000063UL
  1160. /* CKR_KEY_NOT_NEEDED, CKR_KEY_CHANGED, CKR_KEY_NEEDED,
  1161. * CKR_KEY_INDIGESTIBLE, CKR_KEY_FUNCTION_NOT_PERMITTED,
  1162. * CKR_KEY_NOT_WRAPPABLE, and CKR_KEY_UNEXTRACTABLE are new for
  1163. * v2.0 */
  1164. #define CKR_KEY_NOT_NEEDED 0x00000064UL
  1165. #define CKR_KEY_CHANGED 0x00000065UL
  1166. #define CKR_KEY_NEEDED 0x00000066UL
  1167. #define CKR_KEY_INDIGESTIBLE 0x00000067UL
  1168. #define CKR_KEY_FUNCTION_NOT_PERMITTED 0x00000068UL
  1169. #define CKR_KEY_NOT_WRAPPABLE 0x00000069UL
  1170. #define CKR_KEY_UNEXTRACTABLE 0x0000006AUL
  1171. #define CKR_MECHANISM_INVALID 0x00000070UL
  1172. #define CKR_MECHANISM_PARAM_INVALID 0x00000071UL
  1173. /* CKR_OBJECT_CLASS_INCONSISTENT and CKR_OBJECT_CLASS_INVALID
  1174. * were removed for v2.0 */
  1175. #define CKR_OBJECT_HANDLE_INVALID 0x00000082UL
  1176. #define CKR_OPERATION_ACTIVE 0x00000090UL
  1177. #define CKR_OPERATION_NOT_INITIALIZED 0x00000091UL
  1178. #define CKR_PIN_INCORRECT 0x000000A0UL
  1179. #define CKR_PIN_INVALID 0x000000A1UL
  1180. #define CKR_PIN_LEN_RANGE 0x000000A2UL
  1181. /* CKR_PIN_EXPIRED and CKR_PIN_LOCKED are new for v2.0 */
  1182. #define CKR_PIN_EXPIRED 0x000000A3UL
  1183. #define CKR_PIN_LOCKED 0x000000A4UL
  1184. #define CKR_SESSION_CLOSED 0x000000B0UL
  1185. #define CKR_SESSION_COUNT 0x000000B1UL
  1186. #define CKR_SESSION_HANDLE_INVALID 0x000000B3UL
  1187. #define CKR_SESSION_PARALLEL_NOT_SUPPORTED 0x000000B4UL
  1188. #define CKR_SESSION_READ_ONLY 0x000000B5UL
  1189. #define CKR_SESSION_EXISTS 0x000000B6UL
  1190. /* CKR_SESSION_READ_ONLY_EXISTS and
  1191. * CKR_SESSION_READ_WRITE_SO_EXISTS are new for v2.0 */
  1192. #define CKR_SESSION_READ_ONLY_EXISTS 0x000000B7UL
  1193. #define CKR_SESSION_READ_WRITE_SO_EXISTS 0x000000B8UL
  1194. #define CKR_SIGNATURE_INVALID 0x000000C0UL
  1195. #define CKR_SIGNATURE_LEN_RANGE 0x000000C1UL
  1196. #define CKR_TEMPLATE_INCOMPLETE 0x000000D0UL
  1197. #define CKR_TEMPLATE_INCONSISTENT 0x000000D1UL
  1198. #define CKR_TOKEN_NOT_PRESENT 0x000000E0UL
  1199. #define CKR_TOKEN_NOT_RECOGNIZED 0x000000E1UL
  1200. #define CKR_TOKEN_WRITE_PROTECTED 0x000000E2UL
  1201. #define CKR_UNWRAPPING_KEY_HANDLE_INVALID 0x000000F0UL
  1202. #define CKR_UNWRAPPING_KEY_SIZE_RANGE 0x000000F1UL
  1203. #define CKR_UNWRAPPING_KEY_TYPE_INCONSISTENT 0x000000F2UL
  1204. #define CKR_USER_ALREADY_LOGGED_IN 0x00000100UL
  1205. #define CKR_USER_NOT_LOGGED_IN 0x00000101UL
  1206. #define CKR_USER_PIN_NOT_INITIALIZED 0x00000102UL
  1207. #define CKR_USER_TYPE_INVALID 0x00000103UL
  1208. /* CKR_USER_ANOTHER_ALREADY_LOGGED_IN and CKR_USER_TOO_MANY_TYPES
  1209. * are new to v2.01 */
  1210. #define CKR_USER_ANOTHER_ALREADY_LOGGED_IN 0x00000104UL
  1211. #define CKR_USER_TOO_MANY_TYPES 0x00000105UL
  1212. #define CKR_WRAPPED_KEY_INVALID 0x00000110UL
  1213. #define CKR_WRAPPED_KEY_LEN_RANGE 0x00000112UL
  1214. #define CKR_WRAPPING_KEY_HANDLE_INVALID 0x00000113UL
  1215. #define CKR_WRAPPING_KEY_SIZE_RANGE 0x00000114UL
  1216. #define CKR_WRAPPING_KEY_TYPE_INCONSISTENT 0x00000115UL
  1217. #define CKR_RANDOM_SEED_NOT_SUPPORTED 0x00000120UL
  1218. /* This is new to v2.0 */
  1219. #define CKR_RANDOM_NO_RNG 0x00000121UL
  1220. /* This is new to v2.11 */
  1221. #define CKR_DOMAIN_PARAMS_INVALID 0x00000130UL
  1222. /* This is new to v2.40 */
  1223. #define CKR_CURVE_NOT_SUPPORTED 0x00000140UL
  1224. /* These are new to v2.0 */
  1225. #define CKR_BUFFER_TOO_SMALL 0x00000150UL
  1226. #define CKR_SAVED_STATE_INVALID 0x00000160UL
  1227. #define CKR_INFORMATION_SENSITIVE 0x00000170UL
  1228. #define CKR_STATE_UNSAVEABLE 0x00000180UL
  1229. /* These are new to v2.01 */
  1230. #define CKR_CRYPTOKI_NOT_INITIALIZED 0x00000190UL
  1231. #define CKR_CRYPTOKI_ALREADY_INITIALIZED 0x00000191UL
  1232. #define CKR_MUTEX_BAD 0x000001A0UL
  1233. #define CKR_MUTEX_NOT_LOCKED 0x000001A1UL
  1234. /* These are new to v2.40 */
  1235. #define CKR_NEW_PIN_MODE 0x000001B0UL
  1236. #define CKR_NEXT_OTP 0x000001B1UL
  1237. #define CKR_EXCEEDED_MAX_ITERATIONS 0x000001B5UL
  1238. #define CKR_FIPS_SELF_TEST_FAILED 0x000001B6UL
  1239. #define CKR_LIBRARY_LOAD_FAILED 0x000001B7UL
  1240. #define CKR_PIN_TOO_WEAK 0x000001B8UL
  1241. #define CKR_PUBLIC_KEY_INVALID 0x000001B
  1242. /* This is new to v2.20 */
  1243. #define CKR_FUNCTION_REJECTED 0x00000200UL
  1244. /* This is new to v3.0 */
  1245. #define CKR_TOKEN_RESOURCE_EXCEEDED 0x00000201UL
  1246. #define CKR_OPERATION_CANCEL_FAILED 0x00000202UL
  1247. #define CKR_VENDOR_DEFINED 0x80000000UL
  1248. /* CK_NOTIFY is an application callback that processes events */
  1249. typedef CK_CALLBACK_FUNCTION(CK_RV, CK_NOTIFY)(
  1250. CK_SESSION_HANDLE hSession, /* the session's handle */
  1251. CK_NOTIFICATION event,
  1252. CK_VOID_PTR pApplication /* passed to C_OpenSession */
  1253. );
  1254. /* CK_FUNCTION_LIST is a structure holding a PKCS #11 spec
  1255. * version and pointers of appropriate types to all the
  1256. * PKCS #11 functions */
  1257. /* CK_FUNCTION_LIST is new for v2.0 */
  1258. typedef struct CK_FUNCTION_LIST CK_FUNCTION_LIST;
  1259. typedef CK_FUNCTION_LIST CK_PTR CK_FUNCTION_LIST_PTR;
  1260. typedef CK_FUNCTION_LIST_PTR CK_PTR CK_FUNCTION_LIST_PTR_PTR;
  1261. /* These are new for v3.0 */
  1262. typedef struct CK_FUNCTION_LIST_3_0 CK_FUNCTION_LIST_3_0;
  1263. typedef CK_FUNCTION_LIST_3_0 CK_PTR CK_FUNCTION_LIST_3_0_PTR;
  1264. typedef CK_FUNCTION_LIST_3_0_PTR CK_PTR CK_FUNCTION_LIST_3_0_PTR_PTR;
  1265. /* Interfaces are new in v3.0 */
  1266. typedef struct CK_INTERFACE {
  1267. CK_CHAR *pInterfaceName;
  1268. CK_VOID_PTR pFunctionList;
  1269. CK_FLAGS flags;
  1270. } CK_INTERFACE;
  1271. typedef CK_INTERFACE CK_PTR CK_INTERFACE_PTR;
  1272. typedef CK_INTERFACE_PTR CK_PTR CK_INTERFACE_PTR_PTR;
  1273. #define CKF_END_OF_MESSAGE 0x00000001UL
  1274. #define CKF_INTERFACE_FORK_SAFE 0x00000001UL
  1275. /* CK_CREATEMUTEX is an application callback for creating a
  1276. * mutex object */
  1277. typedef CK_CALLBACK_FUNCTION(CK_RV, CK_CREATEMUTEX)(
  1278. CK_VOID_PTR_PTR ppMutex /* location to receive ptr to mutex */
  1279. );
  1280. /* CK_DESTROYMUTEX is an application callback for destroying a
  1281. * mutex object */
  1282. typedef CK_CALLBACK_FUNCTION(CK_RV, CK_DESTROYMUTEX)(
  1283. CK_VOID_PTR pMutex /* pointer to mutex */
  1284. );
  1285. /* CK_LOCKMUTEX is an application callback for locking a mutex */
  1286. typedef CK_CALLBACK_FUNCTION(CK_RV, CK_LOCKMUTEX)(
  1287. CK_VOID_PTR pMutex /* pointer to mutex */
  1288. );
  1289. /* CK_UNLOCKMUTEX is an application callback for unlocking a
  1290. * mutex */
  1291. typedef CK_CALLBACK_FUNCTION(CK_RV, CK_UNLOCKMUTEX)(
  1292. CK_VOID_PTR pMutex /* pointer to mutex */
  1293. );
  1294. /* CK_C_INITIALIZE_ARGS provides the optional arguments to
  1295. * C_Initialize */
  1296. typedef struct CK_C_INITIALIZE_ARGS {
  1297. CK_CREATEMUTEX CreateMutex;
  1298. CK_DESTROYMUTEX DestroyMutex;
  1299. CK_LOCKMUTEX LockMutex;
  1300. CK_UNLOCKMUTEX UnlockMutex;
  1301. CK_FLAGS flags;
  1302. /* The official PKCS #11 spec does not have a 'LibraryParameters' field, but
  1303. * a reserved field. NSS needs a way to pass instance-specific information
  1304. * to the library (like where to find its config files, etc). This
  1305. * information is usually provided by the installer and passed uninterpreted
  1306. * by NSS to the library, though NSS does know the specifics of the softoken
  1307. * version of this parameter. Most compliant PKCS#11 modules expect this
  1308. * parameter to be NULL, and will return CKR_ARGUMENTS_BAD from
  1309. * C_Initialize if Library parameters is supplied. */
  1310. CK_CHAR_PTR *LibraryParameters;
  1311. /* This field is only present if the LibraryParameters is not NULL. It must
  1312. * be NULL in all cases */
  1313. CK_VOID_PTR pReserved;
  1314. } CK_C_INITIALIZE_ARGS;
  1315. /* flags: bit flags that provide capabilities of the slot
  1316. * Bit Flag Mask Meaning
  1317. */
  1318. #define CKF_LIBRARY_CANT_CREATE_OS_THREADS 0x00000001UL
  1319. #define CKF_OS_LOCKING_OK 0x00000002UL
  1320. typedef CK_C_INITIALIZE_ARGS CK_PTR CK_C_INITIALIZE_ARGS_PTR;
  1321. /* additional flags for parameters to functions */
  1322. /* CKF_DONT_BLOCK is for the function C_WaitForSlotEvent */
  1323. #define CKF_DONT_BLOCK 1
  1324. /* CK_RSA_PKCS_OAEP_MGF_TYPE is new for v2.10.
  1325. * CK_RSA_PKCS_OAEP_MGF_TYPE is used to indicate the Message
  1326. * Generation Function (MGF) applied to a message block when
  1327. * formatting a message block for the PKCS #1 OAEP encryption
  1328. * scheme. */
  1329. typedef CK_ULONG CK_RSA_PKCS_MGF_TYPE;
  1330. typedef CK_RSA_PKCS_MGF_TYPE CK_PTR CK_RSA_PKCS_MGF_TYPE_PTR;
  1331. /* The following MGFs are defined */
  1332. /* CKG_MGF1_SHA256, CKG_MGF1_SHA384, and CKG_MGF1_SHA512
  1333. * are new for v2.20 */
  1334. #define CKG_MGF1_SHA1 0x00000001UL
  1335. #define CKG_MGF1_SHA256 0x00000002UL
  1336. #define CKG_MGF1_SHA384 0x00000003UL
  1337. #define CKG_MGF1_SHA512 0x00000004UL
  1338. /* v2.20 amendment 3 */
  1339. #define CKG_MGF1_SHA224 0x00000005UL
  1340. /* v2.40 */
  1341. #define CKG_MGF1_SHA3_224 0x00000006UL
  1342. #define CKG_MGF1_SHA3_256 0x00000007UL
  1343. #define CKG_MGF1_SHA3_384 0x00000008UL
  1344. #define CKG_MGF1_SHA3_512 0x00000009UL
  1345. /* CK_RSA_PKCS_OAEP_SOURCE_TYPE is new for v2.10.
  1346. * CK_RSA_PKCS_OAEP_SOURCE_TYPE is used to indicate the source
  1347. * of the encoding parameter when formatting a message block
  1348. * for the PKCS #1 OAEP encryption scheme. */
  1349. typedef CK_ULONG CK_RSA_PKCS_OAEP_SOURCE_TYPE;
  1350. typedef CK_RSA_PKCS_OAEP_SOURCE_TYPE CK_PTR CK_RSA_PKCS_OAEP_SOURCE_TYPE_PTR;
  1351. /* The following encoding parameter sources are defined */
  1352. #define CKZ_DATA_SPECIFIED 0x00000001UL
  1353. /* CK_RSA_PKCS_OAEP_PARAMS is new for v2.10.
  1354. * CK_RSA_PKCS_OAEP_PARAMS provides the parameters to the
  1355. * CKM_RSA_PKCS_OAEP mechanism. */
  1356. typedef struct CK_RSA_PKCS_OAEP_PARAMS {
  1357. CK_MECHANISM_TYPE hashAlg;
  1358. CK_RSA_PKCS_MGF_TYPE mgf;
  1359. CK_RSA_PKCS_OAEP_SOURCE_TYPE source;
  1360. CK_VOID_PTR pSourceData;
  1361. CK_ULONG ulSourceDataLen;
  1362. } CK_RSA_PKCS_OAEP_PARAMS;
  1363. typedef CK_RSA_PKCS_OAEP_PARAMS CK_PTR CK_RSA_PKCS_OAEP_PARAMS_PTR;
  1364. /* CK_RSA_PKCS_PSS_PARAMS is new for v2.11.
  1365. * CK_RSA_PKCS_PSS_PARAMS provides the parameters to the
  1366. * CKM_RSA_PKCS_PSS mechanism(s). */
  1367. typedef struct CK_RSA_PKCS_PSS_PARAMS {
  1368. CK_MECHANISM_TYPE hashAlg;
  1369. CK_RSA_PKCS_MGF_TYPE mgf;
  1370. CK_ULONG sLen;
  1371. } CK_RSA_PKCS_PSS_PARAMS;
  1372. typedef CK_RSA_PKCS_PSS_PARAMS CK_PTR CK_RSA_PKCS_PSS_PARAMS_PTR;
  1373. /* CK_EC_KDF_TYPE is new for v2.11. */
  1374. typedef CK_ULONG CK_EC_KDF_TYPE;
  1375. /* The following EC Key Derivation Functions are defined */
  1376. #define CKD_NULL 0x00000001UL
  1377. #define CKD_SHA1_KDF 0x00000002UL
  1378. #define CKD_SHA224_KDF 0x00000005UL
  1379. #define CKD_SHA256_KDF 0x00000006UL
  1380. #define CKD_SHA384_KDF 0x00000007UL
  1381. #define CKD_SHA512_KDF 0x00000008UL
  1382. /* new for v2.40 */
  1383. #define CKD_CPDIVERSIFY_KDF 0x00000009UL
  1384. #define CKD_SHA3_224_KDF 0x0000000AUL
  1385. #define CKD_SHA3_256_KDF 0x0000000BUL
  1386. #define CKD_SHA3_384_KDF 0x0000000CUL
  1387. #define CKD_SHA3_512_KDF 0x0000000DUL
  1388. /* new for v3.0 */
  1389. #define CKD_SHA1_KDF_SP800 0x0000000EUL
  1390. #define CKD_SHA224_KDF_SP800 0x0000000FUL
  1391. #define CKD_SHA256_KDF_SP800 0x00000010UL
  1392. #define CKD_SHA384_KDF_SP800 0x00000011UL
  1393. #define CKD_SHA512_KDF_SP800 0x00000012UL
  1394. #define CKD_SHA3_224_KDF_SP800 0x00000013UL
  1395. #define CKD_SHA3_256_KDF_SP800 0x00000014UL
  1396. #define CKD_SHA3_384_KDF_SP800 0x00000015UL
  1397. #define CKD_SHA3_512_KDF_SP800 0x00000016UL
  1398. #define CKD_BLAKE2B_160_KDF 0x00000017UL
  1399. #define CKD_BLAKE2B_256_KDF 0x00000018UL
  1400. #define CKD_BLAKE2B_384_KDF 0x00000019UL
  1401. #define CKD_BLAKE2B_512_KDF 0x0000001aUL
  1402. /* CK_ECDH1_DERIVE_PARAMS is new for v2.11.
  1403. * CK_ECDH1_DERIVE_PARAMS provides the parameters to the
  1404. * CKM_ECDH1_DERIVE and CKM_ECDH1_COFACTOR_DERIVE mechanisms,
  1405. * where each party contributes one key pair.
  1406. */
  1407. typedef struct CK_ECDH1_DERIVE_PARAMS {
  1408. CK_EC_KDF_TYPE kdf;
  1409. CK_ULONG ulSharedDataLen;
  1410. CK_BYTE_PTR pSharedData;
  1411. CK_ULONG ulPublicDataLen;
  1412. CK_BYTE_PTR pPublicData;
  1413. } CK_ECDH1_DERIVE_PARAMS;
  1414. typedef CK_ECDH1_DERIVE_PARAMS CK_PTR CK_ECDH1_DERIVE_PARAMS_PTR;
  1415. /* CK_ECDH2_DERIVE_PARAMS is new for v2.11.
  1416. * CK_ECDH2_DERIVE_PARAMS provides the parameters to the
  1417. * CKM_ECMQV_DERIVE mechanism, where each party contributes two key pairs. */
  1418. typedef struct CK_ECDH2_DERIVE_PARAMS {
  1419. CK_EC_KDF_TYPE kdf;
  1420. CK_ULONG ulSharedDataLen;
  1421. CK_BYTE_PTR pSharedData;
  1422. CK_ULONG ulPublicDataLen;
  1423. CK_BYTE_PTR pPublicData;
  1424. CK_ULONG ulPrivateDataLen;
  1425. CK_OBJECT_HANDLE hPrivateData;
  1426. CK_ULONG ulPublicDataLen2;
  1427. CK_BYTE_PTR pPublicData2;
  1428. } CK_ECDH2_DERIVE_PARAMS;
  1429. typedef CK_ECDH2_DERIVE_PARAMS CK_PTR CK_ECDH2_DERIVE_PARAMS_PTR;
  1430. typedef struct CK_ECMQV_DERIVE_PARAMS {
  1431. CK_EC_KDF_TYPE kdf;
  1432. CK_ULONG ulSharedDataLen;
  1433. CK_BYTE_PTR pSharedData;
  1434. CK_ULONG ulPublicDataLen;
  1435. CK_BYTE_PTR pPublicData;
  1436. CK_ULONG ulPrivateDataLen;
  1437. CK_OBJECT_HANDLE hPrivateData;
  1438. CK_ULONG ulPublicDataLen2;
  1439. CK_BYTE_PTR pPublicData2;
  1440. CK_OBJECT_HANDLE publicKey;
  1441. } CK_ECMQV_DERIVE_PARAMS;
  1442. typedef CK_ECMQV_DERIVE_PARAMS CK_PTR CK_ECMQV_DERIVE_PARAMS_PTR;
  1443. /* Typedefs and defines for the CKM_X9_42_DH_KEY_PAIR_GEN and the
  1444. * CKM_X9_42_DH_PARAMETER_GEN mechanisms (new for PKCS #11 v2.11) */
  1445. typedef CK_ULONG CK_X9_42_DH_KDF_TYPE;
  1446. typedef CK_X9_42_DH_KDF_TYPE CK_PTR CK_X9_42_DH_KDF_TYPE_PTR;
  1447. /* The following X9.42 DH key derivation functions are defined
  1448. (besides CKD_NULL already defined : */
  1449. #define CKD_SHA1_KDF_ASN1 0x00000003UL
  1450. #define CKD_SHA1_KDF_CONCATENATE 0x00000004UL
  1451. /* CK_X9_42_DH1_DERIVE_PARAMS is new for v2.11.
  1452. * CK_X9_42_DH1_DERIVE_PARAMS provides the parameters to the
  1453. * CKM_X9_42_DH_DERIVE key derivation mechanism, where each party
  1454. * contributes one key pair */
  1455. typedef struct CK_X9_42_DH1_DERIVE_PARAMS {
  1456. CK_X9_42_DH_KDF_TYPE kdf;
  1457. CK_ULONG ulOtherInfoLen;
  1458. CK_BYTE_PTR pOtherInfo;
  1459. CK_ULONG ulPublicDataLen;
  1460. CK_BYTE_PTR pPublicData;
  1461. } CK_X9_42_DH1_DERIVE_PARAMS;
  1462. typedef struct CK_X9_42_DH1_DERIVE_PARAMS CK_PTR CK_X9_42_DH1_DERIVE_PARAMS_PTR;
  1463. /* CK_X9_42_DH2_DERIVE_PARAMS is new for v2.11.
  1464. * CK_X9_42_DH2_DERIVE_PARAMS provides the parameters to the
  1465. * CKM_X9_42_DH_HYBRID_DERIVE and CKM_X9_42_MQV_DERIVE key derivation
  1466. * mechanisms, where each party contributes two key pairs */
  1467. typedef struct CK_X9_42_DH2_DERIVE_PARAMS {
  1468. CK_X9_42_DH_KDF_TYPE kdf;
  1469. CK_ULONG ulOtherInfoLen;
  1470. CK_BYTE_PTR pOtherInfo;
  1471. CK_ULONG ulPublicDataLen;
  1472. CK_BYTE_PTR pPublicData;
  1473. CK_ULONG ulPrivateDataLen;
  1474. CK_OBJECT_HANDLE hPrivateData;
  1475. CK_ULONG ulPublicDataLen2;
  1476. CK_BYTE_PTR pPublicData2;
  1477. } CK_X9_42_DH2_DERIVE_PARAMS;
  1478. typedef CK_X9_42_DH2_DERIVE_PARAMS CK_PTR CK_X9_42_DH2_DERIVE_PARAMS_PTR;
  1479. typedef struct CK_X9_42_MQV_DERIVE_PARAMS {
  1480. CK_X9_42_DH_KDF_TYPE kdf;
  1481. CK_ULONG ulOtherInfoLen;
  1482. CK_BYTE_PTR pOtherInfo;
  1483. CK_ULONG ulPublicDataLen;
  1484. CK_BYTE_PTR pPublicData;
  1485. CK_ULONG ulPrivateDataLen;
  1486. CK_OBJECT_HANDLE hPrivateData;
  1487. CK_ULONG ulPublicDataLen2;
  1488. CK_BYTE_PTR pPublicData2;
  1489. CK_OBJECT_HANDLE publicKey;
  1490. } CK_X9_42_MQV_DERIVE_PARAMS;
  1491. typedef CK_X9_42_MQV_DERIVE_PARAMS CK_PTR CK_X9_42_MQV_DERIVE_PARAMS_PTR;
  1492. /* CK_KEA_DERIVE_PARAMS provides the parameters to the
  1493. * CKM_KEA_DERIVE mechanism */
  1494. /* CK_KEA_DERIVE_PARAMS is new for v2.0 */
  1495. typedef struct CK_KEA_DERIVE_PARAMS {
  1496. CK_BBOOL isSender;
  1497. CK_ULONG ulRandomLen;
  1498. CK_BYTE_PTR pRandomA;
  1499. CK_BYTE_PTR pRandomB;
  1500. CK_ULONG ulPublicDataLen;
  1501. CK_BYTE_PTR pPublicData;
  1502. } CK_KEA_DERIVE_PARAMS;
  1503. typedef CK_KEA_DERIVE_PARAMS CK_PTR CK_KEA_DERIVE_PARAMS_PTR;
  1504. /* CK_RC2_PARAMS provides the parameters to the CKM_RC2_ECB and
  1505. * CKM_RC2_MAC mechanisms. An instance of CK_RC2_PARAMS just
  1506. * holds the effective keysize */
  1507. typedef CK_ULONG CK_RC2_PARAMS;
  1508. typedef CK_RC2_PARAMS CK_PTR CK_RC2_PARAMS_PTR;
  1509. /* CK_RC2_CBC_PARAMS provides the parameters to the CKM_RC2_CBC
  1510. * mechanism */
  1511. typedef struct CK_RC2_CBC_PARAMS {
  1512. /* ulEffectiveBits was changed from CK_USHORT to CK_ULONG for
  1513. * v2.0 */
  1514. CK_ULONG ulEffectiveBits; /* effective bits (1-1024) */
  1515. CK_BYTE iv[8]; /* IV for CBC mode */
  1516. } CK_RC2_CBC_PARAMS;
  1517. typedef CK_RC2_CBC_PARAMS CK_PTR CK_RC2_CBC_PARAMS_PTR;
  1518. /* CK_RC2_MAC_GENERAL_PARAMS provides the parameters for the
  1519. * CKM_RC2_MAC_GENERAL mechanism */
  1520. /* CK_RC2_MAC_GENERAL_PARAMS is new for v2.0 */
  1521. typedef struct CK_RC2_MAC_GENERAL_PARAMS {
  1522. CK_ULONG ulEffectiveBits; /* effective bits (1-1024) */
  1523. CK_ULONG ulMacLength; /* Length of MAC in bytes */
  1524. } CK_RC2_MAC_GENERAL_PARAMS;
  1525. typedef CK_RC2_MAC_GENERAL_PARAMS CK_PTR
  1526. CK_RC2_MAC_GENERAL_PARAMS_PTR;
  1527. /* CK_RC5_PARAMS provides the parameters to the CKM_RC5_ECB and
  1528. * CKM_RC5_MAC mechanisms */
  1529. /* CK_RC5_PARAMS is new for v2.0 */
  1530. typedef struct CK_RC5_PARAMS {
  1531. CK_ULONG ulWordsize; /* wordsize in bits */
  1532. CK_ULONG ulRounds; /* number of rounds */
  1533. } CK_RC5_PARAMS;
  1534. typedef CK_RC5_PARAMS CK_PTR CK_RC5_PARAMS_PTR;
  1535. /* CK_RC5_CBC_PARAMS provides the parameters to the CKM_RC5_CBC
  1536. * mechanism */
  1537. /* CK_RC5_CBC_PARAMS is new for v2.0 */
  1538. typedef struct CK_RC5_CBC_PARAMS {
  1539. CK_ULONG ulWordsize; /* wordsize in bits */
  1540. CK_ULONG ulRounds; /* number of rounds */
  1541. CK_BYTE_PTR pIv; /* pointer to IV */
  1542. CK_ULONG ulIvLen; /* length of IV in bytes */
  1543. } CK_RC5_CBC_PARAMS;
  1544. typedef CK_RC5_CBC_PARAMS CK_PTR CK_RC5_CBC_PARAMS_PTR;
  1545. /* CK_RC5_MAC_GENERAL_PARAMS provides the parameters for the
  1546. * CKM_RC5_MAC_GENERAL mechanism */
  1547. /* CK_RC5_MAC_GENERAL_PARAMS is new for v2.0 */
  1548. typedef struct CK_RC5_MAC_GENERAL_PARAMS {
  1549. CK_ULONG ulWordsize; /* wordsize in bits */
  1550. CK_ULONG ulRounds; /* number of rounds */
  1551. CK_ULONG ulMacLength; /* Length of MAC in bytes */
  1552. } CK_RC5_MAC_GENERAL_PARAMS;
  1553. typedef CK_RC5_MAC_GENERAL_PARAMS CK_PTR
  1554. CK_RC5_MAC_GENERAL_PARAMS_PTR;
  1555. /* CK_MAC_GENERAL_PARAMS provides the parameters to most block
  1556. * ciphers' MAC_GENERAL mechanisms. Its value is the length of
  1557. * the MAC */
  1558. /* CK_MAC_GENERAL_PARAMS is new for v2.0 */
  1559. typedef CK_ULONG CK_MAC_GENERAL_PARAMS;
  1560. typedef CK_MAC_GENERAL_PARAMS CK_PTR CK_MAC_GENERAL_PARAMS_PTR;
  1561. /* CK_DES/AES_ECB/CBC_ENCRYPT_DATA_PARAMS are new for v2.20 */
  1562. typedef struct CK_DES_CBC_ENCRYPT_DATA_PARAMS {
  1563. CK_BYTE iv[8];
  1564. CK_BYTE_PTR pData;
  1565. CK_ULONG length;
  1566. } CK_DES_CBC_ENCRYPT_DATA_PARAMS;
  1567. typedef CK_DES_CBC_ENCRYPT_DATA_PARAMS CK_PTR CK_DES_CBC_ENCRYPT_DATA_PARAMS_PTR;
  1568. typedef struct CK_AES_CBC_ENCRYPT_DATA_PARAMS {
  1569. CK_BYTE iv[16];
  1570. CK_BYTE_PTR pData;
  1571. CK_ULONG length;
  1572. } CK_AES_CBC_ENCRYPT_DATA_PARAMS;
  1573. typedef CK_AES_CBC_ENCRYPT_DATA_PARAMS CK_PTR CK_AES_CBC_ENCRYPT_DATA_PARAMS_PTR;
  1574. /* CK_AES_CTR_PARAMS is new for PKCS #11 v2.20 amendment 3 */
  1575. typedef struct CK_AES_CTR_PARAMS {
  1576. CK_ULONG ulCounterBits;
  1577. CK_BYTE cb[16];
  1578. } CK_AES_CTR_PARAMS;
  1579. typedef CK_AES_CTR_PARAMS CK_PTR CK_AES_CTR_PARAMS_PTR;
  1580. /* CK_GCM_PARAMS is new for version 2.30 */
  1581. /* There was a discrepency between the doc and the headers
  1582. * in PKCS #11 v2.40, NSS had the doc version, but the header
  1583. * was normative. In V3.0 they were reconsiled as the header
  1584. * version. In NSS the header version is called CK_GCM_PARAMS_V3
  1585. * and the v2.40 doc version is called CK_NSS_GCM_PARAMS.
  1586. * CK_GCM_PARMS is define as CK_NSS_GCM_PARAMS if
  1587. * NSS_PCKS11_2_0_COMPAT is defined and CK_GCM_PARAMS_V3 if it's not.
  1588. * Softoken accepts either version and internally uses CK_NSS_GCM_PARAMS */
  1589. typedef struct CK_GCM_PARAMS_V3 {
  1590. CK_BYTE_PTR pIv;
  1591. CK_ULONG ulIvLen;
  1592. CK_ULONG ulIvBits;
  1593. CK_BYTE_PTR pAAD;
  1594. CK_ULONG ulAADLen;
  1595. CK_ULONG ulTagBits;
  1596. } CK_GCM_PARAMS_V3;
  1597. typedef CK_GCM_PARAMS_V3 CK_PTR CK_GCM_PARAMS_V3_PTR;
  1598. /* CK_CCM_PARAMS is new for version 2.30 */
  1599. typedef struct CK_CCM_PARAMS {
  1600. CK_ULONG ulDataLen;
  1601. CK_BYTE_PTR pNonce;
  1602. CK_ULONG ulNonceLen;
  1603. CK_BYTE_PTR pAAD;
  1604. CK_ULONG ulAADLen;
  1605. CK_ULONG ulMACLen;
  1606. } CK_CCM_PARAMS;
  1607. typedef CK_CCM_PARAMS CK_PTR CK_CCM_PARAMS_PTR;
  1608. /* SALSA20_POLY1305 and CHACHA20_POLY1305 is AEAD is new in v3.0 */
  1609. typedef struct CK_SALSA20_CHACHA20_POLY1305_PARAMS {
  1610. CK_BYTE_PTR pNonce;
  1611. CK_ULONG ulNonceLen;
  1612. CK_BYTE_PTR pAAD;
  1613. CK_ULONG ulAADLen;
  1614. } CK_SALSA20_CHACHA20_POLY1305_PARAMS;
  1615. typedef CK_SALSA20_CHACHA20_POLY1305_PARAMS
  1616. CK_PTR CK_SALSA20_CHACHA20_POLY1305_PARAMS_PTR;
  1617. /* MESSAGE params are new for v3.0 */
  1618. typedef CK_ULONG CK_GENERATOR_FUNCTION;
  1619. #define CKG_NO_GENERATE 0x00000000UL
  1620. #define CKG_GENERATE 0x00000001UL
  1621. #define CKG_GENERATE_COUNTER 0x00000002UL
  1622. #define CKG_GENERATE_RANDOM 0x00000003UL
  1623. #define CKG_GENERATE_COUNTER_XOR 0x00000004UL
  1624. typedef struct CK_GCM_MESSAGE_PARAMS {
  1625. CK_BYTE_PTR pIv;
  1626. CK_ULONG ulIvLen;
  1627. CK_ULONG ulIvFixedBits;
  1628. CK_GENERATOR_FUNCTION ivGenerator;
  1629. CK_BYTE_PTR pTag;
  1630. CK_ULONG ulTagBits;
  1631. } CK_GCM_MESSAGE_PARAMS;
  1632. typedef CK_GCM_MESSAGE_PARAMS CK_GCM_MESSAGE_PARAMS_PTR;
  1633. typedef struct CK_CCM_MESSAGE_PARAMS {
  1634. CK_ULONG ulDataLen; /*plaintext or ciphertext*/
  1635. CK_BYTE_PTR pNonce;
  1636. CK_ULONG ulNonceLen;
  1637. CK_ULONG ulNonceFixedBits;
  1638. CK_GENERATOR_FUNCTION nonceGenerator;
  1639. CK_BYTE_PTR pMAC;
  1640. CK_ULONG ulMACLen;
  1641. } CK_CCM_MESSAGE_PARAMS;
  1642. typedef CK_CCM_MESSAGE_PARAMS CK_CCM_MESSAGE_PARAMS_PTR;
  1643. /* SALSA20/CHACHA20 doe not define IV generators */
  1644. typedef struct CK_SALSA20_CHACHA20_POLY1305_MSG_PARAMS {
  1645. CK_BYTE_PTR pNonce;
  1646. CK_ULONG ulNonceLen;
  1647. CK_BYTE_PTR pTag;
  1648. } CK_SALSA20_CHACHA20_POLY1305_MSG_PARAMS;
  1649. typedef CK_SALSA20_CHACHA20_POLY1305_MSG_PARAMS
  1650. CK_PTR CK_SALSA20_CHACHA20_POLY1305_MSG_PARAMS_PTR;
  1651. /* CK_SKIPJACK_PRIVATE_WRAP_PARAMS provides the parameters to the
  1652. * CKM_SKIPJACK_PRIVATE_WRAP mechanism */
  1653. /* CK_SKIPJACK_PRIVATE_WRAP_PARAMS is new for v2.0 */
  1654. typedef struct CK_SKIPJACK_PRIVATE_WRAP_PARAMS {
  1655. CK_ULONG ulPasswordLen;
  1656. CK_BYTE_PTR pPassword;
  1657. CK_ULONG ulPublicDataLen;
  1658. CK_BYTE_PTR pPublicData;
  1659. CK_ULONG ulPAndGLen;
  1660. CK_ULONG ulQLen;
  1661. CK_ULONG ulRandomLen;
  1662. CK_BYTE_PTR pRandomA;
  1663. CK_BYTE_PTR pPrimeP;
  1664. CK_BYTE_PTR pBaseG;
  1665. CK_BYTE_PTR pSubprimeQ;
  1666. } CK_SKIPJACK_PRIVATE_WRAP_PARAMS;
  1667. typedef CK_SKIPJACK_PRIVATE_WRAP_PARAMS CK_PTR
  1668. CK_SKIPJACK_PRIVATE_WRAP_PTR;
  1669. /* CK_SKIPJACK_RELAYX_PARAMS provides the parameters to the
  1670. * CKM_SKIPJACK_RELAYX mechanism */
  1671. /* CK_SKIPJACK_RELAYX_PARAMS is new for v2.0 */
  1672. typedef struct CK_SKIPJACK_RELAYX_PARAMS {
  1673. CK_ULONG ulOldWrappedXLen;
  1674. CK_BYTE_PTR pOldWrappedX;
  1675. CK_ULONG ulOldPasswordLen;
  1676. CK_BYTE_PTR pOldPassword;
  1677. CK_ULONG ulOldPublicDataLen;
  1678. CK_BYTE_PTR pOldPublicData;
  1679. CK_ULONG ulOldRandomLen;
  1680. CK_BYTE_PTR pOldRandomA;
  1681. CK_ULONG ulNewPasswordLen;
  1682. CK_BYTE_PTR pNewPassword;
  1683. CK_ULONG ulNewPublicDataLen;
  1684. CK_BYTE_PTR pNewPublicData;
  1685. CK_ULONG ulNewRandomLen;
  1686. CK_BYTE_PTR pNewRandomA;
  1687. } CK_SKIPJACK_RELAYX_PARAMS;
  1688. typedef CK_SKIPJACK_RELAYX_PARAMS CK_PTR
  1689. CK_SKIPJACK_RELAYX_PARAMS_PTR;
  1690. /* New for v2.40, CAMELLIA, ARIA, SEED */
  1691. typedef struct CK_CAMELLIA_CTR_PARAMS {
  1692. CK_ULONG ulCounterBits;
  1693. CK_BYTE cb[16];
  1694. } CK_CAMELLIA_CTR_PARAMS;
  1695. typedef CK_CAMELLIA_CTR_PARAMS CK_PTR CK_CAMELLIA_CTR_PARAMS_PTR;
  1696. typedef struct CK_CAMELLIA_CBC_ENCRYPT_DATA_PARAMS {
  1697. CK_BYTE iv[16];
  1698. CK_BYTE_PTR pData;
  1699. CK_ULONG length;
  1700. } CK_CAMELLIA_CBC_ENCRYPT_DATA_PARAMS;
  1701. typedef CK_CAMELLIA_CBC_ENCRYPT_DATA_PARAMS CK_PTR
  1702. CK_CAMELLIA_CBC_ENCRYPT_DATA_PARAMS_PTR;
  1703. typedef struct CK_ARIA_CBC_ENCRYPT_DATA_PARAMS {
  1704. CK_BYTE iv[16];
  1705. CK_BYTE_PTR pData;
  1706. CK_ULONG length;
  1707. } CK_ARIA_CBC_ENCRYPT_DATA_PARAMS;
  1708. typedef CK_ARIA_CBC_ENCRYPT_DATA_PARAMS CK_PTR
  1709. CK_ARIA_CBC_ENCRYPT_DATA_PARAMS_PTR;
  1710. typedef struct CK_SEED_CBC_ENCRYPT_DATA_PARAMS {
  1711. CK_BYTE iv[16];
  1712. CK_BYTE_PTR pData;
  1713. CK_ULONG length;
  1714. } CK_SEED_CBC_ENCRYPT_DATA_PARAMS;
  1715. typedef CK_SEED_CBC_ENCRYPT_DATA_PARAMS CK_PTR
  1716. CK_SEED_CBC_ENCRYPT_DATA_PARAMS_PTR;
  1717. /* ChaCha20/Salsa20 Counter support is new in v3.0*/
  1718. typedef struct CK_CHACHA20_PARAMS {
  1719. CK_BYTE_PTR pBlockCounter;
  1720. CK_ULONG blockCounterBits;
  1721. CK_BYTE_PTR pNonce;
  1722. CK_ULONG ulNonceBits;
  1723. } CK_CHACHA20_PARAMS;
  1724. typedef CK_CHACHA20_PARAMS CK_PTR CK_CHACHA20_PARAMS_PTR;
  1725. typedef struct CK_SALSA20_PARAMS {
  1726. CK_BYTE_PTR pBlockCounter;
  1727. CK_BYTE_PTR pNonce;
  1728. CK_ULONG ulNonceBits;
  1729. } CK_SALSA20_PARAMS;
  1730. typedef CK_SALSA20_PARAMS CK_PTR CK_SALSA20_PARAMS_PTR;
  1731. typedef struct CK_PBE_PARAMS {
  1732. CK_BYTE_PTR pInitVector;
  1733. CK_UTF8CHAR_PTR pPassword;
  1734. CK_ULONG ulPasswordLen;
  1735. CK_BYTE_PTR pSalt;
  1736. CK_ULONG ulSaltLen;
  1737. CK_ULONG ulIteration;
  1738. } CK_PBE_PARAMS;
  1739. typedef CK_PBE_PARAMS CK_PTR CK_PBE_PARAMS_PTR;
  1740. /* CK_KEY_WRAP_SET_OAEP_PARAMS provides the parameters to the
  1741. * CKM_KEY_WRAP_SET_OAEP mechanism */
  1742. /* CK_KEY_WRAP_SET_OAEP_PARAMS is new for v2.0 */
  1743. typedef struct CK_KEY_WRAP_SET_OAEP_PARAMS {
  1744. CK_BYTE bBC; /* block contents byte */
  1745. CK_BYTE_PTR pX; /* extra data */
  1746. CK_ULONG ulXLen; /* length of extra data in bytes */
  1747. } CK_KEY_WRAP_SET_OAEP_PARAMS;
  1748. typedef CK_KEY_WRAP_SET_OAEP_PARAMS CK_PTR
  1749. CK_KEY_WRAP_SET_OAEP_PARAMS_PTR;
  1750. typedef struct CK_SSL3_RANDOM_DATA {
  1751. CK_BYTE_PTR pClientRandom;
  1752. CK_ULONG ulClientRandomLen;
  1753. CK_BYTE_PTR pServerRandom;
  1754. CK_ULONG ulServerRandomLen;
  1755. } CK_SSL3_RANDOM_DATA;
  1756. typedef struct CK_SSL3_MASTER_KEY_DERIVE_PARAMS {
  1757. CK_SSL3_RANDOM_DATA RandomInfo;
  1758. CK_VERSION_PTR pVersion;
  1759. } CK_SSL3_MASTER_KEY_DERIVE_PARAMS;
  1760. typedef struct CK_SSL3_MASTER_KEY_DERIVE_PARAMS CK_PTR
  1761. CK_SSL3_MASTER_KEY_DERIVE_PARAMS_PTR;
  1762. typedef struct CK_SSL3_KEY_MAT_OUT {
  1763. CK_OBJECT_HANDLE hClientMacSecret;
  1764. CK_OBJECT_HANDLE hServerMacSecret;
  1765. CK_OBJECT_HANDLE hClientKey;
  1766. CK_OBJECT_HANDLE hServerKey;
  1767. CK_BYTE_PTR pIVClient;
  1768. CK_BYTE_PTR pIVServer;
  1769. } CK_SSL3_KEY_MAT_OUT;
  1770. typedef CK_SSL3_KEY_MAT_OUT CK_PTR CK_SSL3_KEY_MAT_OUT_PTR;
  1771. typedef struct CK_SSL3_KEY_MAT_PARAMS {
  1772. CK_ULONG ulMacSizeInBits;
  1773. CK_ULONG ulKeySizeInBits;
  1774. CK_ULONG ulIVSizeInBits;
  1775. CK_BBOOL bIsExport; /* Unused. Must be set to CK_FALSE. */
  1776. CK_SSL3_RANDOM_DATA RandomInfo;
  1777. CK_SSL3_KEY_MAT_OUT_PTR pReturnedKeyMaterial;
  1778. } CK_SSL3_KEY_MAT_PARAMS;
  1779. typedef CK_SSL3_KEY_MAT_PARAMS CK_PTR CK_SSL3_KEY_MAT_PARAMS_PTR;
  1780. /* CK_TLS_PRF_PARAMS is new for version 2.20 */
  1781. typedef struct CK_TLS_PRF_PARAMS {
  1782. CK_BYTE_PTR pSeed;
  1783. CK_ULONG ulSeedLen;
  1784. CK_BYTE_PTR pLabel;
  1785. CK_ULONG ulLabelLen;
  1786. CK_BYTE_PTR pOutput;
  1787. CK_ULONG_PTR pulOutputLen;
  1788. } CK_TLS_PRF_PARAMS;
  1789. typedef CK_TLS_PRF_PARAMS CK_PTR CK_TLS_PRF_PARAMS_PTR;
  1790. /* TLS 1.2 is new for version 2.40 */
  1791. typedef struct CK_TLS12_MASTER_KEY_DERIVE_PARAMS {
  1792. CK_SSL3_RANDOM_DATA RandomInfo;
  1793. CK_VERSION_PTR pVersion;
  1794. CK_MECHANISM_TYPE prfHashMechanism;
  1795. } CK_TLS12_MASTER_KEY_DERIVE_PARAMS;
  1796. typedef CK_TLS12_MASTER_KEY_DERIVE_PARAMS CK_PTR
  1797. CK_TLS12_MASTER_KEY_DERIVE_PARAMS_PTR;
  1798. typedef struct CK_TLS12_KEY_MAT_PARAMS {
  1799. CK_ULONG ulMacSizeInBits;
  1800. CK_ULONG ulKeySizeInBits;
  1801. CK_ULONG ulIVSizeInBits;
  1802. CK_BBOOL bIsExport; /* Unused. Must be set to CK_FALSE. */
  1803. CK_SSL3_RANDOM_DATA RandomInfo;
  1804. CK_SSL3_KEY_MAT_OUT_PTR pReturnedKeyMaterial;
  1805. CK_MECHANISM_TYPE prfHashMechanism;
  1806. } CK_TLS12_KEY_MAT_PARAMS;
  1807. typedef CK_TLS12_KEY_MAT_PARAMS CK_PTR CK_TLS12_KEY_MAT_PARAMS_PTR;
  1808. typedef struct CK_TLS_KDF_PARAMS {
  1809. CK_MECHANISM_TYPE prfMechanism;
  1810. CK_BYTE_PTR pLabel;
  1811. CK_ULONG ulLabelLength;
  1812. CK_SSL3_RANDOM_DATA RandomInfo;
  1813. CK_BYTE_PTR pContextData;
  1814. CK_ULONG ulContextDataLength;
  1815. } CK_TLS_KDF_PARAMS;
  1816. typedef struct CK_TLS_MAC_PARAMS {
  1817. CK_MECHANISM_TYPE prfHashMechanism;
  1818. CK_ULONG ulMacLength;
  1819. CK_ULONG ulServerOrClient;
  1820. } CK_TLS_MAC_PARAMS;
  1821. typedef CK_TLS_MAC_PARAMS CK_PTR CK_TLS_MAC_PARAMS_PTR;
  1822. /* HKDF is new for v3.0 */
  1823. typedef struct CK_HKDF_PARAMS {
  1824. CK_BBOOL bExtract;
  1825. CK_BBOOL bExpand;
  1826. CK_MECHANISM_TYPE prfHashMechanism;
  1827. CK_ULONG ulSaltType;
  1828. CK_BYTE_PTR pSalt;
  1829. CK_ULONG ulSaltLen;
  1830. CK_OBJECT_HANDLE hSaltKey;
  1831. CK_BYTE_PTR pInfo;
  1832. CK_ULONG ulInfoLen;
  1833. } CK_HKDF_PARAMS;
  1834. typedef CK_HKDF_PARAMS CK_PTR CK_HKDF_PARAMS_PTR;
  1835. #define CKF_HKDF_SALT_NULL 0x00000001UL
  1836. #define CKF_HKDF_SALT_DATA 0x00000002UL
  1837. #define CKF_HKDF_SALT_KEY 0x00000004UL
  1838. /* WTLS is new for version 2.20 */
  1839. typedef struct CK_WTLS_RANDOM_DATA {
  1840. CK_BYTE_PTR pClientRandom;
  1841. CK_ULONG ulClientRandomLen;
  1842. CK_BYTE_PTR pServerRandom;
  1843. CK_ULONG ulServerRandomLen;
  1844. } CK_WTLS_RANDOM_DATA;
  1845. typedef CK_WTLS_RANDOM_DATA CK_PTR CK_WTLS_RANDOM_DATA_PTR;
  1846. typedef struct CK_WTLS_MASTER_KEY_DERIVE_PARAMS {
  1847. CK_MECHANISM_TYPE DigestMechanism;
  1848. CK_WTLS_RANDOM_DATA RandomInfo;
  1849. CK_BYTE_PTR pVersion;
  1850. } CK_WTLS_MASTER_KEY_DERIVE_PARAMS;
  1851. typedef CK_WTLS_MASTER_KEY_DERIVE_PARAMS CK_PTR
  1852. CK_WTLS_MASTER_KEY_DERIVE_PARAMS_PTR;
  1853. typedef struct CK_WTLS_PRF_PARAMS {
  1854. CK_MECHANISM_TYPE DigestMechanism;
  1855. CK_BYTE_PTR pSeed;
  1856. CK_ULONG ulSeedLen;
  1857. CK_BYTE_PTR pLabel;
  1858. CK_ULONG ulLabelLen;
  1859. CK_BYTE_PTR pOutput;
  1860. CK_ULONG_PTR pulOutputLen;
  1861. } CK_WTLS_PRF_PARAMS;
  1862. typedef CK_WTLS_PRF_PARAMS CK_PTR CK_WTLS_PRF_PARAMS_PTR;
  1863. typedef struct CK_WTLS_KEY_MAT_OUT {
  1864. CK_OBJECT_HANDLE hMacSecret;
  1865. CK_OBJECT_HANDLE hKey;
  1866. CK_BYTE_PTR pIV;
  1867. } CK_WTLS_KEY_MAT_OUT;
  1868. typedef CK_WTLS_KEY_MAT_OUT CK_PTR CK_WTLS_KEY_MAT_OUT_PTR;
  1869. typedef struct CK_WTLS_KEY_MAT_PARAMS {
  1870. CK_MECHANISM_TYPE DigestMechanism;
  1871. CK_ULONG ulMacSizeInBits;
  1872. CK_ULONG ulKeySizeInBits;
  1873. CK_ULONG ulIVSizeInBits;
  1874. CK_ULONG ulSequenceNumber;
  1875. CK_BBOOL bIsExport; /* Unused. Must be set to CK_FALSE. */
  1876. CK_WTLS_RANDOM_DATA RandomInfo;
  1877. CK_WTLS_KEY_MAT_OUT_PTR pReturnedKeyMaterial;
  1878. } CK_WTLS_KEY_MAT_PARAMS;
  1879. typedef CK_WTLS_KEY_MAT_PARAMS CK_PTR CK_WTLS_KEY_MAT_PARAMS_PTR;
  1880. /* The following types for NIST 800-108 KBKDF are defined in PKCS#11 v3.0 */
  1881. typedef CK_MECHANISM_TYPE CK_SP800_108_PRF_TYPE;
  1882. typedef CK_ULONG CK_PRF_DATA_TYPE;
  1883. #define CK_SP800_108_ITERATION_VARIABLE 0x00000001UL
  1884. #define CK_SP800_108_OPTIONAL_COUNTER 0x00000002UL
  1885. #define CK_SP800_108_DKM_LENGTH 0x00000003UL
  1886. #define CK_SP800_108_BYTE_ARRAY 0x00000004UL
  1887. /* ERRATA: PKCS#11 v3.0 Cryptographic Token Interface Current Mechanisms
  1888. * specification specifies a CK_SP800_108_COUNTER, while the pkcs11t.h from
  1889. * PKCS#11 v3.0 Cryptographic Token Interface Base Specification specifies
  1890. * CK_SP800_108_OPTIONAL_COUNTER. */
  1891. #define CK_SP800_108_COUNTER CK_SP800_108_OPTIONAL_COUNTER
  1892. typedef struct CK_PRF_DATA_PARAM {
  1893. CK_PRF_DATA_TYPE type;
  1894. CK_VOID_PTR pValue;
  1895. CK_ULONG ulValueLen;
  1896. } CK_PRF_DATA_PARAM;
  1897. typedef CK_PRF_DATA_PARAM CK_PTR CK_PRF_DATA_PARAM_PTR;
  1898. typedef struct CK_SP800_108_COUNTER_FORMAT {
  1899. CK_BBOOL bLittleEndian;
  1900. CK_ULONG ulWidthInBits;
  1901. } CK_SP800_108_COUNTER_FORMAT;
  1902. typedef CK_SP800_108_COUNTER_FORMAT CK_PTR CK_SP800_108_COUNTER_FORMAT_PTR;
  1903. typedef CK_ULONG CK_SP800_108_DKM_LENGTH_METHOD;
  1904. /* ERRATA: PKCS#11 v3.0 Cryptographic Token Interface Current Mechanisms
  1905. * defines that these constants exist, but doesn't specify values. pkcs11t.h
  1906. * from PKCS#11 v3.0 Cryptographic Token Interface Base Specification doesn't
  1907. * define these constants either. */
  1908. #define CK_SP800_108_DKM_LENGTH_SUM_OF_KEYS 0x00000001UL
  1909. #define CK_SP800_108_DKM_LENGTH_SUM_OF_SEGMENTS 0x00000002UL
  1910. typedef struct CK_SP800_108_DKM_LENGTH_FORMAT {
  1911. CK_SP800_108_DKM_LENGTH_METHOD dkmLengthMethod;
  1912. CK_BBOOL bLittleEndian;
  1913. CK_ULONG ulWidthInBits;
  1914. } CK_SP800_108_DKM_LENGTH_FORMAT;
  1915. typedef CK_SP800_108_DKM_LENGTH_FORMAT CK_PTR CK_SP800_108_DKM_LENGTH_FORMAT_PTR;
  1916. typedef struct CK_DERIVED_KEY {
  1917. CK_ATTRIBUTE_PTR pTemplate;
  1918. CK_ULONG ulAttributeCount;
  1919. CK_OBJECT_HANDLE_PTR phKey;
  1920. } CK_DERIVED_KEY;
  1921. typedef CK_DERIVED_KEY CK_PTR CK_DERIVED_KEY_PTR;
  1922. /* UNFIXED ERRATA: NIST SP800-108 specifies that implementer can decide the
  1923. * number of bits to take from each PRF invocation. However, all three forms
  1924. * of the PKCS#11 v3.0 implementation lack a bitwidth for the PRF and only
  1925. * allow the full-width mechanism varieties. Additionally, outside of the
  1926. * base key (used as the key to the PRF), there is no way to pass any
  1927. * additional, PRF-mechanism specific data. */
  1928. typedef struct CK_SP800_108_KDF_PARAMS {
  1929. CK_SP800_108_PRF_TYPE prfType;
  1930. CK_ULONG ulNumberOfDataParams;
  1931. CK_PRF_DATA_PARAM_PTR pDataParams;
  1932. CK_ULONG ulAdditionalDerivedKeys;
  1933. /* ERRATA: in PKCS#11 v3.0, pAdditionalDerivedKeys is typed as
  1934. * CK_DERVIED_KEY; it needs to be of type CK_DERIVED_KEY_PTR. */
  1935. CK_DERIVED_KEY_PTR pAdditionalDerivedKeys;
  1936. } CK_SP800_108_KDF_PARAMS;
  1937. typedef CK_SP800_108_KDF_PARAMS CK_PTR CK_SP800_108_KDF_PARAMS_PTR;
  1938. typedef struct CK_SP800_108_FEEDBACK_KDF_PARAMS {
  1939. CK_SP800_108_PRF_TYPE prfType;
  1940. CK_ULONG ulNumberOfDataParams;
  1941. CK_PRF_DATA_PARAM_PTR pDataParams;
  1942. CK_ULONG ulIVLen;
  1943. CK_BYTE_PTR pIV;
  1944. CK_ULONG ulAdditionalDerivedKeys;
  1945. /* ERRATA: in PKCS#11 v3.0, pAdditionalDerivedKeys is typed as
  1946. * CK_DERVIED_KEY; it needs to be of type CK_DERIVED_KEY_PTR. */
  1947. CK_DERIVED_KEY_PTR pAdditionalDerivedKeys;
  1948. } CK_SP800_108_FEEDBACK_KDF_PARAMS;
  1949. typedef CK_SP800_108_FEEDBACK_KDF_PARAMS CK_PTR CK_SP800_108_FEEDBACK_KDF_PARAMS_PTR;
  1950. /* CMS is new for version 2.20 */
  1951. typedef struct CK_CMS_SIG_PARAMS {
  1952. CK_OBJECT_HANDLE certificateHandle;
  1953. CK_MECHANISM_PTR pSigningMechanism;
  1954. CK_MECHANISM_PTR pDigestMechanism;
  1955. CK_UTF8CHAR_PTR pContentType;
  1956. CK_BYTE_PTR pRequestedAttributes;
  1957. CK_ULONG ulRequestedAttributesLen;
  1958. CK_BYTE_PTR pRequiredAttributes;
  1959. CK_ULONG ulRequiredAttributesLen;
  1960. } CK_CMS_SIG_PARAMS;
  1961. typedef CK_CMS_SIG_PARAMS CK_PTR CK_CMS_SIG_PARAMS_PTR;
  1962. typedef struct CK_KEY_DERIVATION_STRING_DATA {
  1963. CK_BYTE_PTR pData;
  1964. CK_ULONG ulLen;
  1965. } CK_KEY_DERIVATION_STRING_DATA;
  1966. typedef CK_KEY_DERIVATION_STRING_DATA CK_PTR
  1967. CK_KEY_DERIVATION_STRING_DATA_PTR;
  1968. /* The CK_EXTRACT_PARAMS is used for the
  1969. * CKM_EXTRACT_KEY_FROM_KEY mechanism. It specifies which bit
  1970. * of the base key should be used as the first bit of the
  1971. * derived key */
  1972. /* CK_EXTRACT_PARAMS is new for v2.0 */
  1973. typedef CK_ULONG CK_EXTRACT_PARAMS;
  1974. typedef CK_EXTRACT_PARAMS CK_PTR CK_EXTRACT_PARAMS_PTR;
  1975. /* CK_PKCS5_PBKD2_PSEUDO_RANDOM_FUNCTION_TYPE is new for v2.10.
  1976. * CK_PKCS5_PBKD2_PSEUDO_RANDOM_FUNCTION_TYPE is used to
  1977. * indicate the Pseudo-Random Function (PRF) used to generate
  1978. * key bits using PKCS #5 PBKDF2. */
  1979. typedef CK_ULONG CK_PKCS5_PBKD2_PSEUDO_RANDOM_FUNCTION_TYPE;
  1980. typedef CK_PKCS5_PBKD2_PSEUDO_RANDOM_FUNCTION_TYPE CK_PTR CK_PKCS5_PBKD2_PSEUDO_RANDOM_FUNCTION_TYPE_PTR;
  1981. /* The following PRFs are defined in PKCS #5 v2.1. */
  1982. #define CKP_PKCS5_PBKD2_HMAC_SHA1 0x00000001UL
  1983. #define CKP_PKCS5_PBKD2_HMAC_GOSTR3411 0x00000002UL
  1984. #define CKP_PKCS5_PBKD2_HMAC_SHA224 0x00000003UL
  1985. #define CKP_PKCS5_PBKD2_HMAC_SHA256 0x00000004UL
  1986. #define CKP_PKCS5_PBKD2_HMAC_SHA384 0x00000005UL
  1987. #define CKP_PKCS5_PBKD2_HMAC_SHA512 0x00000006UL
  1988. #define CKP_PKCS5_PBKD2_HMAC_SHA512_224 0x00000007UL
  1989. #define CKP_PKCS5_PBKD2_HMAC_SHA512_256 0x00000008UL
  1990. /* CK_PKCS5_PBKDF2_SALT_SOURCE_TYPE is new for v2.10.
  1991. * CK_PKCS5_PBKDF2_SALT_SOURCE_TYPE is used to indicate the
  1992. * source of the salt value when deriving a key using PKCS #5
  1993. * PBKDF2. */
  1994. typedef CK_ULONG CK_PKCS5_PBKDF2_SALT_SOURCE_TYPE;
  1995. typedef CK_PKCS5_PBKDF2_SALT_SOURCE_TYPE CK_PTR CK_PKCS5_PBKDF2_SALT_SOURCE_TYPE_PTR;
  1996. /* The following salt value sources are defined in PKCS #5 v2.0. */
  1997. #define CKZ_SALT_SPECIFIED 0x00000001UL
  1998. /* CK_PKCS5_PBKD2_PARAMS is new for v2.10.
  1999. * CK_PKCS5_PBKD2_PARAMS is a structure that provides the
  2000. * parameters to the CKM_PKCS5_PBKD2 mechanism. */
  2001. /* this structure is kept for compatibility. use _PARAMS2. */
  2002. typedef struct CK_PKCS5_PBKD2_PARAMS {
  2003. CK_PKCS5_PBKDF2_SALT_SOURCE_TYPE saltSource;
  2004. CK_VOID_PTR pSaltSourceData;
  2005. CK_ULONG ulSaltSourceDataLen;
  2006. CK_ULONG iterations;
  2007. CK_PKCS5_PBKD2_PSEUDO_RANDOM_FUNCTION_TYPE prf;
  2008. CK_VOID_PTR pPrfData;
  2009. CK_ULONG ulPrfDataLen;
  2010. CK_UTF8CHAR_PTR pPassword;
  2011. CK_ULONG_PTR ulPasswordLen;
  2012. } CK_PKCS5_PBKD2_PARAMS;
  2013. typedef CK_PKCS5_PBKD2_PARAMS CK_PTR CK_PKCS5_PBKD2_PARAMS_PTR;
  2014. typedef struct CK_PKCS5_PBKD2_PARAMS2 {
  2015. CK_PKCS5_PBKDF2_SALT_SOURCE_TYPE saltSource;
  2016. CK_VOID_PTR pSaltSourceData;
  2017. CK_ULONG ulSaltSourceDataLen;
  2018. CK_ULONG iterations;
  2019. CK_PKCS5_PBKD2_PSEUDO_RANDOM_FUNCTION_TYPE prf;
  2020. CK_VOID_PTR pPrfData;
  2021. CK_ULONG ulPrfDataLen;
  2022. CK_UTF8CHAR_PTR pPassword;
  2023. CK_ULONG ulPasswordLen;
  2024. } CK_PKCS5_PBKD2_PARAMS2;
  2025. typedef CK_PKCS5_PBKD2_PARAMS2 CK_PTR CK_PKCS5_PBKD2_PARAMS2_PTR;
  2026. /* OTP is new in v2.40 */
  2027. typedef CK_ULONG CK_OTP_PARAM_TYPE;
  2028. #define CK_OTP_VALUE 0UL
  2029. #define CK_OTP_PIN 1UL
  2030. #define CK_OTP_CHALLENGE 2UL
  2031. #define CK_OTP_TIME 3UL
  2032. #define CK_OTP_COUNTER 4UL
  2033. #define CK_OTP_FLAGS 5UL
  2034. #define CK_OTP_OUTPUT_LENGTH 6UL
  2035. #define CK_OTP_OUTPUT_FORMAT 7UL
  2036. typedef struct CK_OTP_PARAM {
  2037. CK_OTP_PARAM_TYPE type;
  2038. CK_VOID_PTR pValue;
  2039. CK_ULONG ulValueLen;
  2040. } CK_OTP_PARAM;
  2041. typedef CK_OTP_PARAM CK_PTR CK_OTP_PARAM_PTR;
  2042. typedef struct CK_OTP_PARAMS {
  2043. CK_OTP_PARAM_PTR pParams;
  2044. CK_ULONG ulCount;
  2045. } CK_OTP_PARAMS;
  2046. typedef CK_OTP_PARAMS CK_PTR CK_OTP_PARAMS_PTR;
  2047. typedef struct CK_OTP_SIGNATURE_INFO {
  2048. CK_OTP_PARAM_PTR pParams;
  2049. CK_ULONG ulCount;
  2050. } CK_OTP_SIGNATURE_INFO;
  2051. typedef CK_OTP_SIGNATURE_INFO CK_PTR CK_OTP_SIGNATURE_INFO_PTR;
  2052. #define CKF_NEXT_OTP 0x00000001UL
  2053. #define CKF_EXCLUDE_TIME 0x00000002UL
  2054. #define CKF_EXCLUDE_COUNTER 0x00000004UL
  2055. #define CKF_EXCLUDE_CHALLENGE 0x00000008UL
  2056. #define CKF_EXCLUDE_PIN 0x00000010UL
  2057. #define CKF_USER_FRIENDLY_OTP 0x00000020UL
  2058. /* KIP is new in v2.40 */
  2059. typedef struct CK_KIP_PARAMS {
  2060. CK_MECHANISM_PTR pMechanism;
  2061. CK_OBJECT_HANDLE hKey;
  2062. CK_BYTE_PTR pSeed;
  2063. CK_ULONG ulSeedLen;
  2064. } CK_KIP_PARAMS;
  2065. typedef CK_KIP_PARAMS CK_PTR CK_KIP_PARAMS_PTR;
  2066. /* DSA Param Gen is new for v2.40 */
  2067. typedef struct CK_DSA_PARAMETER_GEN_PARAM {
  2068. CK_MECHANISM_TYPE hash;
  2069. CK_BYTE_PTR pSeed;
  2070. CK_ULONG ulSeedLen;
  2071. CK_ULONG ulIndex;
  2072. } CK_DSA_PARAMETER_GEN_PARAM;
  2073. typedef CK_DSA_PARAMETER_GEN_PARAM CK_PTR CK_DSA_PARAMETER_GEN_PARAM_PTR;
  2074. /* XXXX_AES_KEY_WRAP is new for v2.40 */
  2075. typedef struct CK_ECDH_AES_KEY_WRAP_PARAMS {
  2076. CK_ULONG ulAESKeyBits;
  2077. CK_EC_KDF_TYPE kdf;
  2078. CK_ULONG ulSharedDataLen;
  2079. CK_BYTE_PTR pSharedData;
  2080. } CK_ECDH_AES_KEY_WRAP_PARAMS;
  2081. typedef CK_ECDH_AES_KEY_WRAP_PARAMS CK_PTR CK_ECDH_AES_KEY_WRAP_PARAMS_PTR;
  2082. typedef struct CK_RSA_AES_KEY_WRAP_PARAMS {
  2083. CK_ULONG ulAESKeyBits;
  2084. CK_RSA_PKCS_OAEP_PARAMS_PTR pOAEPParams;
  2085. } CK_RSA_AES_KEY_WRAP_PARAMS;
  2086. typedef CK_RSA_AES_KEY_WRAP_PARAMS CK_PTR CK_RSA_AES_KEY_WRAP_PARAMS_PTR;
  2087. /* GOSTR3410 is new for v2.40 */
  2088. typedef struct CK_GOSTR3410_DERIVE_PARAMS {
  2089. CK_EC_KDF_TYPE kdf;
  2090. CK_BYTE_PTR pPublicData;
  2091. CK_ULONG ulPublicDataLen;
  2092. CK_BYTE_PTR pUKM;
  2093. CK_ULONG ulUKMLen;
  2094. } CK_GOSTR3410_DERIVE_PARAMS;
  2095. typedef CK_GOSTR3410_DERIVE_PARAMS CK_PTR CK_GOSTR3410_DERIVE_PARAMS_PTR;
  2096. typedef struct CK_GOSTR3410_KEY_WRAP_PARAMS {
  2097. CK_BYTE_PTR pWrapOID;
  2098. CK_ULONG ulWrapOIDLen;
  2099. CK_BYTE_PTR pUKM;
  2100. CK_ULONG ulUKMLen;
  2101. CK_OBJECT_HANDLE hKey;
  2102. } CK_GOSTR3410_KEY_WRAP_PARAMS;
  2103. typedef CK_GOSTR3410_KEY_WRAP_PARAMS CK_PTR CK_GOSTR3410_KEY_WRAP_PARAMS_PTR;
  2104. /* EDDSA and XEDDSA are new for v3.0 */
  2105. typedef struct CK_EDDSA_PARAMS {
  2106. CK_BBOOL phFlag;
  2107. CK_ULONG ulContextDataLen;
  2108. CK_BYTE_PTR pContextData;
  2109. } CK_EDDSA_PARAMS;
  2110. typedef CK_ULONG CK_XEDDSA_HASH_TYPE;
  2111. typedef CK_XEDDSA_HASH_TYPE CK_PTR CK_XEDDSA_HASH_TYPE_PTR;
  2112. typedef struct CK_XEDDSA_PARAMS {
  2113. CK_XEDDSA_HASH_TYPE hash;
  2114. } CK_XEDDSA_PARAMS;
  2115. typedef CK_XEDDSA_PARAMS CK_PTR CK_XEDDSA_PARAMS_PTR;
  2116. /* X3DH and Ratchet are new in v3.0 */
  2117. typedef CK_ULONG CK_X3DH_KDF_TYPE;
  2118. typedef CK_X3DH_KDF_TYPE CK_PTR CK_X3DH_KDF_TYPE_PTR;
  2119. typedef struct CK_X3DH_INITIATE_PARAMS {
  2120. CK_X3DH_KDF_TYPE kdf;
  2121. CK_OBJECT_HANDLE pPeer_identity;
  2122. CK_OBJECT_HANDLE pPeer_prekey;
  2123. CK_BYTE_PTR pPrekey_signature;
  2124. CK_BYTE_PTR pOnetime_key;
  2125. CK_OBJECT_HANDLE pOwn_identity;
  2126. CK_OBJECT_HANDLE pOwn_ephemeral;
  2127. } CK_X3DH_INITIATE_PARAMS;
  2128. typedef struct CK_X3DH_RESPOND_PARAMS {
  2129. CK_X3DH_KDF_TYPE kdf;
  2130. CK_BYTE_PTR pIdentity_id;
  2131. CK_BYTE_PTR pPrekey_id;
  2132. CK_BYTE_PTR pOnetime_id;
  2133. CK_OBJECT_HANDLE pInitiator_identity;
  2134. CK_BYTE_PTR pInitiator_ephemeral;
  2135. } CK_X3DH_RESPOND_PARAMS;
  2136. typedef CK_ULONG CK_X2RATCHET_KDF_TYPE;
  2137. typedef CK_X2RATCHET_KDF_TYPE CK_PTR CK_X2RATCHET_KDF_TYPE_PTR;
  2138. typedef struct CK_X2RATCHET_INITIALIZE_PARAMS {
  2139. CK_BYTE_PTR sk;
  2140. CK_OBJECT_HANDLE peer_public_prekey;
  2141. CK_OBJECT_HANDLE peer_public_identity;
  2142. CK_OBJECT_HANDLE own_public_identity;
  2143. CK_BBOOL bEncryptedHeader;
  2144. CK_ULONG eCurve;
  2145. CK_MECHANISM_TYPE aeadMechanism;
  2146. CK_X2RATCHET_KDF_TYPE kdfMechanism;
  2147. } CK_X2RATCHET_INITIALIZE_PARAMS;
  2148. typedef CK_X2RATCHET_INITIALIZE_PARAMS
  2149. CK_PTR CK_X2RATCHET_INITIALIZE_PARAMS_PTR;
  2150. typedef struct CK_X2RATCHET_RESPOND_PARAMS {
  2151. CK_BYTE_PTR sk;
  2152. CK_OBJECT_HANDLE own_prekey;
  2153. CK_OBJECT_HANDLE initiator_identity;
  2154. CK_OBJECT_HANDLE own_public_identity;
  2155. CK_BBOOL bEncryptedHeader;
  2156. CK_ULONG eCurve;
  2157. CK_MECHANISM_TYPE aeadMechanism;
  2158. CK_X2RATCHET_KDF_TYPE kdfMechanism;
  2159. } CK_X2RATCHET_RESPOND_PARAMS;
  2160. typedef CK_X2RATCHET_RESPOND_PARAMS
  2161. CK_PTR CK_X2RATCHET_RESPOND_PARAMS_PTR;
  2162. /* NSS Specific defines */
  2163. /* stuff that for historic reasons is in this header file but should have
  2164. * been in pkcs11n.h */
  2165. #define CKK_INVALID_KEY_TYPE 0xffffffffUL
  2166. #include "pkcs11n.h"
  2167. /* undo packing */
  2168. #include "pkcs11u.h"
  2169. #endif