Функции PKI-расширения

pkcs7Sign

CK_RV pkcs7Sign(CK_SESSION_HANDLE hSession, CK_BYTE_PTR pData, CK_ULONG ulDataLength, CK_OBJECT_HANDLE hSignCertificate, CK_BYTE_PTR_PTR pEnvelope, CK_ULONG_PTR oulEnvelopeSize, CK_OBJECT_HANDLE hPrivateKey, CK_OBJECT_HANDLE_PTR phCertificates, CK_ULONG ulCertificatesCount, CK_FLAGS flags)
Параметры:
  • hSession (in) – дескриптор сеанса.
  • pData (in) – указатель на байтовый массив типа CK_BYTE, содержащий данные для подписи.
  • ulDataLength (in) – длина данных для подписи.
  • hSignCertificate (in) – дескриптор сертификата создателя сообщения.
  • pEnvelope (out) – указатель на указатель на массив байтов (буфер), в который передается подпись или подписанное сообщение. Память для буфера выделяется самой функцией pkcs7Sign. После окончания работы с ним необходимо освободить его, вызвав функцию freeBuffer().
  • pulEnvelopeSize (out) – указатель на переменную, в которую записывается длина буфера, на который указывает envelope.
  • hPrivateKey (in) – дескриптор закрытого ключа создателя сообщения. Может принимать значение 0, при котором поиск закрытого ключа будет осуществляться по идентификатору ключевой пары (CKA_ID из сертификата).
  • phCertificates (in) – указатель на массив дескрипторов сертификатов, которые следует добавить в сообщение.
  • ulCertificatesCount (in) – количество дескрипторов сертификатов в массиве, на который указывает certificates.
  • flags (in) – флаги.

Поле flags принимает следующие флаги:

  • PKCS7_DETACHED_SIGNATURE – если этот флаг установлен, то исходные данные не сохраняются вместе с подписью (отсоединенная подпись). В обратном случае исходные данные сохраняются вместе с подписью (присоединенная подпись).
  • PKCS7_HARDWARE_HASH1 – если этот флаг установлен, то хэширование будет осуществляться аппаратно устройством eToken ГОСТ или JaCarta ГОСТ. В обратном случае хэширование будет осуществляться программно.

Функция pkcs7Sign используется для подписи объектов данных в формате, определённом стандартом PKCS #7 версии 1.5. Сертификат, используемый при формировании подписи, должен располагаться в памяти устройства.

Запускается в режимах

Результат:Функция возвращает стандартные ошибки, предусмотренные спецификацией PKCS #11.

Совет

Полный список ошибок см. в приложении.

pkcs7SignEx

CK_RV pkcs7SignEx(CK_SESSION_HANDLE session, CK_BYTE_PTR data, CK_ULONG dataLength, CK_BYTE_PTR signCertificate, CK_ULONG signCertificateLength, CK_BYTE_PTR* envelope, CK_ULONG_PTR envelopeLength, CK_OBJECT_HANDLE privateKey, CK_OBJECT_HANDLE_PTR certificates, CK_ULONG certificatesLength, CK_ULONG flags)
Параметры:
  • session (in) – дескриптор сеанса.
  • data (in) – указатель на байтовый массив типа CK_BYTE, содержащий данные для подписи.
  • dataLength (in) – длина данных для подписи.
  • signCertificate (in) – массив байт, содержащий сертификат создателя сообщения в DER-кодировке.
  • signCertificateLength (in) – длина сертификата создателя сообщения.
  • envelope (out) – указатель на указатель на массив байтов (буфер), в который передается подпись или подписанное сообщение. Память для буфера выделяется самой функцией pkcs7SignEx. После окончания работы с ним необходимо освободить его, вызвав функцию freeBuffer().
  • envelopeLength (out) – указатель на переменную, в которую записывается длина буфера, на который указывает envelope.
  • privateKey (in) – дескриптор закрытого ключа создателя сообщения.
  • certificates (in) – указатель на массив дескрипторов сертификатов, которые следует добавить в сообщение.
  • certificatesLength (in) – количество дескрипторов сертификатов в массиве, на который указывает certificates.
  • flags (in) – флаги.

Поле flags принимает следующие флаги:

  • PKCS7_DETACHED_SIGNATURE – если этот флаг установлен, то исходные данные не сохраняются вместе с подписью (отсоединенная подпись). В обратном случае исходные данные сохраняются вместе с подписью (присоединенная подпись).
  • PKCS7_HARDWARE_HASH1 – если этот флаг установлен, то хэширование будет осуществляться аппаратно устройством eToken ГОСТ или JaCarta ГОСТ. В обратном случае хэширование будет осуществляться программно.

Функция pkcs7SignEx используется для подписи объектов данных в формате, определённом стандартом PKCS #7 версии 1.5 с расширенным набором параметров. В отличие от функции pkcs7Sign, сертификат должен быть указан явно, а параметр privateKey не должен принимать значение 0.

