tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

ck.api (22203B)


      1 # 
      2 # This Source Code Form is subject to the terms of the Mozilla Public
      3 # License, v. 2.0. If a copy of the MPL was not distributed with this
      4 # file, You can obtain one at http://mozilla.org/MPL/2.0/.
      5 
      6 # This file is in part derived from a file "pkcs11f.h" made available
      7 # by RSA Security at ftp://ftp.rsasecurity.com/pub/pkcs/pkcs-11/pkcs11f.h
      8 
      9 # Fields
     10 #  FUNCTION introduces a Cryptoki function
     11 #  CK_type specifies and introduces an argument
     12 #
     13 
     14 # General-purpose
     15 
     16 # C_Initialize initializes the Cryptoki library.
     17 FUNCTION C_Initialize
     18 CK_VOID_PTR pInitArgs   # if this is not NULL_PTR, it gets
     19                         # cast to CK_C_INITIALIZE_ARGS_PTR
     20                         # and dereferenced
     21 
     22 # C_Finalize indicates that an application is done with the
     23 # Cryptoki library.
     24 FUNCTION C_Finalize
     25 CK_VOID_PTR pReserved   # reserved.  Should be NULL_PTR
     26 
     27 # C_GetInfo returns general information about Cryptoki. 
     28 FUNCTION C_GetInfo
     29 CK_INFO_PTR pInfo       # location that receives information
     30 
     31 # C_GetFunctionList returns the function list. 
     32 FUNCTION C_GetFunctionList
     33 CK_FUNCTION_LIST_PTR_PTR ppFunctionList # receives pointer to function 
     34                                         # list
     35 
     36 
     37 # Slot and token management 
     38 
     39 # C_GetSlotList obtains a list of slots in the system. 
     40 FUNCTION C_GetSlotList
     41 CK_BBOOL       tokenPresent # only slots with tokens? 
     42 CK_SLOT_ID_PTR pSlotList    # receives array of slot IDs 
     43 CK_ULONG_PTR   pulCount     # receives number of slots 
     44 
     45 # C_GetSlotInfo obtains information about a particular slot in the 
     46 # system.
     47 FUNCTION C_GetSlotInfo
     48 CK_SLOT_ID       slotID     # the ID of the slot 
     49 CK_SLOT_INFO_PTR pInfo      # receives the slot information 
     50 
     51 # C_GetTokenInfo obtains information about a particular token in the 
     52 # system. 
     53 FUNCTION C_GetTokenInfo
     54 CK_SLOT_ID        slotID    # ID of the token's slot 
     55 CK_TOKEN_INFO_PTR pInfo     # receives the token information 
     56 
     57 # C_GetMechanismList obtains a list of mechanism types supported by a 
     58 # token. 
     59 FUNCTION C_GetMechanismList
     60 CK_SLOT_ID            slotID            # ID of token's slot 
     61 CK_MECHANISM_TYPE_PTR pMechanismList    # gets mech. array 
     62 CK_ULONG_PTR          pulCount          # gets # of mechs. 
     63 
     64 # C_GetMechanismInfo obtains information about a particular mechanism 
     65 # possibly supported by a token. 
     66 FUNCTION C_GetMechanismInfo
     67 CK_SLOT_ID            slotID    # ID of the token's slot 
     68 CK_MECHANISM_TYPE     type      # type of mechanism 
     69 CK_MECHANISM_INFO_PTR pInfo     # receives mechanism info 
     70 
     71 # C_InitToken initializes a token. 
     72 FUNCTION C_InitToken
     73 CK_SLOT_ID  slotID      # ID of the token's slot 
     74 CK_CHAR_PTR pPin        # the SO's initial PIN 
     75 CK_ULONG    ulPinLen    # length in bytes of the PIN 
     76 CK_CHAR_PTR pLabel      # 32-byte token label (blank padded) 
     77 
     78 # C_InitPIN initializes the normal user's PIN. 
     79 FUNCTION C_InitPIN
     80 CK_SESSION_HANDLE hSession  # the session's handle 
     81 CK_CHAR_PTR       pPin      # the normal user's PIN 
     82 CK_ULONG          ulPinLen  # length in bytes of the PIN 
     83 
     84 # C_SetPIN modifies the PIN of the user who is logged in. 
     85 FUNCTION C_SetPIN
     86 CK_SESSION_HANDLE hSession  # the session's handle 
     87 CK_CHAR_PTR       pOldPin   # the old PIN 
     88 CK_ULONG          ulOldLen  # length of the old PIN 
     89 CK_CHAR_PTR       pNewPin   # the new PIN 
     90 CK_ULONG          ulNewLen  # length of the new PIN 
     91 
     92 
     93 # Session management 
     94 
     95 # C_OpenSession opens a session between an application and a token. 
     96 FUNCTION C_OpenSession
     97 CK_SLOT_ID            slotID        # the slot's ID 
     98 CK_FLAGS              flags         # from CK_SESSION_INFO 
     99 CK_VOID_PTR           pApplication  # passed to callback 
    100 CK_NOTIFY             Notify        # callback function 
    101 CK_SESSION_HANDLE_PTR phSession     # gets session handle 
    102 
    103 # C_CloseSession closes a session between an application and a token. 
    104 FUNCTION C_CloseSession
    105 CK_SESSION_HANDLE hSession  # the session's handle 
    106 
    107 # C_CloseAllSessions closes all sessions with a token. 
    108 FUNCTION C_CloseAllSessions
    109 CK_SLOT_ID slotID   # the token's slot 
    110 
    111 # C_GetSessionInfo obtains information about the session. 
    112 FUNCTION C_GetSessionInfo
    113 CK_SESSION_HANDLE   hSession    # the session's handle 
    114 CK_SESSION_INFO_PTR pInfo       # receives session info 
    115 
    116 # C_GetOperationState obtains the state of the cryptographic 
    117 # operation in a session. 
    118 FUNCTION C_GetOperationState
    119 CK_SESSION_HANDLE hSession              # session's handle 
    120 CK_BYTE_PTR       pOperationState       # gets state 
    121 CK_ULONG_PTR      pulOperationStateLen  # gets state length 
    122 
    123 # C_SetOperationState restores the state of the cryptographic 
    124 # operation in a session. 
    125 FUNCTION C_SetOperationState
    126 CK_SESSION_HANDLE hSession              # session's handle 
    127 CK_BYTE_PTR      pOperationState        # holds state 
    128 CK_ULONG         ulOperationStateLen    # holds state length 
    129 CK_OBJECT_HANDLE hEncryptionKey         # en/decryption key 
    130 CK_OBJECT_HANDLE hAuthenticationKey     # sign/verify key 
    131 
    132 # C_Login logs a user into a token. 
    133 FUNCTION C_Login
    134 CK_SESSION_HANDLE hSession  # the session's handle 
    135 CK_USER_TYPE      userType  # the user type 
    136 CK_CHAR_PTR       pPin      # the user's PIN 
    137 CK_ULONG          ulPinLen  # the length of the PIN 
    138 
    139 # C_Logout logs a user out from a token. 
    140 FUNCTION C_Logout
    141 CK_SESSION_HANDLE hSession  # the session's handle 
    142 
    143 
    144 # Object management 
    145 
    146 # C_CreateObject creates a new object. 
    147 FUNCTION C_CreateObject
    148 CK_SESSION_HANDLE    hSession   # the session's handle 
    149 CK_ATTRIBUTE_PTR     pTemplate  # the object's template 
    150 CK_ULONG             ulCount    # attributes in template 
    151 CK_OBJECT_HANDLE_PTR phObject   # gets new object's handle. 
    152 
    153 # C_CopyObject copies an object, creating a new object for the copy.
    154 FUNCTION C_CopyObject
    155 CK_SESSION_HANDLE    hSession       # the session's handle 
    156 CK_OBJECT_HANDLE     hObject        # the object's handle 
    157 CK_ATTRIBUTE_PTR     pTemplate      # template for new object 
    158 CK_ULONG             ulCount        # attributes in template 
    159 CK_OBJECT_HANDLE_PTR phNewObject    # receives handle of copy 
    160 
    161 # C_DestroyObject destroys an object. 
    162 FUNCTION C_DestroyObject
    163 CK_SESSION_HANDLE hSession  # the session's handle 
    164 CK_OBJECT_HANDLE  hObject   # the object's handle 
    165 
    166 # C_GetObjectSize gets the size of an object in bytes. 
    167 FUNCTION C_GetObjectSize
    168 CK_SESSION_HANDLE hSession  # the session's handle 
    169 CK_OBJECT_HANDLE  hObject   # the object's handle 
    170 CK_ULONG_PTR      pulSize   # receives size of object 
    171 
    172 # C_GetAttributeValue obtains the value of one or more object 
    173 # attributes. 
    174 FUNCTION C_GetAttributeValue
    175 CK_SESSION_HANDLE hSession    # the session's handle 
    176 CK_OBJECT_HANDLE  hObject     # the object's handle 
    177 CK_ATTRIBUTE_PTR  pTemplate   # specifies attrs; gets vals 
    178 CK_ULONG          ulCount     # attributes in template 
    179 
    180 # C_SetAttributeValue modifies the value of one or more object 
    181 # attributes 
    182 FUNCTION C_SetAttributeValue
    183 CK_SESSION_HANDLE hSession    # the session's handle 
    184 CK_OBJECT_HANDLE  hObject     # the object's handle 
    185 CK_ATTRIBUTE_PTR  pTemplate   # specifies attrs and values 
    186 CK_ULONG          ulCount     # attributes in template 
    187 
    188 # C_FindObjectsInit initializes a search for token and session 
    189 # objects that match a template. 
    190 FUNCTION C_FindObjectsInit
    191 CK_SESSION_HANDLE hSession    # the session's handle 
    192 CK_ATTRIBUTE_PTR  pTemplate   # attribute values to match 
    193 CK_ULONG          ulCount     # attrs in search template 
    194 
    195 # C_FindObjects continues a search for token and session objects that 
    196 # match a template, obtaining additional object handles. 
    197 FUNCTION C_FindObjects
    198 CK_SESSION_HANDLE    hSession           # session's handle 
    199 CK_OBJECT_HANDLE_PTR phObject           # gets obj. handles 
    200 CK_ULONG             ulMaxObjectCount   # max handles to get 
    201 CK_ULONG_PTR         pulObjectCount     # actual # returned 
    202 
    203 # C_FindObjectsFinal finishes a search for token and session objects. 
    204 FUNCTION C_FindObjectsFinal
    205 CK_SESSION_HANDLE hSession  # the session's handle 
    206 
    207 
    208 # Encryption and decryption 
    209 
    210 # C_EncryptInit initializes an encryption operation. 
    211 FUNCTION C_EncryptInit
    212 CK_SESSION_HANDLE hSession    # the session's handle 
    213 CK_MECHANISM_PTR  pMechanism  # the encryption mechanism 
    214 CK_OBJECT_HANDLE  hKey        # handle of encryption key 
    215 
    216 # C_Encrypt encrypts single-part data. 
    217 FUNCTION C_Encrypt
    218 CK_SESSION_HANDLE hSession              # session's handle 
    219 CK_BYTE_PTR       pData                 # the plaintext data 
    220 CK_ULONG          ulDataLen             # bytes of plaintext 
    221 CK_BYTE_PTR       pEncryptedData        # gets ciphertext 
    222 CK_ULONG_PTR      pulEncryptedDataLen   # gets c-text size 
    223 
    224 # C_EncryptUpdate continues a multiple-part encryption operation. 
    225 FUNCTION C_EncryptUpdate
    226 CK_SESSION_HANDLE hSession              # session's handle 
    227 CK_BYTE_PTR       pPart                 # the plaintext data 
    228 CK_ULONG          ulPartLen             # plaintext data len 
    229 CK_BYTE_PTR       pEncryptedPart        # gets ciphertext 
    230 CK_ULONG_PTR      pulEncryptedPartLen   # gets c-text size 
    231 
    232 # C_EncryptFinal finishes a multiple-part encryption operation. 
    233 FUNCTION C_EncryptFinal
    234 CK_SESSION_HANDLE hSession                  # session handle 
    235 CK_BYTE_PTR       pLastEncryptedPart        # last c-text 
    236 CK_ULONG_PTR      pulLastEncryptedPartLen   # gets last size 
    237 
    238 # C_DecryptInit initializes a decryption operation. 
    239 FUNCTION C_DecryptInit
    240 CK_SESSION_HANDLE hSession      # the session's handle 
    241 CK_MECHANISM_PTR  pMechanism    # the decryption mechanism 
    242 CK_OBJECT_HANDLE  hKey          # handle of decryption key 
    243 
    244 # C_Decrypt decrypts encrypted data in a single part. 
    245 FUNCTION C_Decrypt
    246 CK_SESSION_HANDLE hSession              # session's handle 
    247 CK_BYTE_PTR       pEncryptedData        # ciphertext 
    248 CK_ULONG          ulEncryptedDataLen    # ciphertext length 
    249 CK_BYTE_PTR       pData                 # gets plaintext 
    250 CK_ULONG_PTR      pulDataLen            # gets p-text size 
    251 
    252 # C_DecryptUpdate continues a multiple-part decryption operation. 
    253 FUNCTION C_DecryptUpdate
    254 CK_SESSION_HANDLE hSession              # session's handle 
    255 CK_BYTE_PTR       pEncryptedPart        # encrypted data 
    256 CK_ULONG          ulEncryptedPartLen    # input length 
    257 CK_BYTE_PTR       pPart                 # gets plaintext 
    258 CK_ULONG_PTR      pulPartLen            # p-text size 
    259 
    260 # C_DecryptFinal finishes a multiple-part decryption operation. 
    261 FUNCTION C_DecryptFinal
    262 CK_SESSION_HANDLE hSession          # the session's handle 
    263 CK_BYTE_PTR       pLastPart         # gets plaintext 
    264 CK_ULONG_PTR      pulLastPartLen    # p-text size 
    265 
    266 
    267 # Message digesting 
    268 
    269 # C_DigestInit initializes a message-digesting operation. 
    270 FUNCTION C_DigestInit
    271 CK_SESSION_HANDLE hSession      # the session's handle 
    272 CK_MECHANISM_PTR  pMechanism    # the digesting mechanism 
    273 
    274 # C_Digest digests data in a single part. 
    275 FUNCTION C_Digest
    276 CK_SESSION_HANDLE hSession      # the session's handle 
    277 CK_BYTE_PTR       pData         # data to be digested 
    278 CK_ULONG          ulDataLen     # bytes of data to digest 
    279 CK_BYTE_PTR       pDigest       # gets the message digest 
    280 CK_ULONG_PTR      pulDigestLen  # gets digest length 
    281 
    282 # C_DigestUpdate continues a multiple-part message-digesting operation.
    283 FUNCTION C_DigestUpdate
    284 CK_SESSION_HANDLE hSession  # the session's handle 
    285 CK_BYTE_PTR       pPart     # data to be digested 
    286 CK_ULONG          ulPartLen # bytes of data to be digested 
    287 
    288 # C_DigestKey continues a multi-part message-digesting operation, by 
    289 # digesting the value of a secret key as part of the data already 
    290 # digested. 
    291 FUNCTION C_DigestKey
    292 CK_SESSION_HANDLE hSession  # the session's handle 
    293 CK_OBJECT_HANDLE  hKey      # secret key to digest 
    294 
    295 # C_DigestFinal finishes a multiple-part message-digesting operation. 
    296 FUNCTION C_DigestFinal
    297 CK_SESSION_HANDLE hSession      # the session's handle 
    298 CK_BYTE_PTR       pDigest       # gets the message digest 
    299 CK_ULONG_PTR      pulDigestLen  # gets byte count of digest 
    300 
    301 
    302 # Signing and MACing 
    303 
    304 # C_SignInit initializes a signature (private key encryption) 
    305 # operation, where the signature is (will be) an appendix to the 
    306 # data, and plaintext cannot be recovered from the signature. 
    307 FUNCTION C_SignInit
    308 CK_SESSION_HANDLE hSession      # the session's handle 
    309 CK_MECHANISM_PTR  pMechanism    # the signature mechanism 
    310 CK_OBJECT_HANDLE  hKey          # handle of signature key 
    311 
    312 # C_Sign signs (encrypts with private key) data in a single part, 
    313 # where the signature is (will be) an appendix to the data, and 
    314 # plaintext cannot be recovered from the signature. 
    315 FUNCTION C_Sign
    316 CK_SESSION_HANDLE hSession          # the session's handle 
    317 CK_BYTE_PTR       pData             # the data to sign 
    318 CK_ULONG          ulDataLen         # count of bytes to sign 
    319 CK_BYTE_PTR       pSignature        # gets the signature 
    320 CK_ULONG_PTR      pulSignatureLen   # gets signature length 
    321 
    322 # C_SignUpdate continues a multiple-part signature operation, where 
    323 # the signature is (will be) an appendix to the data, and plaintext 
    324 # cannot be recovered from the signature. 
    325 FUNCTION C_SignUpdate
    326 CK_SESSION_HANDLE hSession  # the session's handle 
    327 CK_BYTE_PTR       pPart     # the data to sign 
    328 CK_ULONG          ulPartLen # count of bytes to sign 
    329 
    330 # C_SignFinal finishes a multiple-part signature operation, returning 
    331 # the signature. 
    332 FUNCTION C_SignFinal
    333 CK_SESSION_HANDLE hSession          # the session's handle 
    334 CK_BYTE_PTR       pSignature        # gets the signature 
    335 CK_ULONG_PTR      pulSignatureLen   # gets signature length 
    336 
    337 # C_SignRecoverInit initializes a signature operation, where the data 
    338 # can be recovered from the signature. 
    339 FUNCTION C_SignRecoverInit
    340 CK_SESSION_HANDLE hSession      # the session's handle 
    341 CK_MECHANISM_PTR  pMechanism    # the signature mechanism 
    342 CK_OBJECT_HANDLE  hKey          # handle of the signature key 
    343 
    344 # C_SignRecover signs data in a single operation, where the data can 
    345 # be recovered from the signature. 
    346 FUNCTION C_SignRecover
    347 CK_SESSION_HANDLE hSession          # the session's handle 
    348 CK_BYTE_PTR       pData             # the data to sign 
    349 CK_ULONG          ulDataLen         # count of bytes to sign 
    350 CK_BYTE_PTR       pSignature        # gets the signature 
    351 CK_ULONG_PTR      pulSignatureLen   # gets signature length 
    352 
    353 
    354 # Verifying signatures and MACs 
    355 
    356 # C_VerifyInit initializes a verification operation, where the 
    357 # signature is an appendix to the data, and plaintext cannot cannot 
    358 # be recovered from the signature (e.g. DSA). 
    359 FUNCTION C_VerifyInit
    360 CK_SESSION_HANDLE hSession      # the session's handle 
    361 CK_MECHANISM_PTR  pMechanism    # the verification mechanism 
    362 CK_OBJECT_HANDLE  hKey          # verification key  
    363 
    364 # C_Verify verifies a signature in a single-part operation, where the 
    365 # signature is an appendix to the data, and plaintext cannot be 
    366 # recovered from the signature. 
    367 FUNCTION C_Verify
    368 CK_SESSION_HANDLE hSession          # the session's handle 
    369 CK_BYTE_PTR       pData             # signed data 
    370 CK_ULONG          ulDataLen         # length of signed data 
    371 CK_BYTE_PTR       pSignature        # signature 
    372 CK_ULONG          ulSignatureLen    # signature length
    373 
    374 # C_VerifyUpdate continues a multiple-part verification operation, 
    375 # where the signature is an appendix to the data, and plaintext cannot be 
    376 # recovered from the signature. 
    377 FUNCTION C_VerifyUpdate
    378 CK_SESSION_HANDLE hSession  # the session's handle 
    379 CK_BYTE_PTR       pPart     # signed data 
    380 CK_ULONG          ulPartLen # length of signed data 
    381 
    382 # C_VerifyFinal finishes a multiple-part verification operation, 
    383 # checking the signature. 
    384 FUNCTION C_VerifyFinal
    385 CK_SESSION_HANDLE hSession          # the session's handle 
    386 CK_BYTE_PTR       pSignature        # signature to verify 
    387 CK_ULONG          ulSignatureLen    # signature length 
    388 
    389 # C_VerifyRecoverInit initializes a signature verification operation, 
    390 # where the data is recovered from the signature. 
    391 FUNCTION C_VerifyRecoverInit
    392 CK_SESSION_HANDLE hSession      # the session's handle 
    393 CK_MECHANISM_PTR  pMechanism    # the verification mechanism 
    394 CK_OBJECT_HANDLE  hKey          # verification key 
    395 
    396 # C_VerifyRecover verifies a signature in a single-part operation, 
    397 # where the data is recovered from the signature. 
    398 FUNCTION C_VerifyRecover
    399 CK_SESSION_HANDLE hSession          # the session's handle 
    400 CK_BYTE_PTR       pSignature        # signature to verify 
    401 CK_ULONG          ulSignatureLen    # signature length 
    402 CK_BYTE_PTR       pData             # gets signed data 
    403 CK_ULONG_PTR      pulDataLen        # gets signed data len 
    404 
    405 
    406 # Dual-function cryptographic operations 
    407 
    408 # C_DigestEncryptUpdate continues a multiple-part digesting and 
    409 # encryption operation. 
    410 FUNCTION C_DigestEncryptUpdate
    411 CK_SESSION_HANDLE hSession              # session's handle 
    412 CK_BYTE_PTR       pPart                 # the plaintext data 
    413 CK_ULONG          ulPartLen             # plaintext length 
    414 CK_BYTE_PTR       pEncryptedPart        # gets ciphertext 
    415 CK_ULONG_PTR      pulEncryptedPartLen   # gets c-text length 
    416 
    417 # C_DecryptDigestUpdate continues a multiple-part decryption and 
    418 # digesting operation. 
    419 FUNCTION C_DecryptDigestUpdate
    420 CK_SESSION_HANDLE hSession              # session's handle 
    421 CK_BYTE_PTR       pEncryptedPart        # ciphertext 
    422 CK_ULONG          ulEncryptedPartLen    # ciphertext length 
    423 CK_BYTE_PTR       pPart                 # gets plaintext 
    424 CK_ULONG_PTR      pulPartLen            # gets plaintext len 
    425 
    426 # C_SignEncryptUpdate continues a multiple-part signing and 
    427 # encryption operation. 
    428 FUNCTION C_SignEncryptUpdate
    429 CK_SESSION_HANDLE hSession              # session's handle 
    430 CK_BYTE_PTR       pPart                 # the plaintext data 
    431 CK_ULONG          ulPartLen             # plaintext length 
    432 CK_BYTE_PTR       pEncryptedPart        # gets ciphertext 
    433 CK_ULONG_PTR      pulEncryptedPartLen   # gets c-text length 
    434 
    435 # C_DecryptVerifyUpdate continues a multiple-part decryption and 
    436 # verify operation. 
    437 FUNCTION C_DecryptVerifyUpdate
    438 CK_SESSION_HANDLE hSession              # session's handle 
    439 CK_BYTE_PTR       pEncryptedPart        # ciphertext 
    440 CK_ULONG          ulEncryptedPartLen    # ciphertext length 
    441 CK_BYTE_PTR       pPart                 # gets plaintext 
    442 CK_ULONG_PTR      pulPartLen            # gets p-text length 
    443 
    444 
    445 # Key management 
    446 
    447 # C_GenerateKey generates a secret key, creating a new key object. 
    448 FUNCTION C_GenerateKey
    449 CK_SESSION_HANDLE    hSession   # the session's handle 
    450 CK_MECHANISM_PTR     pMechanism # key generation mech. 
    451 CK_ATTRIBUTE_PTR     pTemplate  # template for new key 
    452 CK_ULONG             ulCount    # # of attrs in template 
    453 CK_OBJECT_HANDLE_PTR phKey      # gets handle of new key 
    454 
    455 # C_GenerateKeyPair generates a public-key/private-key pair, creating 
    456 # new key objects. 
    457 FUNCTION C_GenerateKeyPair
    458 CK_SESSION_HANDLE    hSession                   # session handle
    459 CK_MECHANISM_PTR     pMechanism                 # key-gen mech.
    460 CK_ATTRIBUTE_PTR     pPublicKeyTemplate         # template for pub. key
    461 CK_ULONG             ulPublicKeyAttributeCount  # # pub. attrs.
    462 CK_ATTRIBUTE_PTR     pPrivateKeyTemplate        # template for priv. key
    463 CK_ULONG             ulPrivateKeyAttributeCount # # priv. attrs.
    464 CK_OBJECT_HANDLE_PTR phPublicKey                # gets pub. key handle
    465 CK_OBJECT_HANDLE_PTR phPrivateKey               # gets priv. key handle
    466 
    467 # C_WrapKey wraps (i.e., encrypts) a key. 
    468 FUNCTION C_WrapKey
    469 CK_SESSION_HANDLE hSession         # the session's handle 
    470 CK_MECHANISM_PTR  pMechanism       # the wrapping mechanism 
    471 CK_OBJECT_HANDLE  hWrappingKey     # wrapping key 
    472 CK_OBJECT_HANDLE  hKey             # key to be wrapped 
    473 CK_BYTE_PTR       pWrappedKey      # gets wrapped key 
    474 CK_ULONG_PTR      pulWrappedKeyLen # gets wrapped key size 
    475 
    476 # C_UnwrapKey unwraps (decrypts) a wrapped key, creating a new key 
    477 # object. 
    478 FUNCTION C_UnwrapKey
    479 CK_SESSION_HANDLE    hSession           # session's handle 
    480 CK_MECHANISM_PTR     pMechanism         # unwrapping mech. 
    481 CK_OBJECT_HANDLE     hUnwrappingKey     # unwrapping key 
    482 CK_BYTE_PTR          pWrappedKey        # the wrapped key 
    483 CK_ULONG             ulWrappedKeyLen    # wrapped key len 
    484 CK_ATTRIBUTE_PTR     pTemplate          # new key template 
    485 CK_ULONG             ulAttributeCount   # template length 
    486 CK_OBJECT_HANDLE_PTR phKey              # gets new handle 
    487 
    488 # C_DeriveKey derives a key from a base key, creating a new key object.
    489 FUNCTION C_DeriveKey
    490 CK_SESSION_HANDLE    hSession           # session's handle 
    491 CK_MECHANISM_PTR     pMechanism         # key deriv. mech. 
    492 CK_OBJECT_HANDLE     hBaseKey           # base key 
    493 CK_ATTRIBUTE_PTR     pTemplate          # new key template 
    494 CK_ULONG             ulAttributeCount   # template length 
    495 CK_OBJECT_HANDLE_PTR phKey              # gets new handle 
    496 
    497 
    498 # Random number generation 
    499 
    500 # C_SeedRandom mixes additional seed material into the token's random 
    501 # number generator. 
    502 FUNCTION C_SeedRandom
    503 CK_SESSION_HANDLE hSession  # the session's handle 
    504 CK_BYTE_PTR       pSeed     # the seed material 
    505 CK_ULONG          ulSeedLen # length of seed material 
    506 
    507 # C_GenerateRandom generates random data. 
    508 FUNCTION C_GenerateRandom
    509 CK_SESSION_HANDLE hSession      # the session's handle 
    510 CK_BYTE_PTR       RandomData    # receives the random data 
    511 CK_ULONG          ulRandomLen   # # of bytes to generate 
    512 
    513 
    514 # Parallel function management 
    515 
    516 # C_GetFunctionStatus is a legacy function; it obtains an updated 
    517 # status of a function running in parallel with an application.
    518 FUNCTION C_GetFunctionStatus
    519 CK_SESSION_HANDLE hSession  # the session's handle 
    520 
    521 # C_CancelFunction is a legacy function; it cancels a function running 
    522 # in parallel. 
    523 FUNCTION C_CancelFunction
    524 CK_SESSION_HANDLE hSession  # the session's handle 
    525 
    526 
    527 # Functions added in for Cryptoki Version 2.01 or later 
    528 
    529 # C_WaitForSlotEvent waits for a slot event (token insertion, removal, 
    530 # etc.) to occur. 
    531 FUNCTION C_WaitForSlotEvent
    532 CK_FLAGS       flags    # blocking/nonblocking flag 
    533 CK_SLOT_ID_PTR pSlot    # location that receives the slot ID 
    534 CK_VOID_PTR    pRserved # reserved.  Should be NULL_PTR 
    535 
    536 ## C_ConfigureSlot passes an installation-specified bytestring to a 
    537 ## slot. 
    538 #FUNCTION C_ConfigureSlot
    539 #CK_SLOT_ID slotID      # the slot to configure 
    540 #CK_BYTE_PTR pConfig    # the configuration string 
    541 #CK_ULONG ulConfigLen   # length of the config string