Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.143.4.181] |
|
Сообщ.
#1
,
|
|
|
Добрый вечер. Собственно проблема: нужно конвертировать в 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 |