Запускается в режимах

Результат:Функция возвращает стандартные ошибки, предусмотренные спецификацией PKCS #11.

Совет

Полный список ошибок см. в приложении.

pkcs7Verify

CK_RV pkcs7Verify(CK_BYTE_PTR pEnvelope, CK_ULONG ulEnvelopeSize, CK_BYTE_PTR pData, CK_ULONG ulDataSize)
Параметры:
  • pEnvelope (in) – указатель на массив типа CK_BYTE, содержащий объект данных (сообщение), подписанный в формате, соответствующем стандарту PKCS #7.
  • ulEnvelopeSize (in) – размер объекта данных, на который ссылается envelope.
  • pData (in) – указатель на массив типа CK_BYTE, содержащий данные, если таковые отсутствуют в сообщении.
  • ulDataSize (in) –

    размер данных в массиве, на который указывает data.

    Примечание

    Если данные передаются в сообщении, pData и ulDataSize должны равняться нулю.

Функция pkcs7Verify используется для проверки ЭП в сообщениях, формат которых соответствует стандарту PKCS #7. Возвращаемое значение определяет результат проверки:

  • CKR_OK – подпись действительна,
  • CKR_SIGNATURE_INVALID – подпись недействительна.

Запускается в режимах

Результат:Функция возвращает стандартные ошибки, предусмотренные спецификацией PKCS #11.

Совет

Полный список ошибок см. в приложении.

pkcs7VerifyHW

CK_RV pkcs7VerifyHW(CK_SESSION_HANDLE hSession, CK_BYTE_PTR pEnvelope, CK_ULONG pEnvelopeSize, CK_BYTE_PTR pData, CK_ULONG pDataSize, CK_FLAGS flags)
Параметры:
  • hSession (in) – дескриптор сеанса.
  • pEnvelope (in) – указатель на массив типа CK_BYTE, содержащий объект данных (сообщение), подписанный в формате, соответствующем стандарту PKCS #7.
  • pEnvelopeSize (in) – размер объекта данных, на который ссылается envelope.
  • pData (in) – указатель на массив типа CK_BYTE, содержащий данные, если таковые отсутствуют в сообщении.
  • pDataSize (in) –

    размер данных в массиве, на который указывает pData.

    Примечание

    Если данные передаются в сообщении, pData и pDataSize должны равняться нулю.

  • flags – флаги. Может принимать значение 0 или PKCS7_HARDWARE_HASH.

Проверка подписи в PKCS#7 сообщении типа signed data. Используется аппаратная реализация проверки подписи.

Запускается в режимах

Результат:Функция возвращает стандартные ошибки, предусмотренные спецификацией PKCS #11.

Совет

Полный список ошибок см. в приложении.

pkcs7TrustedVerifyHW

CK_RV pkcs7TrustedVerifyHW(CK_SESSION_HANDLE hSession, CK_BYTE_PTR pEnvelope, CK_ULONG pEnvelopeSize, CK_BYTE_PTR pData, CK_ULONG pDataSize, CK_BYTE_PTR pTrustedSigner, CK_ULONG pTrustedSignerSize, CK_FLAGS flags)
Параметры:
  • hSession (in) – дескриптор сеанса.
  • pEnvelope (in) – указатель на массив типа CK_BYTE, содержащий объект данных (сообщение), подписанный в формате, соответствующем стандарту PKCS #7.
  • pEnvelopeSize (in) – размер объекта данных, на который ссылается pEnvelope.
  • pData (in) – указатель на массив типа CK_BYTE, содержащий данные, если таковые отсутствуют в сообщении.
  • pDataSize (in) –

    размер данных в массиве, на который указывает pData.

    Примечание

    Если данные передаются в сообщении, pData и pDataSize должны равняться нулю.

  • pTrustedSigner (in) – буфер с доверенным сертификатом в DER-формате.
  • pTrustedSignerSize (in) – длина буфера с доверенным сертификатом.
  • flags (in) – флаги. Может принимать значение 0 или PKCS7_HARDWARE_HASH.

Проверка подписи в PKCS#7 сообщении типа signed data с дополнительной проверкой на доверие к сертификату подписанта. Используется аппаратная реализация проверки подписи.

Запускается в режимах

Результат:Функция возвращает стандартные ошибки, предусмотренные спецификацией PKCS #11.

Совет

Полный список ошибок см. в приложении.

pkcs7Parse

CK_RV pkcs7Parse(CK_BYTE_PTR pEnvelope, CK_ULONG ulEnvelopeSize, CK_BYTE_PTR* pSignerCertificate, CK_ULONG_PTR pulSignerCertificate, CK_BYTE_PTR* pAttachedData, CK_ULONG_PTR ulAttachedDataSize)
Параметры:
  • pEnvelope (in) – указатель на массив типа CK_BYTE, содержащий объект данных (сообщение), подписанный в формате, соответствующем стандарту PKCS #7.
  • ulEnvelopeSize (in) – размер объекта данных, на который ссылается pEnvelope.
  • pSignerCertificate (out) – буфер для записи сертификата.
  • pulSignerCertificate (out) – размер сертификата.
  • pAttachedData (out) – буфер для записи данных.
  • ulAttachedDataSize (out) – размер данных.

