Page tree

C_SignInit()

Синтаксис

CK_DEFINEDECLARE_FUNCTION(CK_RV, C_SignInit)(
  CK_SESSION_HANDLE hSession,
  CK_MECHANISM_PTR pMechanism,
  CK_OBJECT_HANDLE hKey
);

Параметры

hSession

[in]

Дескриптор сессии

pMechanism[in]

Указатель на структуру с информацией о механизме подписи

hKey[in]

Дескриптор ключа подписи

Назначение

Функция инициализирует процесс подписи.

Примечание

Для того, чтобы ключ мог использоваться для выработки подписи, его атрибут CKA_SIGN должен иметь значение CK_TRUE.

После вызова C_SignInit приложение может либо вызвать C_Sign для подписи единого блока данных, либо вызвать C_SignUpdate один или несколько раз, а затем C_SignFinal — для подписи данных, разбитых на несколько блоков. Операция подписи считается активной до тех пор, пока приложение не выполнит вызов C_Sign или C_SignFinal. Только после этого подпись будет сформирована.

Чтобы обработать дополнительные данные (в одном или нескольких блоках) после завершения активной операции подписи, приложение должно снова вызвать C_SignInit.

Возвращаемые значения

CKR_OK – функция выполнена успешно.

Стандартные коды ошибок:

CKR_ARGUMENTS_BAD,

CKR_CRYPTOKI_NOT_INITIALIZED,

CKR_DEVICE_ERROR,

CKR_DEVICE_MEMORY,

CKR_DEVICE_REMOVED,

CKR_FUNCTION_CANCELED,

CKR_FUNCTION_FAILED,

CKR_GENERAL_ERROR,

CKR_HOST_MEMORY,

CKR_KEY_FUNCTION_NOT_PERMITTED,

CKR_KEY_HANDLE_INVALID,

CKR_KEY_SIZE_RANGE,

CKR_KEY_TYPE_INCONSISTENT,

CKR_MECHANISM_INVALID,

CKR_MECHANISM_PARAM_INVALID,

CKR_OPERATION_ACTIVE,

CKR_PIN_EXPIRED,

CKR_SESSION_CLOSED,

CKR_SESSION_HANDLE_INVALID,

CKR_USER_NOT_LOGGED_IN.

Пример

см. C_SignFinal()

к содержанию ↑

C_Sign()

Синтаксис

CK_DEFINE_FUNCTION(CK_RV, C_Sign)(
  CK_SESSION_HANDLE hSession,
  CK_BYTE_PTR pData,
  CK_ULONG ulDataLen,
  CK_BYTE_PTR pSignature,
  CK_ULONG_PTR pulSignatureLen
);

Параметры

hSession

[in]

Дескриптор сессии

pData[in]

Указатель на структуру с информацией о механизме подписи

ulDataLen[in]

Размер данных для подписи

pSignature[out]Указатель на массив с результатом подписи
pulSignatureLen[out]Указатель на размер массива с результатом подписи

Назначение

Функция выполняет подпись единого блока данных.

Примечание

Операция подписи обязательно должна быть предварительно инициализирована с помощью C_SignInit.

C_Sign не может использоваться для завершения операции подписи данных по частям и должна вызываться после C_SignInit без промежуточных вызовов C_SignUpdate.

Для большинства механизмов вызов C_Sign — то же самое, что и несколько вызовов C_SignUpdate, за которыми следует вызов C_SignFinal.

Возвращаемые значения

CKR_OK – функция выполнена успешно.

Стандартные коды ошибок:

CKR_ARGUMENTS_BAD,

CKR_BUFFER_TOO_SMALL,

CKR_CRYPTOKI_NOT_INITIALIZED,

CKR_DATA_INVALID,

CKR_DATA_LEN_RANGE,

CKR_DEVICE_ERROR,

CKR_DEVICE_MEMORY,

CKR_DEVICE_REMOVED,

CKR_FUNCTION_CANCELED,

CKR_FUNCTION_FAILED,

CKR_GENERAL_ERROR,

CKR_HOST_MEMORY,

CKR_OPERATION_NOT_INITIALIZED,

