Функции для работы с PKCS #7

pkcs7Sign

pkcs7Sign(CK_SESSION_HANDLE session, CK_BYTE_PTR data, CK_ULONG dataLength, CK_OBJECT_HANDLE signCertificate, 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) – дескриптор сертификата создателя сообщения.
  • envelope (out) – указатель на указатель на массив байтов (буфер), в который передается подпись или подписанное сообщение. Память для буфера выделяется самой функцией pkcs7Sign. После окончания работы с ним необходимо освободить его, вызвав функцию freeBuffer().
  • envelopeLength (out) – указатель на переменную, в которую записывается длина буфера, на который указывает envelope.
  • privateKey (in) – дескриптор закрытого ключа создателя сообщения. Может принимать значение 0, при котором поиск закрытого ключа будет осуществляться по идентификатору ключевой пары (CKA_ID из сертификата).
  • certificates (in) – указатель на массив дескрипторов сертификатов, которые следует добавить в сообщение.
  • certificatesLength (in) – количество дескрипторов сертификатов в массиве, на который указывает certificates.
  • flags (in) – флаги.

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

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

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

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

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

Совет

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

pkcs7SignEx

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

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

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

    Примечание

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

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

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

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

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

Совет

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

pkcs7VerifyHW

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

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

    Примечание

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

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

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

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

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

Совет

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

pkcs7TrustedVerifyHW

pkcs7TrustedVerifyHW(CK_SESSION_HANDLE session, CK_BYTE_PTR envelope, CK_ULONG envelopeLength, CK_BYTE_PTR data, CK_ULONG dataLength, CK_BYTE_PTR trustedSigner, CK_ULONG trustedSignerLen, CK_ULONG flags)
Параметры:
  • session (in) – дескриптор сеанса.
  • envelope (in) – указатель на массив типа CK_BYTE, содержащий объект данных (сообщение), подписанный в формате, соответствующем стандарту PKCS #7.
  • envelopeLength (in) – размер объекта данных, на который ссылается envelope.
  • data (in) – указатель на массив типа CK_BYTE, содержащий данные, если таковые отсутствуют в сообщении.
  • dataLength (in) –

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

    Примечание

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

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

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

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

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

Совет

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

pkcs7Parse

pkcs7Parse(CK_BYTE_PTR envelope, CK_ULONG envelopeLength, CK_BYTE_PTR* signerCert, CK_ULONG_PTR signerCertLen, CK_BYTE_PTR* attachedData, CK_ULONG_PTR dataLength)
Параметры:
  • envelope (in) – указатель на массив типа CK_BYTE, содержащий объект данных (сообщение), подписанный в формате, соответствующем стандарту PKCS #7.
  • envelopeLength (in) – размер объекта данных, на который ссылается envelope.
  • signerCert (out) – буфер для записи сертификата.
  • signerCertLen (out) – размер сертификата.
  • attachedData (out) – буфер для записи данных.
  • dataLength (out) – размер данных.

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

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

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

Совет

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

pkcs7ParseEx

pkcs7ParseEx(CK_BYTE_PTR envelope, CK_ULONG envelopeLength, CK_BYTE_PTR* signerCert, CK_ULONG_PTR signerCertLen, CK_BYTE_PTR* attachedData, CK_ULONG_PTR dataLength, CK_BYTE_PTR* signature, CK_ULONG_PTR signatureLength)
Параметры:
  • envelope (in) – указатель на массив типа CK_BYTE, содержащий объект данных (сообщение), подписанный в формате, соответствующем стандарту PKCS #7.
  • envelopeLength (in) – размер объекта данных, на который ссылается envelope.
  • signerCert (out) – буфер для записи сертификата.
  • signerCertLen (out) – размер сертификата.
  • data (out) – буфер для записи данных.
  • dataLength (out) – размер данных.
  • signature (out) – буфер для записи подписи.
  • signatureLength (out) – размер подписи.

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

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

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

Совет

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