Извлечение данных и сертификата подписанта из PKCS #7 контейнера.

Запускается в режимах

Результат:Функция возвращает стандартные ошибки, предусмотренные спецификацией PKCS #11.

Совет

Полный список ошибок см. в приложении.

pkcs7ParseEx

CK_RV pkcs7ParseEx(CK_BYTE_PTR pEnvelope, CK_ULONG ulEnvelopeSize, CK_BYTE_PTR* ppSignerCert, CK_ULONG_PTR pulSignerCertLen, CK_BYTE_PTR* ppAttachedData, CK_ULONG_PTR pulAttachedDataLength, CK_BYTE_PTR* ppSignature, CK_ULONG_PTR pulSignatureLength)
Параметры:
  • pEnvelope (in) – указатель на массив типа CK_BYTE, содержащий объект данных (сообщение), подписанный в формате, соответствующем стандарту PKCS #7.
  • ulEnvelopeSize (in) – размер объекта данных, на который ссылается pEnvelope.
  • ppSignerCert (out) – буфер для записи сертификата.
  • pulSignerCertLen (out) – размер сертификата.
  • ppAttachedData (out) – буфер для записи данных.
  • pulAttachedDataLength (out) – размер данных.
  • ppSignature (out) – буфер для записи подписи.
  • pulSignatureLength (out) – размер подписи.

Извлечение данных, подписи и сертификата подписанта из PKCS#7 контейнера.

Запускается в режимах

Результат:Функция возвращает стандартные ошибки, предусмотренные спецификацией PKCS #11.

Совет

Полный список ошибок см. в приложении.

createCSR

CK_RV createCSR(CK_SESSION_HANDLE session, CK_OBJECT_HANDLE publicKey, CK_CHAR_PTR* dn, CK_ULONG dnLength, CK_BYTE_PTR* csr, CK_ULONG_PTR csrLength, CK_OBJECT_HANDLE privateKey, CK_CHAR_PTR* attributes, CK_ULONG attributesLength, CK_CHAR_PTR* extensions, CK_ULONG extensionsLength)
Параметры:
  • session (in) – дескриптор сеанса.
  • publicKey (in) – дескриптор открытого ключа для создания сертификата.
  • dn (in) –

    указатель на массив типа CK_BYTE, задающий отличительное имя (distinguished name). Должен состоять из пар строк:

    • Первая строка должна содержать тип или идентификатор поля (OID), например: CN или 2.5.4.3.
    • Вторая строка – значение поля, например: Andrey Borisov в кодировке UTF-8.
  • dnLength (in) – количество строк в массиве, на который указывает dn.
  • csr (out) – указатель на массив байтов, в который будет записан созданный запрос на сертификат. Память для массива выделяется самой функцией createCSR. После окончания работы с массивом выделенную для него память необходимо освободить, вызвав функцию freeBuffer().
  • csrLength (out) – указатель на переменную, в которой сохраняется размер массива, на который указывает csr.
  • privatekey (in) – дескриптор закрытого ключа, соответствующего открытому ключу, на который ссылается publicKey. Если privateKey принимает значение 0, то поиск закрытого ключа будет осуществляться по идентификатору ключевой пары (CKA_ID открытого ключа).
  • attributes (in) –

    указатель на массив типа CK_BYTE, задающий дополнительные атрибуты. Должен состоять из пар строк:

    • Первая строка должна содержать тип или идентификатор поля (OID).
    • Вторая строка – значение поля.
  • attributeslength (in) – количество строк в массиве, на который указывает attributes.
  • extensions (in) –

    указатель на массив типа CK_BYTE, задающий расширения. Должен состоять из пар строк:

    • Первая строка должна содержать тип или идентификатор поля (OID).
    • Вторая строка – значение поля.
  • extensionsLength (in) – количество строк в массиве, на который указывает extensions.

Функция формирует запрос на выпуск сертификата в формате PKCS #10.

Запускается в режимах

Результат:Функция возвращает стандартные ошибки, предусмотренные спецификацией PKCS #11.

Совет

Полный список ошибок см. в приложении.

Пример использования

Пример запроса на выпуск сетификата на языке C:

// дескриптор сессии
CK_SESSION_HANDLE session = 0;

// дескриптор открытого ключа
CK_OBJECT_HANDLE publicKey;

// distinguished name для запроса на сертификат
CK_CHAR_PTR dn[] =
{
  (CK_CHAR_PTR)"CN",
  (CK_CHAR_PTR)"Ivan Ivanov",
  (CK_CHAR_PTR)"C",
  (CK_CHAR_PTR)"RU"
};

