Secure External Scalable Key Storage Extensions

The extensions on this page are used for Scalable Key Storage.

CA_SIMExtract

Takes a list of object handles, extracts the objects using the given blob (binary large object) authorization data for protection and returns the extracted set of objects as a single data blob. Requires minimum Luna HSM Firmware 7.7.0 and Luna HSM Client 10.3.0.

NOTE   Individual SKS blobs are limited to 64KB in size. Large groups of keys, or larger data objects might need to be split across multiple blobs for extraction or insertion.

CA_SIMExtract(CK_SESSION_HANDLE    hSession, 
              CK_ULONG             ulHandleCount, 
              CK_OBJECT_HANDLE_PTR pHandleList, 
              CK_ULONG             ulAuthSecretCount, 
              CK_ULONG             ulAuthSubsetCount, 
              CKA_SIM_AUTH_FORM    authForm, 
              CK_ULONG_PTR         pulAuthSecretSizes, 
              CK_BYTE_PTR          *ppbAuthSecretList, 
              CK_BBOOL             deleteAfterExtract, 
              CK_ULONG_PTR         pulBlobSize, 
              CK_BYTE_PTR          pBlob); 
I/O Argument Description
In hSession The authenticated session handle.
ulHandleCount

The number of objects specified in pHandleList.

pHandleList

Pointer to an array of object handles to be extracted.

ulAuthSecretCount

The N value -- the total number of accepted authentication passwords.

ulAuthSubsetCount

The M value -- the minimum number of acceptable passwords required to decrypt the blob.

authForm

Two forms of authorization are supported: no authorization, and M-of-N passwords. Note that the password form of authorization does not cryptographically protect the key material, it consists of a comparison between the N encrypted values stored in the header versus M plain-text passwords specified upon insertion.

>0: no authentication

>1: M of N passwords

pulAuthSecretSizes

Pointer to an array of M string lengths for the passwords supplied in ppbAuthSecretList.

NULL when 0 is specified for authForm.

*ppbAuthSecretList

Pointer to an array of M password strings to use to authenticate the blob.

NULL when 0 is specified for authForm.

deleteAfterExtract

Boolean determining whether to delete the keys from the partition after extracting the blob.

Out pulBlobSize

The size of the extracted blob.

pBlob

The encrypted blob.

CA_SIMInsert

Takes a previously extracted blob as input, validates the blob authorization data, inserts the objects contained in the blob into the HSM, and returns the list of handles assigned to the objects. Requires minimum Luna HSM Firmware 7.7.0 and Luna HSM Client 10.3.0.

NOTE   Individual SKS blobs are limited to 64KB in size. Large groups of keys, or larger data objects might need to be split across multiple blobs for extraction or insertion.

CA_SIMInsert(CK_SESSION_HANDLE    hSession, 
             CK_ULONG             ulAuthSecretCount, 
             CKA_SIM_AUTH_FORM    authForm, 
             CK_ULONG_PTR         pulAuthSecretSizes, 
             CK_BYTE_PTR          *ppbAuthSecretList, 
             CK_ULONG             ulBlobSize, 
             CK_BYTE_PTR          pBlob, 
             CK_ULONG_PTR         pulHandleCount, 
             CK_OBJECT_HANDLE_PTR pHandleList); 
I/O Argument Description
In hSession The authenticated session handle.
ulAuthSecretCount

The number of authentication passwords supplied. Must be equal to M as defined during blob extraction.

authForm

Two forms of authorization are supported: no authorization, and M-of-N passwords. Note that the password form of authorization does not cryptographically protect the key material, it consists of a comparison between the N encrypted values stored in the header versus M plain-text passwords specified upon insertion.

>0: no authentication

>1: M of N passwords

pulAuthSecretSizes

Pointer to an array of M string lengths for the passwords supplied in ppbAuthSecretList.

*ppbAuthSecretList

Pointer to an array of M password strings to use to authenticate the blob.

ulBlobSize

The size of the encrypted blob.

pBlob

The encrypted blob.

Out pulHandleCount

Pointer to the number of objects that were inserted.

pHandleList

Pointer to an array of object handles assigned to the inserted objects.

CA_SIMInsertExtended

Takes a previously extracted blob as input, validates the blob authorization data, inserts the objects contained in the blob into the HSM, and returns the list of handles assigned to the objects. Requires Luna HSM Client 10.6.0 or newer.

CA_SIMInsertExtended(CK_SESSION_HANDLE    hSession, 
                     CK_ULONG             ulAuthSecretCount, 
                     CKA_SIM_AUTH_FORM    authForm, 
                     CK_ULONG_PTR         pulAuthSecretSizes, 
                     CK_BYTE_PTR          *ppbAuthSecretList, 
                     CK_ULONG             ulBlobSize, 
                     CK_BYTE_PTR          pBlob, 
                     CK_ULONG_PTR         pulHandleCount, 
                     CK_OBJECT_HANDLE_PTR pHandleList, 
                     CK_ULONG             ulStorageType, 
                     CK_ULONG             ulInsertMode); 
