Статус: Новичок
Группы: Участники
Зарегистрирован: 16.02.2019(UTC) Сообщений: 5
|
Добрый вечер. Собственно проблема: нужно конвертировать в ASN.1 строку. На вход приходит, конкретно в моем случае, информация об издателе сертификата. Код:
issuer:CN="Тестовый УЦ ООО \"КРИПТО-ПРО\"", O="ООО \"КРИПТО-ПРО\"", C=RU, EMAILADDRESS=info@cryptopro.ru, L=Москва, ST=77 г. Москва, STREET="ул. Сущёвский вал, д. 18", OID.1.2.643.3.131.1.1=#120C303037373137313037393931, OID.1.2.643.100.1=#120D31303337373030303835343434
Все бы ничего, но кавычки \"КРИПТО-ПРО\"", будь они не ладны. В официальной документации сказано: Цитата:Quotation marks ("") are supported. A quotation can be included in a quoted value by using two sets of quotation marks, for example, CN="User ""one""". Однако, или я дурак, или лыжи не едут, но не работает. Если добавить в параметры флаг [CPP]CERT_NAME_STR_NO_QUOTING_FLAG[/CPP], то падает на STREET. Ну собственно код конвертера ниже, но он ничего нового не дает ;( Код:
using ByteArray = std::vector<uint8_t>;
static ByteArray string2asn1(LPCSTR pszString, int str_type)
{
ByteArray result;
DWORD cbSize;
CERT_NAME_BLOB blobEncodedIssuerName;
if (!(CertStrToNameA(
MY_ENCODING_TYPE,
pszString,
str_type,
NULL,
NULL,
&cbSize,
NULL)))
{
std::cout << "\nCould not get the length of the BLOB.\n";
return result;
}
if (!(blobEncodedIssuerName.pbData = (LPBYTE)malloc(cbSize)))
{
std::cout << "\nMemory Allocation for the BLOB failed.\n";
return result;
}
blobEncodedIssuerName.cbData = cbSize;
if (!(CertStrToNameA(
MY_ENCODING_TYPE | CERT_NAME_STR_ENABLE_UTF8_UNICODE_FLAG,
pszString,
str_type,
NULL,
blobEncodedIssuerName.pbData,
&blobEncodedIssuerName.cbData,
NULL)))
{
std::cout << "\nCould not write the blob.\n";
return result;
}
return ByteArray(blobEncodedIssuerName.pbData, blobEncodedIssuerName.pbData + blobEncodedIssuerName.cbData);
}// string2asn1
|