// extensions для  запроса на сертификат
CK_CHAR_PTR exts[] =
{
  //(CK_CHAR_PTR)"1.2.3.5",
  //(CK_CHAR_PTR)"DER:01020304",
  //(CK_CHAR_PTR)"2.5.29.16",
  //(CK_CHAR_PTR)"ASN1:SEQUENCE:privateKeyUsagePeriod\n[privateKeyUsagePeriod]\nnotAfter=IMPLICIT:1,GENERALIZEDTIME:20150101000000Z",
  //(CK_CHAR_PTR)"subjectKeyIdentifier",
  //(CK_CHAR_PTR)"1234567890abcdef",
  //(CK_CHAR_PTR)"1.2.3.4",
  //(CK_CHAR_PTR)"ASN1:IA5STRING:This is a string",
  (CK_CHAR_PTR)"keyUsage",
  (CK_CHAR_PTR)"digitalSignature,keyEncipherment"
};

// запрос на сертификат
CK_BYTE_PTR csr = NULL;
CK_ULONG csrLength = 0;

rv = createCSR(session, publicKey, dn, sizeof(dn)/sizeof(CK_CHAR_PTR), &csr, &csrLength, 0, NULL, 0, exts, sizeof(exts)/sizeof(CK_CHAR_PTR));
if (rv != CKR_OK)
{
  PrintError("createCSR", rv);
  return;
}

printf("Create CSR: OK\n");

createCSREx

CK_RV createCSREx(CK_SESSION_HANDLE session, CK_OBJECT_HANDLE publicKey, CK_CHAR_PTR* dn, CK_ULONG dnLength, CK_BYTE_PTR* csr, CK_ULONG_PTR csrLength, CK_OBJECT_HANDLE privateKey, CK_CHAR_PTR* attributes, CK_ULONG attributesLength, CK_CHAR_PTR* extensions, CK_ULONG extensionsLength, CK_MECHANISM_PTR signatureMech)
Параметры:
  • session (in) – дескриптор сеанса.
  • publicKey (in) – дескриптор открытого ключа для создания сертификата.
  • dn (in) –

    указатель на массив типа CK_BYTE, задающий отличительное имя (distinguished name). Должен состоять из пар строк:

    • Первая строка должна содержать тип или идентификатор поля (OID), например: CN или 2.5.4.3.
    • Вторая строка – значение поля, например: Andrey Borisov в кодировке UTF-8.
  • dnLength (in) – количество строк в массиве, на который указывает dn.
  • csr (out) – указатель на массив байтов, в который будет записан созданный запрос на сертификат. Память для массива выделяется самой функцией createCSR. После окончания работы с массивом выделенную для него память необходимо освободить, вызвав функцию freeBuffer().
  • csrLength (out) – указатель на переменную, в которой сохраняется размер массива, на который указывает csr.
  • privatekey (in) – дескриптор закрытого ключа, соответствующего открытому ключу, на который ссылается publicKey. Если privateKey принимает значение 0, то поиск закрытого ключа будет осуществляться по идентификатору ключевой пары (CKA_ID открытого ключа).
  • attributes (in) –

    указатель на массив типа CK_BYTE, задающий дополнительные атрибуты. Должен состоять из пар строк:

    • Первая строка должна содержать тип или идентификатор поля (OID).
    • Вторая строка – значение поля.
  • attributeslength (in) – количество строк в массиве, на который указывает attributes.
  • extensions (in) –

    указатель на массив типа CK_BYTE, задающий расширения. Должен состоять из пар строк:

    • Первая строка должна содержать тип или идентификатор поля (OID).
    • Вторая строка – значение поля.
  • extensionsLength (in) – количество строк в массиве, на который указывает extensions.
  • signatureMech (in) – указатель на механизм подписи.

Расширенный вариант функции createCSR(). Формирует запрос на выпуск сертификата.

Запускается в режимах

Результат:Функция возвращает стандартные ошибки, предусмотренные спецификацией PKCS #11.

Совет

Полный список ошибок см. в приложении.

JC_CreateCertificateRequest