I/O Argument Description
In hSession The authenticated session handle.
ulAuthSecretCount

The N value -- the total number of accepted authentication passwords.

authForm

Two forms of authorization are supported: no authorization, and M-of-N passwords. Note that the password form of authorization does not cryptographically protect the key material, it consists of a comparison between the N encrypted values stored in the header versus M plain-text passwords specified upon insertion.

>0: no authentication

>1: M of N passwords

pulAuthSecretSizes

Pointer to an array of M string lengths for the passwords supplied in ppbAuthSecretList.

*ppbAuthSecretList

Pointer to an array of M password strings to use to authenticate the blob.

pulHandleCount

Pointer to the number of objects that were inserted.

pHandleList

Pointer to an array of object handles to be extracted.

ulStorageType

 

ulInsertMode

 

Out ulBlobSize

The size of the encrypted blob.

pBlob

The encrypted blob.

CA_SIMMultiSign

Takes a previously extracted blob as input, validates the authorization data, then uses the key material in the given key blob to sign the various pieces of data in the input data table, returning the signatures through the signature table. The key exists on the HSM only during the processing of the command and does not persist afterward. Requires minimum Luna HSM Firmware 7.7.0 and Luna HSM Client 10.3.0.

If the blob contains more than one key, the key in the blob that is suitable for the requested signature mechanism is used to sign the data. If there are multiple candidates, an error is returned.

CA_SIMMultiSign(CK_SESSION_HANDLE hSession, 
                CK_MECHANISM_PTR  pMechanism, 
                CK_ULONG          ulAuthSecretCount, 
                CKA_SIM_AUTH_FORM authForm, 
                CK_ULONG_PTR      pulAuthSecretSizes, 
                CK_BYTE_PTR       *ppbAuthSecretList, 
                CK_ULONG          ulBlobSize, 
                CK_BYTE_PTR       pBlob, 
                CK_ULONG          ulInputDataCount, 
                CK_ULONG_PTR      pulInputDataLengths, 
                CK_BYTE_PTR       *ppbInputDataList, 
                CK_ULONG_PTR      pulSignatureLengths, 
                CK_BYTE_PTR       *ppbSignatureList); 
I/O Argument Description
In hSession The authenticated session handle.
pMechanism

Specifies the mechanism to use for the operation.

ulAuthSecretCount

The N value -- the total number of accepted authentication passwords.

authForm

Two forms of authorization are supported: no authorization, and M-of-N passwords. Note that the password form of authorization does not cryptographically protect the key material, it consists of a comparison between the N encrypted values stored in the header versus M plain-text passwords specified upon insertion.

>0: no authentication

>1: M of N passwords

NOTE   Per-key authorization data is not passed in to the HSM with this call to authorize the inserted key object. If the inserted key has per-key authorization attribute defined, this function is tied to access-based per-key authorization.

pulAuthSecretSizes

Pointer to an array of M string lengths for the passwords supplied in ppbAuthSecretList.

*ppbAuthSecretList

Pointer to an array of M password strings to use to authenticate the blob.

ulBlobSize

The size of the encrypted blob.

pBlob

The encrypted blob.

ulInputDataCount The number of objects to be signed, specified in ppbInputDataList.
pulInputDataLengths Pointer to an array of lengths of the data objects specified in ppbInputDataList.
*ppbInputDataList Pointer to an array of data objects to be signed.
Out pulSignatureLengths Pointer to the lengths of the signed data objects.
*ppbSignatureList Pointer to the signed data objects.

CA_SMKRollover

Move the current SMK to the RolloverSMK slot and creates a new Primary SMK - this allows insertion/decrypting of existing blobs with Rollover SMK and re-encryption/extraction with the new Primary. Use again to end the operation and complete the rollover. Requires minimum Luna HSM Firmware 7.7.0 and Luna HSM Client 10.3.0.

CA_SMKRollover(CK_SESSION_HANDLE ulSessionNumber, 
               CK_ULONG          ulValue); 
I/O Argument Description
In ulSessionNumber

The session handle.

ulValue

Specifies whether to begin or end the rollover process, as described below:

>1: Begin the rollover process. Moves the current SMK to the RolloverSMK location, and creates a new Primary SMK. Blobs that were encrypted with the old SMK can still be inserted, decrypted (see CA_SIMInsert), and then re-extracted with the new SMK (see CA_SIMExtract).

>0: End the rollover process by deleting the RolloverSMK. Any blobs that are encrypted by this SMK are unrecoverable. Ensure that all important blobs have been re-inserted and re-extracted before using this option.