CKR_SESSION_CLOSED,

CKR_SESSION_HANDLE_INVALID,

CKR_USER_NOT_LOGGED_IN,

CKR_FUNCTION_REJECTED. 

Пример

см. C_SignFinal()

к содержанию ↑

C_SignUpdate()

Синтаксис

CK_DEFINE_FUNCTION(CK_RV, C_SignUpdate)(
  CK_SESSION_HANDLE hSession,
  CK_BYTE_PTR pPart,
  CK_ULONG ulPartLen
);

Параметры

hSession

[in]

Дескриптор сессии

pPart[in]

Указатель на массив с частью данных для подписи

ulPartLen[in]

Размер массива с частью данных для подписи

Назначение

Функция продолжает подпись данных по частям.

Примечание

Операция подписи обязательно должна быть предварительно инициализирована с помощью C_SignInit.

 C_SignUpdate может вызываться несколько раз подряд. Если вызов C_SignUpdate приводит к ошибке, текущая операция подписи немедленно завершается.

Возвращаемые значения

CKR_OK – функция выполнена успешно.

Стандартные коды ошибок:

CKR_ARGUMENTS_BAD,

CKR_CRYPTOKI_NOT_INITIALIZED,

CKR_DATA_LEN_RANGE,

CKR_DEVICE_ERROR,

CKR_DEVICE_MEMORY,

CKR_DEVICE_REMOVED,

CKR_FUNCTION_CANCELED,

CKR_FUNCTION_FAILED,

CKR_GENERAL_ERROR,

CKR_HOST_MEMORY,

CKR_OPERATION_NOT_INITIALIZED,

CKR_SESSION_CLOSED,

CKR_SESSION_HANDLE_INVALID,

CKR_USER_NOT_LOGGED_IN.

Пример

см. C_SignFinal()

к содержанию ↑

C_SignFinal()

Синтаксис

CK_DEFINE_FUNCTION(CK_RV, C_SignFinal)(
  CK_SESSION_HANDLE hSession,
  CK_BYTE_PTR pSignature,
  CK_ULONG_PTR pulSignatureLen
);

Параметры

hSession

[in]

Дескриптор сессии

pSignature[out]

Указатель на массив с результатом подписи

pulSignatureLen[out]

Указатель на размер массива с результатом подписи

Назначение

Функция завершает подпись данных по частям.

Примечание

Операция подписи обязательно должна быть предварительно инициализирована с помощью C_SignInit.

Вызов C_SignFinal всегда завершает активную операцию подписи данных.

Возвращаемые значения

CKR_OK – функция выполнена успешно.

Стандартные коды ошибок:

CKR_ARGUMENTS_BAD,

CKR_BUFFER_TOO_SMALL,

CKR_CRYPTOKI_NOT_INITIALIZED,

CKR_DATA_LEN_RANGE,

CKR_DEVICE_ERROR,

CKR_DEVICE_MEMORY,

CKR_DEVICE_REMOVED,

CKR_FUNCTION_CANCELED,

CKR_FUNCTION_FAILED,

CKR_GENERAL_ERROR,

CKR_HOST_MEMORY,

CKR_OPERATION_NOT_INITIALIZED,

CKR_SESSION_CLOSED,

CKR_SESSION_HANDLE_INVALID,

CKR_USER_NOT_LOGGED_IN,

CKR_FUNCTION_REJECTED.

Пример

CK_SESSION_HANDLE hSession;
CK_OBJECT_HANDLE hKey;
CK_MECHANISM mechanism = {
  CKM_DES_MAC, NULL_PTR, 0
};

CK_BYTE data[] = {...};
CK_BYTE mac[4];
CK_ULONG ulMacLen;
CK_RV rv;

.
.
rv = C_SignInit(hSession, &mechanism, hKey);
if (rv == CKR_OK) {
  rv = C_SignUpdate(hSession, data, sizeof(data));
  .
  .

  ulMacLen = sizeof(mac);
  rv = C_SignFinal(hSession, mac, &ulMacLen);
  .
  .
}

к содержанию ↑

  • No labels