CK_RV JC_CreateCertificateRequest(CK_FUNCTION_LIST_PTR pFunctionList, CK_SESSION_HANDLE session, CK_OBJECT_HANDLE publicKey, CK_CHAR_PTR* dn, CK_ULONG dnLength, CK_BYTE_PTR* csr, CK_ULONG_PTR csrLength, CK_OBJECT_HANDLE privateKey, CK_CHAR_PTR* attributes, CK_ULONG attributesLength, CK_CHAR_PTR* extensions, CK_ULONG extensionsLength, CK_MECHANISM_PTR signatureMech)
Параметры:
  • pFunctionList (in) – функции PKCS#11.
  • session (in) – PKCS#11 сеанс.
  • publicKey (in) – открытый ключ для создания сертификата.
  • dn (in) – distinguished name. В параметр должен передаваться массив строк. В первой строке должен располагаться тип поля в текстовой форме, или OID, например, “CN”. Во второй строке должно располагаться значение поля в UTF8. Последующие поля передаются в следующих строках. Количество строк должно быть четным.
  • dnLength (in) – количество строк в массиве строк dn.
  • csr (out) – указатель на указатель на буфер, в который будет записан запрос на сертификат. Буфер создается внутри функции. После окончания работы с ним необходимо освободить его, вызвав функцию freeBuffer().
  • csrLength (out) – длина буфера, который будет записан запрос на сертификат.
  • privateKey (in) – закрытый ключ, парный publicKey (см. параметр выше). Если значение установленно в 0, то поиск закрытого ключа будет осуществляться по значению CKA_ID открытого ключа.
  • attributes (in) – дополнительные атрибуты для включения в запрос. Формат аналогичен параметру dn (см. выше).
  • attributesLength (in) – количество строк в массиве attributes.
  • extensions (in) – расширения для включения в запрос. Формат аналогичен параметру dn (см. выше).
  • extensionsLength (in) – количество строк в массиве extensions.
  • signatureMech (in) – указатель на механизм подписи.

Расширенное формирование запроса на сертификат при помощи сторонних реализаций PKCS#11.

Запускается в режимах

Результат:Функция возвращает стандартные ошибки, предусмотренные спецификацией PKCS #11.

Совет

Полный список ошибок см. в приложении.

verifyReq

CK_RV verifyReq(CK_BYTE_PTR pRequest, CK_ULONG ulRequestSize)
Параметры:
  • pRequest (in) – указатель на массив байтов, содержащий запрос на сертификат.
  • ulRequestSize (in) – размер массива, на который указывает csr.

Функция позволяет проверить подпись в запросе на сертификат в формате PKCS #10. Возвращаемое значение определяет результат проверки:

  • CKR_OK – подпись действительна,
  • CKR_SIGNATURE_INVALID – подпись недействительна.

Запускается в режимах

Результат:Функция возвращает стандартные ошибки, предусмотренные спецификацией PKCS #11.

Совет

Полный список ошибок см. в приложении.

verifyReqEx

CK_RV verifyReqEx(CK_SESSION_HANDLE session, CK_OBJECT_HANDLE publicKey, CK_BYTE_PTR csr, CK_ULONG csrLength, CK_MECHANISM_PTR mech)
Параметры:
  • session (in) – дескриптор сеанса.
  • publicKey (in) – дескриптор открытого ключа для создания сертификата.
  • csr (in) – указатель на массив байтов, содержащий запрос на сертификат.
  • csrLength (in) – размер массива, на который указывает csr.
  • mech (in) – механизм проверки подписи.

Расширенный вариант функции verifyReq(). Позволяет проверить подпись в запросе на сертификат. Возвращаемое значение определяет результат проверки:

  • CKR_OK – подпись действительна,
  • CKR_SIGNATURE_INVALID – подпись недействительна.

Запускается в режимах

Результат:Функция возвращает стандартные ошибки, предусмотренные спецификацией PKCS #11.

Совет

Полный список ошибок см. в приложении.

genCert

CK_RV genCert(CK_SESSION_HANDLE session, CK_BYTE_PTR csr, CK_ULONG csrLength, CK_OBJECT_HANDLE privateKey, CK_CHAR_PTR serial, CK_CHAR_PTR* issuerDN, CK_ULONG issuerDNLength, CK_ULONG days, CK_BYTE_PTR* certificate, CK_ULONG_PTR certificateLength)
Параметры:
  • session (in) – дескриптор сеанса.
  • csr (in) – указатель на массив байтов, содержащий запрос на сертификат.
  • csrLength (in) – размер массива, на который указывает csr.
  • privateKey (in) – дескриптор закрытого ключа издателя сертификата.
  • serial (in) – указатель на строку, содержащую серийный номер сертификата.
  • issuerDN (in) –

    указатель на массив типа CK_BYTE, задающий отличительное имя (distinguished name). Должен состоять из пар строк:

    • Первая строка должна содержать тип или идентификатор поля (OID), например: CN или 2.5.4.3.
    • Вторая строка – значение поля, например: Andrey Borisov в кодировке UTF-8.

    Если issuerDN принимает значение NULL_PTR, отличительное имя издателя сертификата будет совпадать с отличительным именем субъекта.

  • issuerDNLength (in) – количество элементов-строк в массиве, на который указывает issuerDN.
  • days (in) – срок действия сертификата в днях.
  • сertificate (out) – указатель на указатель на массив байтов (буфер), в который будет записан сертификат. Память для буфера выделяется самой функцией genCert. После окончания работы с ним необходимо освободить его, вызвав функцию freeBuffer().
  • сertificateLength (out) – указатель на переменную, которая при выполнении функции genCert примет значение, равное длине сгенерированного сертификата в байтах.

Функция создает сертификат из запроса на сертификат в формате PKCS #10.

