| ||||
| ||||
Помогите разобраться с проблемой. При подписании хеша фи-ей CryptSignHash параметр pbSignature не заполняется, хотя если использовать стандартный MS криптопровайдер(выбрать другой сертификат), то заполняется. Никакой ошибки не происходид - результат выполнения: true. Я сравнивал область памяти под подпись до вызова и после. Поскольку она не изменяется, я решил, что ф-ия не заполняет pbSignature P.S. Я пишу плагин для подписания документа, поэтому вызов происходит в среде плагина. | ||||
Ответы: | ||||
| ||||
Если бы Вы фрагмент кода привели было бы проще помочь. А параметр pdwSigLen меняется? | ||||
| ||||
Код взят из примера. И если не в плагине, то работает. Как я уже говорил он и в плагине работает, но со стандартным MS криптопрвайдером. Размер подписи я получаю нормально, и первый и второй раз там 64. Вот код. Плагин пишется для Acrobat, поэтому для выделения памяти там используется ASmalloc, которая по описанию ничем не отличается от malloc. Хотя использвать malloc нельзя, Acrobat выдает exception. Еще раз повторю, что ф-ия выполняется без ошибок. if(!CryptSignHash( hHash, dwKeySpec, NULL, 0, NULL, &sSize)) { sprintf(buf,"CryptSignHash. LastError=[%d][%x]", GetLastError(), GetLastError()); traceMessage(buf); } ASUns8 * pbSignature = (ASUns8 *) ASmalloc(128); if(pbSignature == NULL)traceMessage("pbSignature ASmalloc FAILED"); if(!CryptSignHash( hHash, //HCRYPTHASH hHash, dwKeySpec, //DWORD dwKeySpec, NULL, //LPCTSTR sDescription, 0, //DWORD dwFlags, pbSignature, //BYTE* pbSignature, &sSize//DWORD* pdwSigLen )) { sprintf(buf,"CryptSignHash. LastError=[%d][%x]", GetLastError(), GetLastError()); traceMessage(buf); } | ||||
| ||||
Размер памяти в примере 128 - это я от бесисходности написал. на самом деле там sSize стоит. | ||||