| ||||
| ||||
Скажите, пожалуйста, как узнать дату подписи. Подписываю через simplified функции(CryptSignMessage). в примере signlo.c нашел get_signing_time, но там работа с зашифрованными сообщениями HCRYPTMSG... а при верификации CryptVerifyMessageSignature возвращается только BYTE*, который содержит decoded message, и структура - CRYPT_VERIFY_MESSAGE_PARA, в которой даты нету. Что делать? спасибо. | ||||
Ответы: | ||||
| ||||
В описании signlo.c * \brief Пример создания и обработки подписанных сообщений PKCS#7 * Signed с использованием функций низкого уровня * (Low Level Message Functions) Что касается HCRYPTMSG, то это "a handle of the opened message", т.е. в общем случае к шифрованию не имеет отношения. Кроме этого в формате шифрованых сообщений нет атрибутов одним из которых может быть время. Атрибуты есть только в подписаных сообщениях. По определению времени. В том же signlo.c есть полная разборка атрибута и преобразование его в FILETIME ret = CryptDecodeObject(TYPE_DER, szOID_RSA_signingTime, timeBlob->pbData, timeBlob->cbData, 0, /* no Flags*/ (DWORD*) &fileTime, &size); if (! ret) return ret; if ( ! FileTimeToSystemTime(&fileTime, &systemTime)) return 0; | ||||
| ||||
"Кроме этого в формате шифрованых сообщений нет атрибутов одним из которых может быть время. Атрибуты есть только в подписаных сообщениях." Это понятно:) у меня получилось, отрывать дату из подписи, как в примере signlo.c.... Но хотелось бы не через низкоуровневые функции. Т.е. при проверки подписи пользоваться CryptVerifyMessageSignature и как то дату доставать. Забавно у меня получилось: при подписывании сообщения с помощью CryptSignMessage дату запихнуть в CRYPT_SIGN_MESSAGE_PARA SignPara удалось, а с помощью CryptVerifyMessageSignature вытащить не могу, пользуюсь Low-level функциями... | ||||
| ||||
Наверно так задумано в микрософте: высокоуровневые фунцкции - миниум кодирования | ||||