Page tree

C_VerifyInit()

Синтаксис

CK_DEFINE_FUNCTION(CK_RV, C_VerifyInit)(
  CK_SESSION_HANDLE hSession,
  CK_MECHANISM_PTR pMechanism,
  CK_OBJECT_HANDLE hKey
);

Параметры

hSession

[in]

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

pMechanism[in]

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

hKey

[in]Дескриптор ключа проверки подписи

Назначение

Функция инициализирует операцию проверки подписи, при которой подпись является приложением к данным.

Примечание

Атрибут CKA_VERIFY ключа проверки подписи должен иметь значение CK_TRUE.

После вызова C_VerifyInit приложение может:

  • вызвать C_Verify для проверки подписи над данными, переданными единым блоком;
  • вызвать C_VerifyUpdate один или несколько раз, а затем C_VerifyFinal, для проверки подписи над данными, переданными несколькими блоками.

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

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

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_VerifyFinal()

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

C_Verify()

Синтаксис

CK_DEFINE_FUNCTION(CK_RV, C_Verify)(
  CK_SESSION_HANDLE hSession,
  CK_BYTE_PTR pData,
  CK_ULONG ulDataLen,
  CK_BYTE_PTR pSignature,
  CK_ULONG ulSignatureLen
);

Параметры

hSession

[in]

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

pData[in]Указатель на подписанные данные 

ulDataLen

[in]Размер данных в байтах
pSignature [in]Указатель на подпись
pulSignatureLen [in]Размер подписи в байтах

Назначение

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

Примечание

Операция проверки обязательно должна быть предварительно инициализирована с помощью C_VerifyInit. Вызов C_Verify всегда завершает активную операцию проверки.

Успешный вызов C_Verify должен возвращать либо CKR_OK (проверяемая подпись действительна), либо CKR_SIGNATURE_INVALID (проверяемая подпись недействительна). Если подпись недействительна исключительно из‑за ее длины, следует вернуть CKR_SIGNATURE_LEN_RANGE. В любом из этих случаев активная операция проверки подписи завершается.

C_Verify не может использоваться для завершения многошаговой операции проверки и должна вызываться после C_VerifyInit без промежуточных вызовов C_VerifyUpdate.

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

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

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

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

CKR_ARGUMENTS_BAD,

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_SIGNATURE_INVALID,

CKR_SIGNATURE_LEN_RANGE.

Пример

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

CK_BYTE data[] = {...};
CK_BYTE signature[4];
CK_RV rv;

.
.
rv = C_VerifyInit(hSession, &mechanism, hKey);
if (rv == CKR_OK) {
	rv = C_Verify(hSession, data, sizeof(data), signature, sizeof(signature));
	.
	.
}

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

C_VerifyUpdate()

Синтаксис

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

Параметры

hSession

[in]

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

pPart[in]Указатель на часть подписанных данных

ulPartLen

[in]Размер части подписанных данных в байтах

Назначение

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

Примечание

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

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

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

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.

Пример

см. C_VerifyFinal()

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

C_VerifyFinal()

Синтаксис

CK_DEFINE_FUNCTION(CK_RV, C_VerifyFinal)(
  CK_SESSION_HANDLE hSession,
  CK_BYTE_PTR pSignature,
  CK_ULONG ulSignatureLen
);

Параметры

hSession

[in]

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

pSignature [in]Указатель на подпись
pulSignatureLen [in]Размер подписи в байтах

Назначение

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

Примечание

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

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

Успешный вызов C_VerifyFinal должен возвращать либо CKR_OK (проверяемая подпись действительна), либо CKR_SIGNATURE_INVALID (проверяемая подпись недействительна). Если подпись недействительна исключительно из‑за ее длины, следует вернуть CKR_SIGNATURE_LEN_RANGE. В любом из этих случаев активная операция проверки подписи завершается.

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

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_SIGNATURE_INVALID,

CKR_SIGNATURE_LEN_RANGE.

Пример

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_RV rv;

.
.
rv = C_VerifyInit(hSession, &mechanism, hKey);
if (rv == CKR_OK) {
  rv = C_VerifyUpdate(hSession, data, sizeof(data));
  .
  .
  rv = C_VerifyFinal(hSession, mac, sizeof(mac));
  .
  .
}

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

  • No labels