Статус: Новичок
Группы: Участники
Зарегистрирован: 20.01.2015(UTC) Сообщений: 6  Откуда: moscow
|
Автор: cross  CertFindCertificateInStore тоже WinAPI ))
cross@cross7:/dailybuilds/CSPbuild$ nm /opt/cprocsp/lib/amd64/librdrsup.so | grep Mult 0000000000021588 T MultiByteToWideChar 000000000002197d T WideCharToMultiByte
Спасибо за рекомендацию. Использовали. Ситуация не изменилась. Схема у нас та же - получаем base64 строку, распаковываем, получаем utf-8 строку с кириллическими символами. Функция перекодировки: Код:namespace converter
{
std::string ws_s(const std::wstring& s, UINT cp)
{
int slength = (int)s.length() + 1;
int len = WideCharToMultiByte(cp, 0, s.c_str(), slength, 0, 0, 0, 0);
std::string r(len, '\0');
WideCharToMultiByte(cp, 0, s.c_str(), slength, &r[0], len, 0, 0);
return r;
}
std::wstring s_ws(const std::string& s, UINT cp)
{
int slength = (int)s.length() + 1;
int len = MultiByteToWideChar(cp, 0, s.c_str(), slength, 0, 0);
std::wstring r(len, L'\0');
MultiByteToWideChar(cp, 0, s.c_str(), slength, &r[0], len);
return r;
}
}
std::wstring getFromUtf8(const char* p, std::size_t length)
{
return converter::s_ws(p, CP_UTF8);
}
Так поиск сертификата осуществляется. Код:bool getCertificateContext0(const HCERTSTORE hCertStore,
const std::wstring &keyName,
PCCERT_CONTEXT &pCertContext) {
bool result = false;
pCertContext = CertFindCertificateInStore(
hCertStore, // Дескриптор хранилища, в котором будет осуществлен поиск.
TYPE_DER, // Тип зашифрования. В этом поиске не используется.
0, // dwFindFlags. Специальный критерий поиска.
CERT_FIND_SUBJECT_STR_W, // Тип поиска. Задает вид поиска, который будет
keyName.c_str(), // pvFindPara. Выдает определенное значение поиска
0); // pCertContext равен NULL для первого вызова
if (!pCertContext) {
printlog(CMS_SERV_LOG, "getCertificateContext0 certificate wasn't found.");
} else {
result = true;
printlog(CMS_SERV_LOG, "getCertificateContext0 certificate found.");
}
return result;
}
Ничего по-прежнему не находится. Возможно ли найти сертификат по subject'у с кириллическими символами?
|