25.08.2005 13:56:27дата подписи высокоуровневые Ответов: 3
zebra
Скажите, пожалуйста, как узнать дату подписи.
Подписываю через simplified функции(CryptSignMessage).
в примере signlo.c нашел get_signing_time, но там работа с зашифрованными сообщениями HCRYPTMSG...

а при верификации CryptVerifyMessageSignature возвращается только BYTE*, который содержит decoded message, и структура - CRYPT_VERIFY_MESSAGE_PARA, в которой даты нету.

Что делать?

спасибо.
 
Ответы:
26.08.2005 9:01:35support
В описании 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;
26.08.2005 10:08:29gromozeka
"Кроме этого в формате шифрованых сообщений нет атрибутов одним из которых может быть время. Атрибуты есть только в подписаных сообщениях."

Это понятно:)
у меня получилось, отрывать дату из подписи, как в примере signlo.c....
Но хотелось бы не через низкоуровневые функции. Т.е. при проверки подписи пользоваться CryptVerifyMessageSignature и как то дату доставать.

Забавно у меня получилось: при подписывании сообщения с помощью CryptSignMessage дату запихнуть в CRYPT_SIGN_MESSAGE_PARA SignPara удалось, а с помощью CryptVerifyMessageSignature вытащить не могу, пользуюсь Low-level функциями...
26.08.2005 10:25:37support
Наверно так задумано в микрософте: высокоуровневые фунцкции - миниум кодирования