Запускается в режимах

Результат:Функция возвращает стандартные ошибки, предусмотренные спецификацией PKCS #11.

Совет

Полный список ошибок см. в приложении.

genCertEx

CK_RV genCertEx(CK_SESSION_HANDLE session, CK_BYTE_PTR csr, CK_ULONG csrLength, CK_OBJECT_HANDLE privateKey, CK_OBJECT_HANDLE publicKey, CK_CHAR_PTR serial, CK_CHAR_PTR* issuerDN, CK_ULONG issuerDNLength, CK_ULONG days, CK_BYTE_PTR* certificate, CK_ULONG_PTR certificateLength, CK_MECHANISM_PTR mech)
Параметры:
  • session (in) – дескриптор сеанса.
  • csr (in) – указатель на массив байтов, содержащий запрос на сертификат.
  • csrLength (in) – размер массива, на который указывает csr.
  • privateKey (in) – дескриптор закрытого ключа издателя сертификата.
  • publicKey (in) – открытый ключ издателя сертификата.
  • serial (in) – указатель на строку, содержащую серийный номер сертификата.
  • issuerDN (in) –

    указатель на массив типа CK_BYTE, задающий отличительное имя (distinguished name). Должен состоять из пар строк:

    • Первая строка должна содержать тип или идентификатор поля (OID), например: CN или 2.5.4.3.
    • Вторая строка – значение поля, например: Andrey Borisov в кодировке UTF-8.

    Если issuerDN принимает значение NULL_PTR, отличительное имя издателя сертификата будет совпадать с отличительным именем субъекта.

  • issuerDNLength (in) – количество элементов-строк в массиве, на который указывает issuerDN.
  • days (in) – срок действия сертификата в днях.
  • сertificate (out) – указатель на указатель на массив байтов (буфер), в который будет записан сертификат. Память для буфера выделяется самой функцией genCert. После окончания работы с ним необходимо освободить его, вызвав функцию freeBuffer().
  • сertificateLength (out) – указатель на переменную, которая при выполнении функции genCert примет значение, равное длине сгенерированного сертификата в байтах.
  • mech (in) – механизм подписи.

Расширенный вариант функции genCert(). Позволяет создать сертификат из запроса на сертификат.

Запускается в режимах

Результат:Функция возвращает стандартные ошибки, предусмотренные спецификацией PKCS #11.

Совет

Полный список ошибок см. в приложении.

certVerify

CK_RV certVerify(CK_SESSION_HANDLE session, CK_OBJECT_HANDLE certificateToVerify, CK_OBJECT_HANDLE_PTR trustedCertificates, CK_ULONG trustedCertificatesLength, CK_OBJECT_HANDLE_PTR certificateChain, CK_ULONG certificateChainLength, CK_BYTE_PTR* crls, CK_ULONG_PTR crlsLengths, CK_ULONG crlsLength)
Параметры:
  • session (in) – дескриптор сеанса.
  • certificateToVerify (in) – дескриптор сертификата, который необходимо проверить.
  • trustedCertificates (in) – указатель на массив, содержащий доверенные сертификаты.
  • trustedCertificatesLength (in) – количество сертификатов в массиве, на который указывает trustedCertificates.
  • certificateChain (in) – указатель на массив, содержащий дескрипторы промежуточных сертификатов (имеет значение 0, если промежуточные сертификаты отсутствуют).
  • certificateChainLength (in) – количество дескрипторов объектов-сертификатов, в массиве, на который указывает certificateChain. Этот аргумент должен иметь значение 0, если certificateChain принимает такое значение.
  • crls (in) – указатель на массив указателей на списки отозванных сертификатов.
  • crlsLengths (in) – указатель на массив с длиной списка на который указывает crls.
  • crlsLength (in) – количество списков отозванных сертификатов в массиве clrs.

Функция используется для проверки подписи сертификатов формата X.509 по всей цепочке сертификации.

Запускается в режимах

Результат:Функция возвращает стандартные ошибки, предусмотренные спецификацией PKCS #11.

Совет

Полный список ошибок см. в приложении.

getCertificateInfo

CK_RV getCertificateInfo(CK_SESSION_HANDLE session, CK_OBJECT_HANDLE certificate, CK_CHAR_PTR* certificateInfo, CK_ULONG* certificateInfoLength)
Параметры:
  • session (in) – дескриптор сеанса.
  • certificate (in) – дескриптор объекта-сертификата.
  • certificateInfo (out) – указатель на массив байтов, в который будет записана информация о сертификате. Память для массива выделяется самой функцией getCertificateInfo. После окончания работы с массивом выделенную для него память необходимо освободить, вызвав функцию freeBuffer().
  • certificateInfoLength (out) – размер массива, в который возвращается информация о сертификате.

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

Запускается в режимах

Результат:Функция возвращает стандартные ошибки, предусмотренные спецификацией PKCS #11.

Совет

Полный список ошибок см. в приложении.

getCertificateInfoEx

CK_RV getCertificateInfoEx(CK_BYTE_PTR certificate, CK_ULONG certificateLength, CK_CHAR_PTR* certificateInfo, CK_ULONG* certificateInfoLength)
Параметры:
  • certificate (in) – указатель на массив байтов, содержащий сертификат в DER-кодировке.
  • certificateLength (in) – длина массива байтов, на который указывает certificate.
  • certificateInfo (out) – указатель на указатель на массив байтов (буфер), в который будет записана информация о сертификате. Память для массива выделяется самой функцией getCertificateInfoEx. После окончания работы с массивом выделенную для него память необходимо освободить, вызвав функцию freeBuffer().
  • certificateInfoLength (out) – размер массива, в который возвращается информация о сертификате.

Функция используется для получения сведений о сертификате. В отличие от функции getCertificateInfo сертификат не определяется дескриптором, а задаётся явно в виде массива байт. Результат возвращается в текстовом формате.

Запускается в режимах

Результат:Функция возвращает стандартные ошибки, предусмотренные спецификацией PKCS #11.

Совет

Полный список ошибок см. в приложении.

getCertificateAttribute

CK_RV getCertificateAttribute(CK_BYTE_PTR pX509data, CK_ULONG ulX509dataSize, JC_EX_X509_DATA_TYPE dataType, CK_BYTE_PTR* pOutputdata, CK_ULONG_PTR pulOutputdataSize)
Параметры:
  • pX509data (in) – сертификат в формате x509.
  • ulX509dataSize (in) – размер сертификата.
  • dataType (in) –

    тип получаемых данных:

    • X509_SUBJECT (0x01) – владелец сертификата,
    • X509_ISSUER (0x02) – издатель сертификата,
    • X509_SERIAL (0x03) – серийный номер сертификата.
  • pOutputdata (out) – выходные данные.
  • pulOutputdataSize (out) – размер выходных данных.

Получить параметры сертификата.

Запускается в режимах

Результат:Функция возвращает стандартные ошибки, предусмотренные спецификацией PKCS #11.

Совет

Полный список ошибок см. в приложении.

checkCertSignature

CK_RV checkCertSignature(CK_SESSION_HANDLE hSession, CK_BYTE_PTR pCertificate, CK_ULONG ulCertificateSize, CK_BYTE_PTR pTrustedSignerCertificate, CK_ULONG ulTrustedSignerCertificateSize)
Параметры:
  • hSession (in) – дескриптор сеанса.
  • pCertificate (in) – указатель на сертификат на проверку в DER-формате.
  • ulCertificateSize (in) – длина сертификата на проверку.
  • pTrustedSignerCertificate (in) – указатель на сертификат подписанта.
  • ulTrustedSignerCertificateSize (in) – длина сертификата подписанта.

Проверка подписи в сертификате на соответствие ключу его подписанта. Проверка подписи выполняется аппаратно. Хеширование выполняется аппаратно, если была вызвана функция useHardwareHash(CK_TRUE).

Запускается в режимах

Результат:Функция возвращает стандартные ошибки, предусмотренные спецификацией PKCS #11.

Совет

Полный список ошибок см. в приложении.

JC_Compose_CMS

CK_RV JC_Compose_CMS(JC_CMS_MATERIAL_PTR CMSmaterial, CK_BYTE_PTR_PTR cmsMessage, CK_ULONG_PTR cmsMessageSize)
Параметры:
  • CMSmaterial (in) – определение составных частей CMS сообщения.
  • cmsMessage (out) – указатель куда будет помещен адрес сформированного CMS сообщения.
  • cmsMessageSize (out) – указатель на длину сформированного CMS сообщения.

Формирует CMS сообщение.

Примечание

Функция предназначена только для работы с алгоритмами ГОСТ.

Запускается в режимах

Результат:Функция возвращает стандартные ошибки, предусмотренные спецификацией PKCS #11.

Совет

Полный список ошибок см. в приложении.

JC_Decompose_CMS

CK_RV JC_Decompose_CMS(CK_BYTE_PTR cms, CK_ULONG cmsSize, JC_CMS_CONTAINER_PTR* ppCMScontainer)
Параметры:
  • cms (in) – CMS сообщение.
  • cmsSize (in) – длина CMS сообщения.
  • ppCMScontainer (out) – указатель на описатель разобранного CMS, его буфер создается внутри функции. После окончания работы с ним необходимо освободить его, вызвав функцию freeBuffer().

Разбирает CMS сообщение.

Примечание

Функция предназначена только для работы с алгоритмами ГОСТ.

Запускается в режимах

Результат:Функция возвращает стандартные ошибки, предусмотренные спецификацией PKCS #11.

Совет

Полный список ошибок см. в приложении.

JC_KeyParametersFromCert

CK_RV JC_KeyParametersFromCert(CK_BYTE_PTR certificate, CK_ULONG certificateSize, JC_CERTIFICATE_MATERIAL_PTR* certificateMaterial, CK_ULONG_PTR certificateMaterialSize)
Параметры:
  • certificate (in) – указатель на DER представление X509 сертификата, поддерживаются только ГОСТовые сертификаты.
  • certificateSize (in) – длина представления сертификата.
  • certificateMaterial (out) – адрес указателя куда будет записан адрес описателя публичного ключа сертификата.
  • certificateMaterialSize (out) – указатель куда будет записана длина описателя публичного ключа сертификата.

Получить публичный ключ и параметры из X509 сертификата.

Запускается в режимах

Результат:Функция возвращает стандартные ошибки, предусмотренные спецификацией PKCS #11.

Совет

Полный список ошибок см. в приложении.

JC_CreateCertificateRenewal

CK_RV JC_CreateCertificateRenewal(CK_SESSION_HANDLE hSession, CK_OBJECT_HANDLE hOldPrivateKey, CK_OBJECT_HANDLE hOldCertificate, CK_OBJECT_HANDLE hNewPrivateKey, CK_UTF8CHAR_PTR_PTR ppAttributes, CK_ULONG ulAttributesLen, CK_BYTE_PTR_PTR ppCMC, CK_ULONG_PTR pulCMCSize)
Параметры:
  • hSession (in) – дескриптор сессии.
  • hOldPrivateKey (in) – дескриптор старого закрытого ключа.
  • hOldCertificate (in) – дескриптор старого сертификата. Если указано CK_INVALID_HANDLE, то старый сертификат ищется по CKA_ID от старого закрытого ключа.
  • hNewPrivateKey (in) – дескриптор нового закрытого ключа.
  • ppAttributes (in) –

    в параметр должен передаваться массив строк.

    В первой строке должен располагаться идентификатор атрибута в текстовой форме: OID или его текстовый аналог из OpenSSL, например, “CN”.

    Во второй строке должно располагаться значение атрибута в UTF8. Значение формируется по правилам asn1parse из OpenSSL.

    Последующие поля передаются в следующих строках.

    Количество строк должно быть четным.

  • ulAttributesLen (in) – размер списка атрибутов.
  • ppCMC (out) – указатель на буфер для запроса на переиздание. После окончания работы с ним необходимо освободить его, вызвав функцию freeBuffer().
  • pulCMCSize (out) – указатель на размер буфера в байтах.

Создает запрос на переиздание сертификата в формате CMC. На токене должен присутствовать старый сертификат и новый открытый ключ.

Примечание

Функция предназначена только для работы с алгоритмами ГОСТ.

Запускается в режимах

Результат:Функция возвращает стандартные ошибки, предусмотренные спецификацией PKCS #11.

Совет

Полный список ошибок см. в приложении.

JC_CreateCertificateRenewal2

CK_RV JC_CreateCertificateRenewal2(CK_SESSION_HANDLE hSession, CK_OBJECT_HANDLE hOldPrivateKey, CK_BYTE_PTR pCertificateBody, CK_ULONG ulCertificateBodySize, CK_OBJECT_HANDLE hNewPrivateKey, CK_UTF8CHAR_PTR_PTR ppAttributes, CK_ULONG ulAttributesLen, CK_BYTE_PTR_PTR ppCMC, CK_ULONG_PTR pulCMCSize)
Параметры:
  • hSession (in) – дескриптор сессии.
  • hOldPrivateKey (in) – дескриптор старого закрытого ключа.
  • pCertificateBody (in) – тело старого сертификата в DER формате. Если указано NULL, то старый сертификат ищется по CKA_ID от старого закрытого ключа.
  • ulCertificateBodySize (in) – размер тела старого сертификата в байтах. Если указано 0, то старый сертификат ищется по CKA_ID от старого закрытого ключа.
  • hNewPrivateKey (in) – дескриптор нового закрытого ключа.
  • ppAttributes (in) –

    в параметр должен передаваться массив строк.

    В первой строке должен располагаться идентификатор атрибута в текстовой форме: OID или его текстовый аналог из OpenSSL, например, “CN”.

    Во второй строке должно располагаться значение атрибута в UTF8. Значение формируется по правилам asn1parse из OpenSSL.

    Последующие поля передаются в следующих строках.

    Количество строк должно быть четным.

  • ulAttributesLen (in) – размер списка атрибутов.
  • ppCMC (out) – указатель на буфер для запроса на переиздание. После окончания работы с ним необходимо освободить его, вызвав функцию freeBuffer().
  • pulCMCSize (out) – указатель на размер буфера в байтах.

Создает запрос на переиздание сертификата в формате CMC. На токене должен присутствовать новый открытый ключ.

Примечание

Функция предназначена только для работы с алгоритмами ГОСТ.

Запускается в режимах

Результат:Функция возвращает стандартные ошибки, предусмотренные спецификацией PKCS #11.

Совет

Полный список ошибок см. в приложении.

Оглавление